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" />
paket add Mono.TextTemplating --version 3.0.0
#r "nuget: Mono.TextTemplating, 3.0.0"
// Install Mono.TextTemplating as a Cake Addin #addin nuget:?package=Mono.TextTemplating&version=3.0.0 // Install Mono.TextTemplating as a Cake Tool #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-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
andITextTemplatingSessionHost
with a default implementation that can be overridden if needed. - It wraps a
TemplateEngine
instance 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.
ITextTemplatingEngineHost
ITextTemplatingSessionHost
,ITextTemplatingSession
,TextTemplatingSession
IDirectiveProcessor
,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 aTokenizer
to parse a template string into aParsedTemplate
Tokenizer
: tokenizes an T4 input streamParsedTemplate
: provides direct access to the segments and directives of a parsed templateTemplatingEngine.GetSettings()
: uses the directives in aParsedTemplate
to initialize aTemplateSettings
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" #>
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. |
.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 (22)
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 (5)
Showing the top 5 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
|
|
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 from source
|
Version | Downloads | Last updated |
---|---|---|
3.0.0 | 133 | 9/3/2024 |
3.0.0-preview-0052-g5d0f76c785 | 142,209 | 2/28/2024 |
3.0.0-preview-0049-g4f33c8d8b1 | 673 | 1/27/2024 |
3.0.0-preview-0045-g9b6fc72764 | 62,511 | 1/23/2024 |
3.0.0-preview-0027-g2711105671 | 2,741 | 10/3/2023 |
2.3.1 | 6,115,888 | 10/28/2022 |
2.3.0 | 6,778 | 10/5/2022 |
2.2.1 | 92,355,448 | 2/23/2021 |
2.2.0 | 32,935 | 12/5/2020 |
2.0.5 | 150,091 | 6/13/2019 |
2.0.4 | 8,508 | 4/4/2019 |
2.0.3 | 3,237 | 3/7/2019 |
2.0.2 | 4,087 | 12/14/2018 |
2.0.1 | 1,479 | 12/14/2018 |
2.0.0 | 1,407 | 12/13/2018 |
1.3.1 | 258,675 | 3/31/2017 |
1.3.0 | 48,659 | 3/17/2017 |
1.2.0 | 1,695 | 3/17/2017 |
1.1.0 | 9,204 | 3/14/2016 |
1.0.0 | 29,472 | 6/15/2014 |