RSCG_Templating

April 21, 2026 ยท View on GitHub

Templating for generating everything from classes, methods from a Roslyn Code Generator

Templating is in SCRIBAN form

How to use

Add reference to

  <ItemGroup>
    <PackageReference Include="RSCG_Templating" Version="2026.421.1830" OutputItemType="Analyzer"  ReferenceOutputAssembly="false"   />
    <PackageReference Include="RSCG_TemplatingCommon" Version="2026.421.1830" />
  </ItemGroup>
<!-- this is just for debug purposes -->
<PropertyGroup>
    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
    <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
<!-- those are the templates files, see IGenerateDataFromClass -->
  <ItemGroup>
    <AdditionalFiles Include="ClassTypeName.txt" />
    <AdditionalFiles Include="ClassPropByName.txt" />
  </ItemGroup>

Then add additional files , for example

//autogenerated by RSCG_Templating version {{data.Version}} from file {{fileName}}
namespace {{data.nameSpace}} {
	 
	partial class {{data.className}} {
		public string MyTypeName = "{{data.nameSpace}}.{{data.className}}";		
	}//end class

}//end namespace

Now add

//can have multiple attributes on partial classes
[IGenerateDataFromClass("ClassTypeName")]
public partial class Person

Advanced uses

For the moment , RSCG_Templating generates definition for a class with properties + methods . See example for generating enum from properties and setting properties by name

var x = new Person();
Console.WriteLine("The generated string type is "+x.MyTypeName);
x.FirstName = "Andrei";
//set last name via prop
x.SetPropValue(ePerson_Properties.LastName, "Ignat");
Console.WriteLine("called directly first name : " + x.FirstName);
Console.WriteLine("called via enum of prop first name : " + x.GetPropValue(ePerson_Properties.FirstName));
Console.WriteLine("called get property :" + x.GetPropValue(ePerson_Properties.Name));

See example at https://github.com/ignatandrei/RSCG_Templating/tree/main/src/RSCG_Templating

More templates

  1. Template for having the class type name: ClassTypeName
  2. Template for having the class properties as enum : ClassPropByName
  3. Template for setting properties after name : ClassPropByName
  4. Template from DebuggerDisplay for properties: ClassDebuggerDisplay
  5. Template for generating interface from class : ClassInterface

Version 2026.421.1830

Adding templating with data from AdditionalFiles from .csproj file

	<ItemGroup>
    <AdditionalFiles Include="Templating\ClassToInterface.txt" />
    <AdditionalFiles Include="Templating\ClassTypeName.txt" />
    <AdditionalFiles Include="Templating\ClassPropByName.txt" />
	<AdditionalFiles Include="Templating\ClassDebuggerDisplay.txt" />
	<AdditionalFiles Include="Templating\FileInTemplating.txt" />
		
	</ItemGroup>

This is for generating code from templates that are not related to a class or method , but just from additional files.

For example you can have a template that generates code from the names of additional files - generate an enum and returning some data ?

[IGenerateDataFromAdditionalFiles("FileInTemplating")]
partial class FileInTemplating
{
}

And this could be the template

//autogenerated by RSCG_Templating from file  {{ fileName }} 
namespace {{data.nameSpace}} {
	partial class {{data.className}} {
		//{{ "test" | string.capitalize }}

		public static string GetName(string name){
		{{ for file in pathFiles}}
		//{{file}} 
		//first folder: {{file.pathArr[0]}}
		if(name == "{{file.name}}"){
			return File_{{file.nameNoExt}};
		}
		if(name == "{{file.nameNoExt}}"){
			return File_{{file.nameNoExt}};
		}
		if(name == "{{file.namePascal}}"){
			return File_{{file.nameNoExt}};
		}
		{{ end }}
		throw new System.Exception($"File with name {name} not found");
		}
		
		{{ for file in pathFiles}}
		//{{file}}
		public static string File_{{file.nameNoExt}} => "{{file.name}}";
		{{ end }}
	}
}

More Roslyn Source Code Generators

You can find more RSCG with examples at Roslyn Source Code Generators