Welcome to the Nova CodeDOM library from Inevitable Software !
If you have just upgraded to a new version of the Nova CodeDOM library, see Version History for information about changes.
The Nova CodeDOM library is a set of classes that model all features of the C# 7.2 language, and also C# project and solution files. This library can be used to load and parse any existing C# code from solutions, projects, individual source files, or code fragments, creating an easily manipulated semantic object model in memory. All symbolic references can be resolved according to all of the many rules in the C# 7.2 specification. Comments and formatting information are preserved.
The resulting code object tree can be inspected, searched, analyzed, modified, and saved back to the original input files if desired. The Visitor design pattern is supported for processing the tree of objects, and code metrics can be generated. Solutions, projects, and code files can also be created programmatically and then saved. Formatting will default, or can be individually modified or globally overridden.
The library is itself written entirely in C#, and runs on .NET or Mono. In addition to this documentation, examples and testing tools are also included.
This is a commercial product with use restricted by the License Agreement.
Licenses can be purchased here: Inevitable Software Purchase Page
If you are new to the Nova CodeDOM library, see Getting Started to get familiar with it.
This library is basically a C# Parser, C# CodeDOM, C# Formatter, C# Metrics Tool, and C# Analyzer all-in-one!
Full support for all C# 7.2 features.
Provides a clean, consistent, and complete semantic object model ("CodeDOM") for C#, including project and solution files.
Loads any C# sources: Solution files, Project files, C# source files, or code fragments.
Retains comments and formatting information, but is not a messy syntax tree (AST) - there's no need to deal with tree nodes for parens, braces, commas, etc. Also, the tree is not read-only - it's fully modifiable and savable.
Memory-efficient code model can handle over 2,000,000 code objects in less than 150 MB.
Loads referenced assemblies and resolves symbolic references, handling type inference, overload resolution, implicit conversions, and the other gritty details of the 500+ page C# language specification (plus some undocumented or incorrect items).
Runs on .NET or Mono, using either Mono Cecil or .NET Reflection (on either platform) to load metadata from assemblies.
Fully compliant with ECMA-334 and ECMA-335 standards. Passes all Mono tests.
Reports any parse and resolve errors, and optionally all "TODO" and "HACK" type comments in the code.
Supports use of the Visitor design pattern to traverse the code object tree, and includes visitors to search for code objects by type, reference, or text with various options including regular expressions.
Supports use of LINQ queries on the code object tree, to find patterns of code or generate metrics.
The resulting CodeDOM tree can be analyzed, modified, and saved back to the input files as desired.
Cleanly and consistently formats output C# source with various formatting options.
Also allows for easy manual programmatic code creation, including project and solution files.
Manually created objects are formatted according to configured defaults, but can be overridden if desired.
Handles and preserves conditional compilation directives.
Includes support for generating code Metrics, and can also be used for Analysis and Refactoring.
Supports undocumented C# language features such as: __arglist, __makeref, __reftype, __refvalue.
Can be used to analyze sources, clean-up formatting, detect coding guideline deviations, generate metrics, translate or obfuscate sources, refactor code, or any other programmatic manipulation of C# source code.
Create your own tool to augment your build process, or create the next great C# development tool!
The following files are installed in the Nova CodeDOM installation:
Nova.CodeDOM.dll - the Nova CodeDOM library. This is the ONLY redistributable file, but if you use an obfuscation or packaging tool that allows it, you should pack it inside your own DLL or EXE if possible.
Nova.CodeDOM_Help.chm - this Help file.
Nova.CodeDOM.XML - a documentation file used to provide intellisense for the library.
Nova.CLI.exe - a command-line utility for the Nova CodeDOM library that can load solutions, projects, and individual C# files for testing, so that any errors or problems with loading, parsing, and resolving can be seen. Can also be used to re-format C# files. See Nova CLI for more information.
Nova.CLI.exe.config - contains Nova CodeDOM library configuration options for the Nova CLI utility. Use this file as a template to add Nova CodeDOM configuration options to your own config file.
Nova.Studio.exe - a WPF-based IDE-like program that uses the Nova CodeDOM library to load solutions, projects, and individual C# files for testing. Messages are shown, project references and files can be inspected, and files can be diffed, saved, etc. See Nova Studio for more information.
Nova.Studio.exe.config - contains Nova CodeDOM library configuration options for Nova Studio.
Nova.UI.dll - contains UI classes used to render Nova CodeDOM objects in Nova Studio.
Nova.Examples folder - contains the sources for a console app that contains example usages of the Nova CodeDOM library. Inspect the example code and comments in the Program.cs file and compile and run the application if you wish. See Examples for similar examples in this help file.
Nova.Test folder - contains the sources for a console app that contains some tests for the Nova CodeDOM library - most notably a large example of manually generated code. Inspect the example code and comments in the Program.cs and ManualTests.cs files and compile and run the application if you wish.
Nova.Test.Library folder - contains the sources for a test library referenced by the Nova.Test solution in order to test references to code objects in another assembly.
Mono folder - contains a Nova.CodeDOM.dll and Nova.CLI.exe that will run under Mono (on either Linux or Windows).
ReflectionOnly folder - contains a Nova.CodeDOM.dll that does not use Mono Cecil or any other methods except reflection to load metadata. Use this version if you do not want the public source Mono Cecil to be used, or if you decide for other reasons to use only reflection to load metadata (this DLL is slightly smaller and faster in this case). A Nova.CLI.exe and Nova.Studio.exe that are linked with this DLL are also included.
Use the Nova.CLI.exe.config file as an example for your own application's Nova CodeDOM settings.