System.CodeDom 9.0.0

About

Provides functionality for dynamically generating and compiling source code using the Code Document Object Model (CodeDOM).

It allows developers to represent code in a language-agnostic format and then generate code in multiple languages, such as C# and VB.NET. The primary use cases include creating dynamic code generation tools, runtime code generation, and facilitating code analysis or transformation.

For a new modern development consider using the .NET Compiler Platform SDK, in particular Roslyn source generators.

Key Features

  • Write code using a common object model that can be translated into multiple programming languages.
  • Generate and compile code at runtime based on the CodeDOM.

How to Use

Generating and compiling C# code:

using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;

// Create a new CodeCompileUnit to hold the code
var compileUnit = new CodeCompileUnit();

// Create a namespace
var codeNamespace = new CodeNamespace("MyNamespace");
compileUnit.Namespaces.Add(codeNamespace);

// Create a class
var classDeclaration = new CodeTypeDeclaration("MyClass")
{
    IsClass = true
};
codeNamespace.Types.Add(classDeclaration);

// Add a simple method to the class
var method = new CodeMemberMethod
{
    Name = "HelloWorld",
    ReturnType = new CodeTypeReference(typeof(void)),
};
classDeclaration.Members.Add(method);

var methodInvocation = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("Console"),
                                                      "WriteLine",
                                                      new CodePrimitiveExpression("Hello, World!"));
method.Statements.Add(methodInvocation);

// Generate C# code from the CodeDOM structure
CodeDomProvider provider = new CSharpCodeProvider();

using (var writer = new StringWriter())
{
    var codeGenereationOptions = new CodeGeneratorOptions()
    {
        BlankLinesBetweenMembers = false,
        IndentString = "  ",
    };

    provider.GenerateCodeFromCompileUnit(compileUnit, writer, codeGenereationOptions);
    Console.WriteLine(writer.GetStringBuilder().ToString());
}

This example generates:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace MyNamespace {

  public class MyClass {
    private void HelloWorld() {
      Console.WriteLine("Hello, World!");
    }
  }
}

Main Types

The main types provided by this library are:

  • System.CodeDom.CodeObject
  • System.CodeDom.CodeCompileUnit
  • System.CodeDom.CodeNamespace
  • System.CodeDom.CodeTypeDeclaration
  • System.CodeDom.CodeMemberMethod
  • System.CodeDom.CodeTypeReference
  • System.CodeDom.CodeMethodInvokeExpression
  • System.CodeDom.CodeTypeReferenceExpression
  • System.CodeDom.CodePrimitiveExpression
  • System.CodeDom.Compiler.CodeDomProvider
  • System.CodeDom.Compiler.CodeGeneratorOptions
  • Microsoft.CSharp.CSharpCodeProvider
  • Microsoft.VisualBasic.VBCodeProvider

Additional Documentation

Feedback & Contributing

System.CodeDom is released as open source under the MIT license. Bug reports and contributions are welcome at the GitHub repository.

Showing the top 20 packages that depend on System.CodeDom.

Packages Downloads
EntityFramework
Entity Framework 6 (EF6) is a tried and tested object-relational mapper for .NET with many years of feature development and stabilization.
14
Microsoft.Build.Runtime
This package delivers a complete executable copy of MSBuild. Reference this package only if your application needs to load projects or execute in-process builds without requiring installation of MSBuild. Successfully evaluating projects using this package requires aggregating additional components (like the compilers) into an application directory.
16
Microsoft.Build.Tasks.Core
This package contains the Microsoft.Build.Tasks assembly which implements the commonly used tasks of MSBuild.
13
Microsoft.Windows.Compatibility
This Windows Compatibility Pack provides access to APIs that were previously available only for .NET Framework. It can be used from both .NET as well as .NET Standard.
13
Microsoft.Windows.Compatibility
This Windows Compatibility Pack provides access to APIs that were previously available only for .NET Framework. It can be used from both .NET Core as well as .NET Standard. When using NuGet 3.x this package requires at least version 3.4.
697
Mono.TextTemplating
Open-source implementation of the T4 templating engine.
14
Mono.TextTemplating
Open-source implementation of the T4 templating engine.
17
Mono.TextTemplating
Open source implementation of the T4 templating engine This package allows embedding the T4 engine in an application. * To install as a dotnet global or local tool, use `dotnet-t4` instead. * To install in a project as a `DotNetCliToolReference`, use `dotnet-t4-project-tool` instead.
18
PublicApiGenerator
This library simply returns your public API as a string. You can use this in approval style tests or for documentation.
13
SoapCore
SOAP protocol middleware for ASP.NET Core
23
SoapCore
SOAP protocol middleware for ASP.NET Core
28
SoapCore
SOAP protocol middleware for ASP.NET Core
49
SoapCore
SOAP protocol middleware for ASP.NET Core
108
System.Management
Provides access to a rich set of management information and management events about the system, devices, and applications instrumented to the Windows Management Instrumentation (WMI) infrastructure. Commonly Used Types: System.Management.ManagementClass System.Management.ManagementObject System.Management.SelectQuery
13
System.Management
Provides access to a rich set of management information and management events about the system, devices, and applications instrumented to the Windows Management Instrumentation (WMI) infrastructure. Commonly Used Types: System.Management.ManagementClass System.Management.ManagementObject System.Management.SelectQuery
14
System.Management
Provides access to a rich set of management information and management events about the system, devices, and applications instrumented to the Windows Management Instrumentation (WMI) infrastructure. Commonly Used Types: System.Management.ManagementClass System.Management.ManagementObject System.Management.SelectQuery
16
System.Management
Provides access to a rich set of management information and management events about the system, devices, and applications instrumented to the Windows Management Instrumentation (WMI) infrastructure. Commonly Used Types: System.Management.ManagementClass System.Management.ManagementObject System.Management.SelectQuery
27
System.Management
Provides access to a rich set of management information and management events about the system, devices, and applications instrumented to the Windows Management Instrumentation (WMI) infrastructure. Commonly Used Types: System.Management.ManagementClass System.Management.ManagementObject System.Management.SelectQuery When using NuGet 3.x this package requires at least version 3.4.
13
System.Management
Provides access to a rich set of management information and management events about the system, devices, and applications instrumented to the Windows Management Instrumentation (WMI) infrastructure. Commonly Used Types: System.Management.ManagementClass System.Management.ManagementObject System.Management.SelectQuery When using NuGet 3.x this package requires at least version 3.4.
16

