{"id":1333,"date":"2012-09-03T14:24:27","date_gmt":"2012-09-03T12:24:27","guid":{"rendered":"http:\/\/mariusbancila.ro\/blog\/?p=1333"},"modified":"2012-09-03T14:24:27","modified_gmt":"2012-09-03T12:24:27","slug":"t4-lessons-learned","status":"publish","type":"post","link":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/","title":{"rendered":"T4 Lessons Learned"},"content":{"rendered":"<p>Working with T4 recently I learned a couple of valuable lessons I&#8217;d like to share.<\/p>\n<p><strong>Lesson 1: Template Language<\/strong><br \/>\nOne of the parameters of the language directive is the language, which specifies the language used in the code blocks of the template. Two languages are specified, C# and VB.<\/p>\n<pre>&lt;#@ template language=\"C#\" #&gt;<\/pre>\n<p>However, any attempts to use var, lambdas, initialization lists or even inheritance failed. And then I found the answer to the problem on <a href=\"http:\/\/www.olegsych.com\/2008\/02\/t4-template-directive\/\">Oleg Sych&#8217;s great blog<\/a>. In VS2008 you can specify which version of the language you want to use. For instance v3.5 for using C#\/VB.NET 3.5<\/p>\n<pre>&lt;#@ template language=\"C#v3.5\" #&gt;<\/pre>\n<p>Then, suddenly, all of these missing features worked!<\/p>\n<p><strong>Lesson 2: Generate Multiple Output Files<\/strong><\/p>\n<p>There are cases when you want a T4 template to generate, not one, but several output files. And of course, you want the automatically added to the project, source control, all menu. For instance, maybe you want to generate files for a database object model. You have a single template that parses the description of the model and generates code, but the code should be put in different files.<\/p>\n<p>Here is a dummy example, that produces five EntityX classes, all on the same file.<\/p>\n<pre>\r\n&lt;# for(int i = 1; i &lt;= 5; ++i)\r\n   {\r\n#&gt;\r\n      public class Entity&lt;#=i#&gt;\r\n      {\r\n      }\r\n&lt;#     \r\n   }\r\n#&gt;<\/pre>\n<p>However, with the help of <a href=\"http:\/\/damieng.com\/blog\/2009\/11\/06\/multiple-outputs-from-t4-made-easy-revisited\">this script by Damien Guard<\/a> you can define blocks that get generated in different files. You can also define common blocks, such as header and footer for all output files. What you have to do is:<\/p>\n<ul>\n<li>include the script into your template<\/li>\n<li>create an instance of the blocks manager<\/li>\n<li>define file blocks<\/li>\n<li>optionally define header and footer blocks<\/li>\n<li>process the blocks at the end of the template<\/li>\n<\/ul>\n<p>Here is a concrete example for the above example:<\/p>\n<pre>&lt;#@ template language=\"C#v3.5\" hostspecific=\"True\" #&gt;\r\n&lt;#@include file=\"MultipleOutputHelper.ttinclude\" #&gt;\r\n&lt;# var manager = Manager.Create(Host, GenerationEnvironment); #&gt;\r\n&lt;# manager.StartHeader(); #&gt;\r\n\/\/ Code generated by a template\r\nusing System;\r\n\r\nnamespace Tests\r\n{\r\n&lt;# manager.EndBlock(); #&gt;\r\n\r\n&lt;# for(int i = 1; i &lt;= 5; ++i)\r\n   {\r\n      manager.StartNewFile(String.Format(\"Entity{0}.cs\", i)); \r\n#&gt;\r\n      public class Entity&lt;#=i#&gt;\r\n      {\r\n      }\r\n&lt;#     \r\n      manager.EndBlock();\r\n   }\r\n#&gt;\r\n\r\n&lt;# manager.StartFooter(); #&gt;\r\n}\r\n&lt;# manager.EndBlock(); #&gt;\r\n\r\n&lt;# manager.Process(true); #&gt;<\/pre>\n<p>The result is five EntityX classes are generated, each in a separate file called EntityX.cs, and all these files are automatically added to the project.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Working with T4 recently I learned a couple of valuable lessons I&#8217;d like to share. Lesson 1: Template Language One of the parameters of the language directive is the language, which specifies the language used in the code blocks of the template. Two languages are specified, C# and VB. &lt;#@ template language=&#8221;C#&#8221; #&gt; However, any &#8230; <a title=\"T4 Lessons Learned\" class=\"read-more\" href=\"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/\" aria-label=\"Read more about T4 Lessons Learned\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[11,52,10],"tags":[324,270,323,316],"class_list":["post-1333","post","type-post","status-publish","format-standard","hentry","category-csharp","category-tools","category-visual-studio","tag-scripts","tag-t4","tag-templates","tag-vs"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"Lessons learned about using T4 template language directive and generating output to multiple files from the same template.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Marius Bancila\"\/>\n\t<meta name=\"keywords\" content=\"t4,vs,templates,scripts\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Marius Bancila&#039;s Blog | About code. Mostly on C++\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"T4 Lessons Learned\" \/>\n\t\t<meta property=\"og:description\" content=\"Lessons learned about using T4 template language directive and generating output to multiple files from the same template.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2012-09-03T12:24:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2012-09-03T12:24:27+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"T4 Lessons Learned\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Lessons learned about using T4 template language directive and generating output to multiple files from the same template.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/#article\",\"name\":\"T4 Lessons Learned\",\"headline\":\"T4 Lessons Learned\",\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"},\"datePublished\":\"2012-09-03T14:24:27+02:00\",\"dateModified\":\"2012-09-03T14:24:27+02:00\",\"inLanguage\":\"en-US\",\"commentCount\":5,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/#webpage\"},\"articleSection\":\"C#, Tools, Visual Studio, scripts, T4, templates, VS\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"position\":2,\"name\":\"IT\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"position\":3,\"name\":\"Software\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"position\":4,\"name\":\".NET\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"name\":\"C#\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"position\":5,\"name\":\"C#\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/#listItem\",\"name\":\"T4 Lessons Learned\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/#listItem\",\"position\":6,\"name\":\"T4 Lessons Learned\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"name\":\"C#\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Marius Bancila\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Marius Bancila\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/#webpage\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/\",\"name\":\"T4 Lessons Learned\",\"description\":\"Lessons learned about using T4 template language directive and generating output to multiple files from the same template.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2012\\\/09\\\/03\\\/t4-lessons-learned\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2012-09-03T14:24:27+02:00\",\"dateModified\":\"2012-09-03T14:24:27+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"T4 Lessons Learned","description":"Lessons learned about using T4 template language directive and generating output to multiple files from the same template.","canonical_url":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/","robots":"max-image-preview:large","keywords":"t4,vs,templates,scripts","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/#article","name":"T4 Lessons Learned","headline":"T4 Lessons Learned","author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"},"datePublished":"2012-09-03T14:24:27+02:00","dateModified":"2012-09-03T14:24:27+02:00","inLanguage":"en-US","commentCount":5,"mainEntityOfPage":{"@id":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/#webpage"},"isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/#webpage"},"articleSection":"C#, Tools, Visual Studio, scripts, T4, templates, VS"},{"@type":"BreadcrumbList","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","position":1,"name":"Home","item":"https:\/\/mariusbancila.ro\/blog\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","position":2,"name":"IT","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","position":3,"name":"Software","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","position":4,"name":".NET","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","name":"C#"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","position":5,"name":"C#","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/#listItem","name":"T4 Lessons Learned"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/#listItem","position":6,"name":"T4 Lessons Learned","previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","name":"C#"}}]},{"@type":"Organization","@id":"https:\/\/mariusbancila.ro\/blog\/#organization","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","url":"https:\/\/mariusbancila.ro\/blog\/"},{"@type":"Person","@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author","url":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/","name":"Marius Bancila","image":{"@type":"ImageObject","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g","width":96,"height":96,"caption":"Marius Bancila"}},{"@type":"WebPage","@id":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/#webpage","url":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/","name":"T4 Lessons Learned","description":"Lessons learned about using T4 template language directive and generating output to multiple files from the same template.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/#breadcrumblist"},"author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"datePublished":"2012-09-03T14:24:27+02:00","dateModified":"2012-09-03T14:24:27+02:00"},{"@type":"WebSite","@id":"https:\/\/mariusbancila.ro\/blog\/#website","url":"https:\/\/mariusbancila.ro\/blog\/","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","inLanguage":"en-US","publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Marius Bancila's Blog | About code. Mostly on C++","og:type":"article","og:title":"T4 Lessons Learned","og:description":"Lessons learned about using T4 template language directive and generating output to multiple files from the same template.","og:url":"https:\/\/mariusbancila.ro\/blog\/2012\/09\/03\/t4-lessons-learned\/","article:published_time":"2012-09-03T12:24:27+00:00","article:modified_time":"2012-09-03T12:24:27+00:00","twitter:card":"summary","twitter:title":"T4 Lessons Learned","twitter:description":"Lessons learned about using T4 template language directive and generating output to multiple files from the same template."},"aioseo_meta_data":{"post_id":"1333","title":"T4 Lessons Learned","description":"Lessons learned about using T4 template language directive and generating output to multiple files from the same template.","keywords":[{"label":"T4","value":"T4"},{"label":"VS","value":"VS"},{"label":"templates","value":"templates"},{"label":"scripts","value":"scripts"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-18 21:12:20","updated":"2025-12-12 07:38:19","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"author_meta":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"featured_img":null,"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"uagb_comment_info":5,"uagb_excerpt":"Working with T4 recently I learned a couple of valuable lessons I&#8217;d like to share. Lesson 1: Template Language One of the parameters of the language directive is the language, which specifies the language used in the code blocks of the template. Two languages are specified, C# and VB. &lt;#@ template language=\"C#\" #&gt; However, any&hellip;","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/\" class=\"advgb-post-tax-term\">C#<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/tools\/\" class=\"advgb-post-tax-term\">Tools<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">Visual Studio<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">C#<\/span>","<span class=\"advgb-post-tax-term\">Tools<\/span>","<span class=\"advgb-post-tax-term\">Visual Studio<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">scripts<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">T4<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">templates<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">VS<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">scripts<\/span>","<span class=\"advgb-post-tax-term\">T4<\/span>","<span class=\"advgb-post-tax-term\">templates<\/span>","<span class=\"advgb-post-tax-term\">VS<\/span>"]}},"comment_count":"5","relative_dates":{"created":"Posted 14 years ago","modified":"Updated 14 years ago"},"absolute_dates":{"created":"Posted on September 3, 2012","modified":"Updated on September 3, 2012"},"absolute_dates_time":{"created":"Posted on September 3, 2012 2:24 pm","modified":"Updated on September 3, 2012 2:24 pm"},"featured_img_caption":"","series_order":"","jetpack_shortlink":"https:\/\/wp.me\/pYNdv-lv","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/1333","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/comments?post=1333"}],"version-history":[{"count":8,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/1333\/revisions"}],"predecessor-version":[{"id":1341,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/1333\/revisions\/1341"}],"wp:attachment":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/media?parent=1333"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/categories?post=1333"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/tags?post=1333"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}