Mono.TextTemplating 3.0.0-preview-0049-g4f33c8d8b1

Mono.TextTemplating

NOTE: To use a template at runtime in your app, you do not need to host the engine. It is generally preferable to use dotnet-t4 to generate a runtime template class and compile that into your app, as this has substantially less overhead than hosting the engine.

Mono.TextTemplating is an open-source reimplementation of the Visual Studio T4 text templating engine, and supports C# 10 and .NET 6. This package is the engine package, which can be used to host the T4 engine in your own app.

By default the engine uses the C# compiler from the .NET SDK, but the Mono.TextTemplating.Roslyn package can be used to bundle a copy of the Roslyn C# compiler and host it in-process. This may improve template compilation performance when compiling multiple templates, and guarantees a specific version of the compiler.

Usage

This will read a template from templateFile, compile and process it, and write the output to outputFile:

var generator = new TemplateGenerator ();
bool success = await generator.ProcessTemplateAsync (templateFilename, outputFilename);

This does the same thing as a series of lower-level steps, allowing it to provide additional compiler arguments by modifying the TemplateSettings:

string templateContent = File.ReadAllText (templateFilename);

var generator = new TemplateGenerator ();
ParsedTemplate parsed = generator.ParseTemplate (templateFilename, templateContent);
TemplateSettings settings = TemplatingEngine.GetSettings (generator, parsed);

settings.CompilerOptions = "-nullable:enable";

(string generatedFilename, string generatedContent) = await generator.ProcessTemplateAsync (
    parsed, inputFilename, inputContent, outputFilename, settings
);

File.WriteAllText (generatedFilename, generatedContent);

API Overview

Hosting

In most cases, you need only use or subclass TemplateGenerator:

  • It implements ITextTemplatingEngineHost and ITextTemplatingSessionHost with a default implementation that can be overridden if needed.
  • It wraps a TemplateEngine instance and provides simplified ProcessTemplateAsync() and PreprocessTemplateAsync() methods.

VS T4 Compatibility

Mono.TextTemplating has session, host and directive processor interfaces and classes in the Microsoft.VisualStudio.TextTemplating namespace that are near-identical to the original Visual Studio T4 implementation. This allows older T4 templates and directive processors to work with Mono.TextTemplating with few (if any) changes.

The Microsoft.VisualStudio.TextTemplating.(ITextTemplatingEngine,Engine) hosting API is supported but deprecated.

Advanced

For advanced use, some lower level classes and methods are accessible:

  • TemplatingEngine: generates C# classes from T4 templates and compiles them into assemblies
  • TemplateGenerator.ParseTemplate(): uses a Tokenizer to parse a template string into a ParsedTemplate
  • Tokenizer: tokenizes an T4 input stream
  • ParsedTemplate: provides direct access to the segments and directives of a parsed template
  • TemplatingEngine.GetSettings(): uses the directives in a ParsedTemplate to initialize a TemplateSettings
  • TemplateSettings: settings that control code generation and compilation.
  • CompiledTemplate: a template that has been compiled but not executed

Differences from VS T4

The Mono.TextTemplating engine contains many improvements over the original Visual Studio T4 implementation, including:

  • It supports the latest .NET APIs and C# language version
  • The engine and the code it generates are compatible with .NET Core and .NET 5+
  • It executes templates in an AssemblyLoadContext, which allows the generated assemblies to be garbage collected (where supported)
  • Parameter directives may use primitive types: <#@ parameter name="Foo" type="int" #>

Showing the top 20 packages that depend on Mono.TextTemplating.

Packages Downloads
Microsoft.DotNet.Scaffolding.Shared
Contains interfaces for Project Model and messaging for scaffolding.
171
Microsoft.DotNet.Scaffolding.Shared
Contains interfaces for Project Model and messaging for scaffolding.
185
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
154
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
155
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
158
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
180
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
194
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
216
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
218
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
247
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
265
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
272
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
276
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
311
Microsoft.VisualStudio.Web.CodeGeneration
Contains the CodeGenCommand that finds the appropriate code generator and invokes it from project dependencies.
160
Microsoft.VisualStudio.Web.CodeGeneration.Design
Code Generation tool for ASP.NET Core. Contains the dotnet-aspnet-codegenerator command used for generating controllers and views.
155
Microsoft.VisualStudio.Web.CodeGeneration.Design
Code Generation tool for ASP.NET Core. Contains the dotnet-aspnet-codegenerator command used for generating controllers and views.
592
Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCore
Contains Entity Framework Core Services used by ASP.NET Core Code Generators.
154
Microsoft.VisualStudio.Web.CodeGenerators.Mvc
Code Generators for ASP.NET Core MVC. Contains code generators for MVC Controllers and Views.
205

.NET Framework 4.7.2

  • No dependencies.

.NET 6.0

.NET Standard 2.0

Version Downloads Last updated
3.0.0 540 09/20/2024
3.0.0-preview-0052-g5d0f76c785 133 06/24/2024
3.0.0-preview-0049-g4f33c8d8b1 143 07/20/2024
3.0.0-preview-0045-g9b6fc72764 130 07/20/2024
3.0.0-preview-0027-g2711105671 148 07/20/2024
2.3.1 414 02/05/2024
2.3.0 161 07/20/2024
2.2.1 377 02/04/2024
2.2.0 137 07/20/2024
2.0.5 142 07/20/2024
2.0.4 122 07/20/2024
2.0.3 131 07/20/2024
2.0.2 141 07/20/2024
2.0.1 142 07/20/2024
2.0.0 149 07/20/2024
1.3.1 132 07/20/2024
1.3.0 141 07/20/2024
1.2.0 137 07/20/2024
1.1.0 136 07/20/2024
1.0.0 133 07/20/2024