Before reading this article, I would recommend reading the following previous parts:
In previous articles, we looked into class feature blocks and utility methods. Let’s drill down more and understand runtime\preprocessed templates and passing parameters to it. We can execute a preprocessed template via code, which will create a class and show the output of it. This can be executed outside of Visual Studio and no dependency on Microsoft.VisualStudio.Texttemplating.dll.
Let’s add a sample runtime template to our project and understand it:
Let’s add below code to output “runtime template” at execution:
Let’s look at generated code in Mytemplate.cs:
The code written in template will be called from TransformText() method and same will be executed at run-time via code. Here, our template inherited from MyTemplateBase and have a method TransformText() to process the template.
Let’s write below code in our console application to execute the template and see the results:
Output:
Here, we created an instance of our template and called TransformText() which will execute our template code and return the output.
Let’s extend our template by adding parameters to it:
We added two parameters to provide input to the template by using parameter directive,
(<#@ Parameter type=”System.Int32” Name=”Salary”) #>, for which values will be passed via code at run-time.
This will generate two read-only properties in MyTemplate.cs:
Let’s pass values to these parameters from console application by creating a session:
Here, we created a TextTemplating session to pass parameters than called Intialize() to transfer values and make it available in TransformText(). We need to add reference to Microsoft.VisualStudio.Textemplating.11.0.dll and Microsoft.VisualStudio.TextTemplating.Interface.11.0.dlls to create a session for parameter passing.
Output:
So, Runtime templates are helpful in generating code\documents on the fly, and can be executed outside of Visual Studio.
I am ending things here, in next article will drill down more on T4 Templates and look into reusing template and troubleshooting it. I hope this article will be helpful for all.