pauldeen79.TemplateFramework.Console 0.3.0

There is a newer version of this package available.
See the version list below for details.
dotnet tool install --global pauldeen79.TemplateFramework.Console --version 0.3.0                
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest # if you are setting up this repo
dotnet tool install --local pauldeen79.TemplateFramework.Console --version 0.3.0                
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=pauldeen79.TemplateFramework.Console&version=0.3.0                
nuke :add-package pauldeen79.TemplateFramework.Console --version 0.3.0                

TemplateFramework

Template and code generation framework for C#

If you want to create templates in any .NET language (C#, VB.Net, F#) and run them using a dotnet global tool, this framework is for you!

We currently target .NET 7.0, but the code can easily be ported back to older .NET versions.

Difference between a template and code generation provider

A code generation provider is a class that provides a template instance, along with optional model and additional parameters. This is typically the level you want to use, if you want to scaffold multiple files using a single command.

If you want to use the template abstraction level, then you have to make sure the template class has a public parameterless constructor.

Features

  • Runs templates or code generation providers from .NET assemblies from command line
  • Supports generating single or multiple files from one template
  • Supports custom hosting of the template engine or code generation engine, if you want to
  • Writes output to either console, clipboard or file system
  • Supports child templates, if you want to split your template into multiple logical templates
  • Battle tested
  • Extensible using dependency injection (write new implementations, and register them in your DI container)

Packages

  • TemplateFramework.Abstractions: Interfaces for templates, code generation providers and generation environments
  • TemplateFramework.Core: Template engine and code generation engine, and all needed implementations for abstractions
  • TemplateFramework.Console: Dotnet tool that can be launched from command line (using tf command)
  • TemplateFramework.TemplateProviders.ChildTemplateProvider: Adds support for child templates
  • TemplateFramework.TemplateProviders.CompiledTemplateProvider: Adds support for compiled templates

How to create a template

You have to write a class in a .NET 7.0 project (class library project is good enough), and compile this project. Then you can either use the command line tool 'tf' (Template Framework) or write your own host and reference the Core and TemplateProviders.CompiledTemplateProvider packages.

There are multiple types of templates supported out of the box:

  • StringBuilder template, which appends to a single output using a StringBuilder which is passed as an argument
  • Text Transform template, which has one method with a return type of string, that is called to run the template
  • Multiple Content Builder template, which allows to create more output files
  • POCO template. If the class is not of a supported type, then the ToString method will be called on the template instance

To create a StringBuilder template, implement this interface from the TemplateFramework.Abstractions package:

public interface IStringBuilderTemplate
{
    void Render(StringBuilder builder);
}

To create a Text Transform template, implement this interface from the TemplateFramework.Abstractions package:

public interface ITextTransformTemplate
{
    string TransformText();
}

To create a Multiple Content Builder template, implement this interface from the TemplateFramework.Abstractions package:

public interface IMultipleContentBuilderTemplate
{
    void Render(IMultipleContentBuilder builder);
}

How to add package references to your template assembly, when using the (Console) command tool

The template assembly is loaded by the command tool. If you want to add external references to your template assembly, then you have to follow some additional steps.

First option is to write a custom host. Add the references to the Core and TemplateProviders.CompiledTemplateProvider packages.

Second option is to use the plug-in architecture as documented by Microsoft. (https://learn.microsoft.com/en-us/dotnet/core/tutorials/creating-app-with-plugin-support) Note that this option hasn't been tested yet.

Third option is to add the following property to your template assembly:

  <PropertyGroup>
    ...
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    ...
  </PropertyGroup>

How to call child templates from your main template

If you want to render child templates from your main (root) template, then you have to implement these interfaces from the TemplateFramework.Abstractions package: ITemplateContextContainer and ITemplateEngineContainer.

public interface ITemplateContextContainer
{
    ITemplateContext Context { get; set; }
}
public interface ITemplateEngineContainer
{
    ITemplateEngine Engine { get; set; }
}

Then, in your template, call the Render method on the TemplateEngine instance. (TemplateEngine property) As context, create a child context using the CreateChildContext method on the TemplateContext instance. (Context property)

There is also an integration test in the TemplateFramework.TemplateProviders.ChildTemplateProvider test project to demonstrate this.

Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last updated
1.1.0 71 11/17/2024
1.0.3 88 10/30/2024
1.0.2 142 10/18/2024
1.0.1 86 9/21/2024
1.0.0 116 9/16/2024
0.11.1 343 5/18/2024
0.11.0 113 5/17/2024
0.10.2 263 5/9/2024
0.10.1 75 5/3/2024
0.10.0 111 4/19/2024
0.9.3 186 4/3/2024
0.9.2 285 3/22/2024
0.9.1 294 3/15/2024
0.9.0 447 3/3/2024
0.8.7 1,600 1/5/2024
0.8.6 877 12/7/2023
0.8.5 437 11/29/2023
0.8.4 235 11/27/2023
0.8.3 188 11/27/2023
0.8.1 227 11/24/2023
0.8.0 304 11/19/2023
0.7.4 349 9/13/2023
0.7.3 327 9/10/2023
0.7.1 344 9/9/2023
0.7.0 296 9/8/2023
0.6.0 406 9/7/2023
0.5.1 268 9/4/2023
0.5.0 340 9/4/2023
0.4.0 344 8/23/2023
0.3.2 356 8/14/2023
0.3.1 398 8/13/2023
0.3.0 350 8/13/2023
0.2.0 327 8/11/2023
0.1.0 253 7/23/2023