Mono.TextTemplating
3.0.0
dotnet add package Mono.TextTemplating --version 3.0.0
NuGet\Install-Package Mono.TextTemplating -Version 3.0.0
<PackageReference Include="Mono.TextTemplating" Version="3.0.0" />
<PackageVersion Include="Mono.TextTemplating" Version="3.0.0" />
<PackageReference Include="Mono.TextTemplating" />
paket add Mono.TextTemplating --version 3.0.0
#r "nuget: Mono.TextTemplating, 3.0.0"
#:package Mono.TextTemplating@3.0.0
#addin nuget:?package=Mono.TextTemplating&version=3.0.0
#tool nuget:?package=Mono.TextTemplating&version=3.0.0
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" #>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 is compatible. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.7.2
- No dependencies.
-
.NETStandard 2.0
- System.CodeDom (>= 6.0.0)
-
net6.0
- System.CodeDom (>= 6.0.0)
NuGet packages (24)
Showing the top 5 NuGet packages that depend on Mono.TextTemplating:
| Package | Downloads |
|---|---|
|
Microsoft.EntityFrameworkCore.Design
Shared design-time components for Entity Framework Core tools. |
|
|
Microsoft.VisualStudio.Web.CodeGenerators.Mvc
Code Generators for ASP.NET Core MVC. Contains code generators for MVC Controllers and Views. |
|
|
Microsoft.VisualStudio.Web.CodeGeneration.Design
Code Generation tool for ASP.NET Core. Contains the dotnet-aspnet-codegenerator command used for generating controllers and views. |
|
|
Microsoft.VisualStudio.Web.CodeGeneration
Contains the CodeGenCommand that finds the appropriate code generator and invokes it from project dependencies. |
|
|
Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCore
Contains Entity Framework Core Services used by ASP.NET Core Code Generators. |
GitHub repositories (7)
Showing the top 7 popular GitHub repositories that depend on Mono.TextTemplating:
| Repository | Stars |
|---|---|
|
dotnet/efcore
EF Core is a modern object-database mapper for .NET. It supports LINQ queries, change tracking, updates, and schema migrations.
|
|
|
linq2db/linq2db
Linq to database provider.
|
|
|
mono/monodevelop
MonoDevelop is a cross platform .NET IDE
|
|
|
ErikEJ/EFCorePowerTools
Entity Framework Core Power Tools - reverse engineering, migrations and model visualization in Visual Studio & CLI
|
|
|
dotnet/Scaffolding
Code generators to speed up development.
|
|
|
dotnet/dotnet
Home of .NET's Virtual Monolithic Repository which includes all the code needed to build the .NET SDK.
|
|
|
corvus-dotnet/Corvus.JsonSchema
Support for Json Schema validation and entity generation
|
| Version | Downloads | Last Updated |
|---|---|---|
| 3.0.0 | 46,450,181 | 9/3/2024 |
| 3.0.0-preview-0052-g5d0f76c785 | 336,184 | 2/28/2024 |
| 3.0.0-preview-0049-g4f33c8d8b1 | 953 | 1/27/2024 |
| 3.0.0-preview-0045-g9b6fc72764 | 102,028 | 1/23/2024 |
| 3.0.0-preview-0027-g2711105671 | 3,192 | 10/3/2023 |
| 2.3.1 | 23,891,498 | 10/28/2022 |
| 2.3.0 | 14,396 | 10/5/2022 |
| 2.2.1 | 212,610,200 | 2/23/2021 |
| 2.2.0 | 37,842 | 12/5/2020 |
| 2.0.5 | 163,006 | 6/13/2019 |
| 2.0.4 | 10,304 | 4/4/2019 |
| 2.0.3 | 4,654 | 3/7/2019 |
| 2.0.2 | 4,969 | 12/14/2018 |
| 2.0.1 | 2,357 | 12/14/2018 |
| 2.0.0 | 2,294 | 12/13/2018 |
| 1.3.1 | 263,404 | 3/31/2017 |
| 1.3.0 | 50,777 | 3/17/2017 |
| 1.2.0 | 2,720 | 3/17/2017 |
| 1.1.0 | 10,221 | 3/14/2016 |
| 1.0.0 | 31,454 | 6/15/2014 |