Mono.TextTemplating 3.0.0-preview-0045-g9b6fc72764
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-t4to 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
ITextTemplatingEngineHostandITextTemplatingSessionHostwith a default implementation that can be overridden if needed. - It wraps a
TemplateEngineinstance and provides simplifiedProcessTemplateAsync()andPreprocessTemplateAsync()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.
ITextTemplatingEngineHostITextTemplatingSessionHost,ITextTemplatingSession,TextTemplatingSessionIDirectiveProcessor,IRecognizeHostSpecific,DirectiveProcessor,DirectiveProcessorException,RequiresProvidesDirectiveProcessor,ParameterDirectiveProcessor
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 assembliesTemplateGenerator.ParseTemplate(): uses aTokenizerto parse a template string into aParsedTemplateTokenizer: tokenizes an T4 input streamParsedTemplate: provides direct access to the segments and directives of a parsed templateTemplatingEngine.GetSettings(): uses the directives in aParsedTemplateto initialize aTemplateSettingsTemplateSettings: 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.
|
24 |
|
Microsoft.DotNet.Scaffolding.Shared
Contains interfaces for Project Model and messaging for scaffolding.
|
25 |
|
Microsoft.DotNet.Scaffolding.Shared
Contains interfaces for Project Model and messaging for scaffolding.
|
26 |
|
Microsoft.DotNet.Scaffolding.Shared
Contains interfaces for Project Model and messaging for scaffolding.
|
28 |
|
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
|
24 |
|
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
|
25 |
|
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
|
26 |
|
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
|
28 |
|
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
|
29 |
|
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools.
|
34 |
.NET Framework 4.7.2
- No dependencies.
.NET 6.0
- System.CodeDom (>= 6.0.0)
.NET Standard 2.0
- System.CodeDom (>= 6.0.0)
| Version | Downloads | Last updated |
|---|---|---|
| 3.0.0 | 34 | 11/08/2024 |
| 3.0.0-preview-0052-g5d0f76c785 | 33 | 05/01/2024 |
| 3.0.0-preview-0049-g4f33c8d8b1 | 28 | 05/10/2024 |
| 3.0.0-preview-0045-g9b6fc72764 | 25 | 05/10/2024 |
| 3.0.0-preview-0027-g2711105671 | 26 | 05/03/2024 |
| 2.3.1 | 30 | 05/04/2024 |
| 2.3.0 | 29 | 05/10/2024 |
| 2.2.1 | 36 | 06/13/2023 |
| 2.2.0 | 22 | 05/04/2024 |
| 2.0.5 | 34 | 05/04/2024 |
| 2.0.4 | 29 | 05/10/2024 |
| 2.0.3 | 35 | 05/10/2024 |
| 2.0.2 | 31 | 05/06/2024 |
| 2.0.1 | 35 | 05/04/2024 |
| 2.0.0 | 30 | 05/10/2024 |
| 1.3.1 | 28 | 05/25/2024 |
| 1.3.0 | 25 | 06/02/2024 |
| 1.2.0 | 28 | 05/03/2024 |
| 1.1.0 | 31 | 05/10/2024 |
| 1.0.0 | 27 | 05/03/2024 |