https://go.microsoft.com/fwlink/?LinkID=799421

.NET Framework 4.6.2

  • No dependencies.

.NET 8.0

  • No dependencies.

.NET 9.0

  • No dependencies.

.NET Standard 2.0

  • No dependencies.

Version Downloads Last updated
9.0.0 5 12/02/2024
9.0.0-rc.2.24473.5 4 11/05/2024
9.0.0-rc.1.24431.7 3 12/06/2024
9.0.0-preview.7.24405.7 3 11/15/2024
9.0.0-preview.6.24327.7 3 11/09/2024
9.0.0-preview.5.24306.7 3 12/02/2024
9.0.0-preview.4.24266.19 9 06/01/2024
9.0.0-preview.3.24172.9 10 05/10/2024
9.0.0-preview.2.24128.5 7 05/02/2024
9.0.0-preview.1.24080.9 8 05/24/2024
8.0.0 30 12/10/2023
8.0.0-rc.2.23479.6 13 05/10/2024
8.0.0-rc.1.23419.4 7 06/02/2024
8.0.0-preview.7.23375.6 12 05/10/2024
8.0.0-preview.6.23329.7 16 08/08/2023
8.0.0-preview.5.23280.8 11 05/10/2024
8.0.0-preview.4.23259.5 9 05/10/2024
8.0.0-preview.3.23174.8 5 05/24/2024
8.0.0-preview.2.23128.3 8 05/10/2024
8.0.0-preview.1.23110.8 8 05/10/2024
7.0.0 11 05/10/2024
7.0.0-rc.2.22472.3 9 05/14/2024
7.0.0-rc.1.22426.10 7 06/02/2024
7.0.0-preview.7.22375.6 9 05/24/2024
7.0.0-preview.6.22324.4 10 05/10/2024
7.0.0-preview.5.22301.12 8 06/02/2024
7.0.0-preview.4.22229.4 9 05/24/2024
7.0.0-preview.3.22175.4 7 05/10/2024
7.0.0-preview.2.22152.2 14 04/20/2022
7.0.0-preview.1.22076.8 9 05/24/2024
6.0.2-mauipre.1.22102.15 6 06/02/2024
6.0.2-mauipre.1.22054.8 8 05/24/2024
6.0.0 105 04/20/2022
6.0.0-rc.2.21480.5 9 06/02/2024
6.0.0-rc.1.21451.13 9 05/01/2024
6.0.0-preview.7.21377.19 8 05/03/2022
6.0.0-preview.6.21352.12 7 06/02/2024
6.0.0-preview.5.21301.5 10 05/24/2024
6.0.0-preview.4.21253.7 8 05/24/2024
6.0.0-preview.3.21201.4 7 05/24/2024
6.0.0-preview.2.21154.6 7 05/24/2024
6.0.0-preview.1.21102.12 6 06/02/2024
5.0.0 778 05/05/2022
5.0.0-rc.2.20475.5 5 11/28/2024
5.0.0-rc.1.20451.14 7 06/02/2024
5.0.0-preview.8.20407.11 9 06/02/2024
5.0.0-preview.7.20364.11 5 06/02/2024
5.0.0-preview.6.20305.6 8 05/24/2024
5.0.0-preview.5.20278.1 6 05/24/2024
5.0.0-preview.4.20251.6 3 11/10/2024
5.0.0-preview.3.20214.6 4 11/25/2024
5.0.0-preview.2.20160.6 6 05/24/2024
5.0.0-preview.1.20120.5 8 05/24/2024
4.7.0 1,612 04/20/2022
4.7.0-preview3.19551.4 8 05/24/2024
4.7.0-preview2.19523.17 8 05/24/2024
4.7.0-preview1.19504.10 6 05/24/2024
4.6.0 4 11/25/2024
4.6.0-rc1.19456.4 7 06/02/2024
4.6.0-preview9.19421.4 4 05/24/2024
4.6.0-preview9.19416.11 8 05/24/2024
4.6.0-preview8.19405.3 8 05/24/2024
4.6.0-preview7.19362.9 7 05/24/2024
4.6.0-preview6.19303.8 5 05/24/2024
4.6.0-preview6.19264.9 6 05/24/2024
4.6.0-preview5.19224.8 10 05/24/2024
4.6.0-preview4.19212.13 4 05/24/2024
4.6.0-preview3.19128.7 8 05/22/2024
4.6.0-preview.19073.11 8 05/05/2024
4.6.0-preview.18571.3 8 05/24/2024
4.5.0 33 06/15/2022
4.5.0-rc1 8 06/01/2024
4.5.0-preview2-26406-04 8 05/24/2024
4.5.0-preview1-26216-02 7 05/24/2024
4.5.0-preview1-25914-04 5 05/24/2024
4.4.0 21 04/20/2022
4.4.0-preview2-25405-01 8 05/24/2024
4.4.0-preview1-25305-02 8 05/24/2024