<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>[Profoundly Esoteric Image]</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/garethj/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/garethj/feed.xml</link>
    <description>GarethJ&amp;#039;s WebLog -  OneNote API musings</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:08:08 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>It's a new dawn, it's a new day... it's a OneNote API</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/its-a-new-dawn-its-a-new-day-its-a-onenote-api</link>
      <pubDate>Mon, 17 Mar 2014 09:57:56 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2014/03/17/its-a-new-dawn-its-a-new-day-its-a-onenote-api/</guid>
      <description><![CDATA[Wow, I can FINALLY talk about my new job!
I'm proud to say that today the OneNote API went live,...]]></description>
      <content:encoded><![CDATA[<p>Wow, I can FINALLY talk about my new job!</p>
<p>I'm proud to say that today the OneNote API went live, with our dev site at https://dev.onenote.com, blog at https://blogs.msdn.com/onenotedev, twitter @onenotedev, samples https://www.github.com/onenotedev</p>
<p>About six months ago, I left the wonderful Visual Studio team, to become API architect for the brand new OneNote service. &nbsp;This was a bit of a wrench after ten amazing years in VS, but I realized that I wanted to take advantage of the opportunity working at Microsoft affords to experience really diverse businesses, so here I am, and I am loving it! &nbsp;The new team has been amazingly friendly and welcoming and we're about as excited as it is possible to be today to get out into the public sphere and start getting broader feedback. &nbsp;You should have seen the ship room packed with people in scary purple wigs at about 7am this morning watching us flip the switches to go live with bated breath.</p>
<p>Some come one, come all and tell us what you think, what you want to see next and above all, what cool things you're doing with our API to help people capture their digital memories.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>What’s new in T4 for Visual Studio 2013?</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/whats-new-in-t4-for-visual-studio-2013</link>
      <pubDate>Wed, 28 Aug 2013 19:02:47 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2013/08/28/whats-new-in-t4-for-visual-studio-2013/</guid>
      <description><![CDATA[Visual Studio 2013 Preview has been out for a while now so I thought I should announce the new...]]></description>
      <content:encoded><![CDATA[<p>Visual Studio 2013 Preview has been out for a while now so I thought I should announce the new goodies in the product for T4 this time around. As the T4 engine is fairly mature now we focused on a couple of scenarios that have been blocked or tricky for customers. I’m sure you’ll agree they are good ones.</p>  <p><strong>1. Enable fine-grained template reuse with a new ‘once’ option on the &lt;#@ include #&gt; directive.</strong></p>  <p>This feature makes it really easy to build up a library of reusable T4 snippets that you can include at will without worrying that some other snippet has already included them.&#160; For example, I’ve now got a library of very fine-grained snippets that deal with template processing and C# generation.&#160; In turn, these are used by some more task-specific utilities such as generating exceptions, which I can then use from any more application-specific template.&#160; You can see in this dependency graph that my indentation helpers are used all over the place.&#160; Now I don’t have to worry about clashes. </p>  <p><img title="Dependencies between template snippets." style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="Dependencies between template snippets." src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/5861.image_508487F3.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/5861.image_5F00_508487F3.png" width="726" height="457" /></p>  <p> Customers ask me a lot about strategies for building reusable template libraries and the ‘once’ feature is the last major unblocker to a smooth experience for big libraries.&#160; This feature works regardless of the host in use.&#160; Here’s the syntax:</p>  <p>&lt;#@ include file=“myinterestingsnippet.t4” once=”true” #&gt;</p>  <p><strong>2. Enable project-relative assembly references and includes across IDE and msbuild.</strong></p>  <p>Until now, it’s been awkward to create templates that reference assemblies from standard project-relative directories and then transform them in <strong>both</strong> the IDE and from msbuild.&#160; Typically it required environment variables, which most people hate!&#160; We’ve fixed that with this feature.&#160; You can now use project properties with include and assembly directives.&#160; This feature works in the standard IDE host and in the msbuild host.&#160; Here’s an example – imagine we have some helper code in an assembly called myLib.dll stored in a standard ‘libs’ directory.&#160; Something magnificent, like this:</p>  <div class="csharpcode">   <pre class="alt"><span class="kwrd">namespace</span> MyLib</pre>

  <pre>{</pre>

  <pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">class</span> MyClass</pre>

  <pre>    {</pre>

  <pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">string</span> MyMethod()</pre>

  <pre>        {</pre>

  <pre class="alt">            <span class="kwrd">return</span> <span class="str">&quot;World&quot;</span>;</pre>

  <pre>        }</pre>

  <pre class="alt">    }</pre>

  <pre>}</pre>
</div>


<p>&#160;</p>

<p>Now let’s use that helper from a template – in the IDE we could use macros like $(SolutionDir), but those don’t work in msbuild, so we’ll use a project variable instead:</p>

<div class="csharpcode">
  <pre class="alt">&lt;#@ template debug=<span class="str">&quot;false&quot;</span> hostspecific=<span class="str">&quot;false&quot;</span> language=<span class="str">&quot;C#&quot;</span> #&gt;</pre>

  <pre>&lt;#@ assembly name=<span class="str">&quot;$(libDir)\MyLib.dll&quot;</span> #&gt;</pre>

  <pre class="alt">&lt;#@ output extension=<span class="str">&quot;.txt&quot;</span> #&gt;</pre>

  <pre>Hello &lt;#= MyLib.MyClass.MyMethod() #&gt;</pre>
</div>

<p></p>

<p>Of course, we’ll need to define the variable in our project file by adding a snippet like this:</p>

<div class="csharpcode">
  <pre class="alt"><span class="kwrd">&lt;</span><span class="html">PropertyGroup</span><span class="kwrd">&gt;</span></pre>

  <pre>    <span class="kwrd">&lt;</span><span class="html">libDir</span><span class="kwrd">&gt;</span>$(MSBuildProjectDirectory)\..\libs<span class="kwrd">&lt;/</span><span class="html">libDir</span><span class="kwrd">&gt;</span></pre>

  <pre class="alt"><span class="kwrd">&lt;/</span><span class="html">PropertyGroup</span><span class="kwrd">&gt;</span></pre>
</div>


<p>&#160;</p>

<p>At this point, the template should work in the IDE, but we need to take one more step before it works in msbuild.&#160; We need to let the T4 msbuild task know which variables we’re using.&#160; We add one final snippet to do that:&#160;&#160; </p>

<div class="csharpcode">
  <pre class="alt">  <span class="kwrd">&lt;</span><span class="html">ItemGroup</span><span class="kwrd">&gt;</span></pre>

  <pre>    <span class="kwrd">&lt;</span><span class="html">T4ParameterValues</span> <span class="attr">Include</span><span class="kwrd">=&quot;libDir&quot;</span><span class="kwrd">&gt;</span></pre>

  <pre class="alt">      <span class="kwrd">&lt;</span><span class="html">Value</span><span class="kwrd">&gt;</span>$(libDir)<span class="kwrd">&lt;/</span><span class="html">Value</span><span class="kwrd">&gt;</span></pre>

  <pre>    <span class="kwrd">&lt;/</span><span class="html">T4ParameterValues</span><span class="kwrd">&gt;</span></pre>

  <pre class="alt">  <span class="kwrd">&lt;/</span><span class="html">ItemGroup</span><span class="kwrd">&gt;</span></pre>
</div>
&#160; <p><strong>3. Standard host used in ASP.Net scaffolding</strong></p>

<p>This isn’t strictly a T4 feature, but it’s great news.&#160; The <a href="https://www.asp.net/visual-studio/overview/2013/aspnet-scaffolding-overview" target="_blank">very cool new ASP.Net scaffolding feature</a> uses the standard VS T4 host, so you can use the full power of T4, and any include libraries you have when building scaffolding templates.</p>

<p>&#160;</p>

<p><strong>4. Tidy up after very spendy templates with CleanupBehavior directive.</strong></p>

<p>Sometimes templates get big.&#160; Or crufty. Or both. Or they load a bajillion assemblies to do their work.&#160; This can bloat up your IDE’s memory footprint or lock assemblies in memory.&#160; Now there’s a great big hammer to solve this problem.&#160; Add the following line to your template and the appdomain it runs in will get blown away after every run.&#160; </p>

<div class="csharpcode">
  <pre class="alt">&lt;#@ CleanupBehavior processor=<span class="str">&quot;T4VSHost&quot;</span> CleanupAfterProcessingtemplate=<span class="str">&quot;true&quot;</span> #&gt;</pre>
</div>


<p>This defeat’s T4’s normal caching behavior, so it slows things down a bit, but you get a spangly clean IDE every time.&#160; This one only runs in the VS IDE host.</p>

<p>&#160;</p>

<p><strong>5. A bunch of small bugs, but that goes without saying.</strong></p>

<p>Enjoy the release.</p>]]></content:encoded>
    </item>
    <item>
      <title>T4 Debugging – Under The Hood</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/t4-debugging-under-the-hood</link>
      <pubDate>Mon, 01 Jul 2013 18:39:08 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2013/07/01/t4-debugging-under-the-hood/</guid>
      <description><![CDATA[Hi - my name is Tim Malone and I'm a developer in Visual Studio, working on T4. I began my time at...]]></description>
      <content:encoded><![CDATA[<p>Hi - my name is Tim Malone and I'm a developer in Visual Studio, working on T4. I began my time at Microsoft in the summer of 2010 as in intern working on what would eventually become the new &quot;Debug T4 Template&quot; feature in Visual Studio 2012 (described <a href="https://blogs.msdn.com/b/t4/archive/2012/06/05/what-s-new-with-t4-in-visual-studio-2012-release-candidate.aspx" target="_blank">here</a>). I'd like to expand a bit more on how we engineered this feature, specifically in regard to one of the improvements we've made to it for Visual Studio 2012 Update 1 and 2.</p>  <p>While previously a process for debugging a misbehaving template <a href="https://www.olegsych.com/2008/09/t4-tutorial-debugging-code-generation-files/" target="_blank">existed</a>, it was not intuitive and somewhat of a hassle (requiring multiple instances of Visual Studio). Our intent was to remedy this situation and we approached it with two primary goals in mind</p>  <ol>   <li>make the ability to debug a template easily accessible and</li>    <li>reproduce template behavior identical to that of the template running as usual in Visual Studio.</li> </ol>  <p>Unfortunately, there are cases where those goals are at odds with one another. T4 templates currently run within the Visual Studio process confined to their own AppDomain. However, the Visual Studio debugger needs a process to attach to, and asking it to debug itself clearly doesn’t make much sense! So we needed an external process for hosting template execution when debugging a template which, short of spinning up an entire second Visual Studio, brings with it some challenges in ensuring identical behavior in this new environment.</p>  <p>For simple templates - ones that aren't host-specific - there are unlikely to be any differences in behavior. Host-specific templates, though, particularly those using the Visual Studio automation object (or <a href="https://msdn.microsoft.com/en-us/library/za2b25t3.aspx" target="_blank">DTE</a>) can find themselves very aware of these differences. Two specific issues we ran into were Visual Studio being busy with user interaction during calls made from our hosting process to the DTE and casts of COM objects not getting translated into the proper QueryInterface call after going through the .NET Remoting boundary across processes. Neither of these could occur on a template running inside Visual Studio, yet they would reproduce when attempting to debug the following template:</p>  <p><font face="Courier New">&lt;#@ template hostspecific=&quot;true&quot; language=&quot;C#&quot; #&gt;     <br />&lt;#@ assembly name=&quot;Microsoft.VisualStudio.Shell.Interop.8.0&quot; #&gt;      <br />&lt;#@ assembly name=&quot;EnvDTE&quot; #&gt;      <br />&lt;#@ import namespace=&quot;Microsoft.VisualStudio.Shell.Interop&quot; #&gt;      <br />&lt;#@ import namespace=&quot;Microsoft.VisualStudio.TextTemplating&quot; #&gt;      <br />&lt;#@ output extension=&quot;.txt&quot; #&gt;      <br />&lt;#      <br />EnvDTE.DTE dte = ((IServiceProvider)Host).GetService(typeof(SDTE)) as EnvDTE.DTE;      <br />EnvDTE.ProjectItem templateItem = dte.Solution.FindProjectItem(Host.TemplateFile);      <br />foreach (EnvDTE.ProjectItem projectItem in templateItem.ContainingProject.ProjectItems)      <br />{      <br />#&gt;&lt;#= projectItem.Name #&gt;&lt;#      <br />}      <br />#&gt;</font></p>  <p>This was an important scenario to us as many useful templates make heavy use of these features such as the templates packaged with <a href="https://msdn.microsoft.com/en-us/data/ef.aspx" target="_blank">Entity Framework</a> and the <a href="https://t4toolbox.codeplex.com/" target="_blank">T4Toolbox</a>. We were able to solve the first by ensuring the template generation was initiated on its own STA thread. The second issue required us to intercept the call to obtain the DTE using a custom proxy in the host process and switch to COM remoting instead of marshaling via .NET remoting. </p>  <p>OK, now you’ve probably learned more than you ever thought you wanted to know about how T4 debugging works!&#160; We hope you’ll find these improvements to T4 let you have a great experience debugging a wide range of templates with Visual Studio 2012 Update 1 and 2.</p>  <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6a0cd688-8ffb-4974-b1a8-260406565a1a" class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">Technorati Tags: <a href="https://technorati.com/tags/T4" rel="tag">T4</a>,<a href="https://technorati.com/tags/Visual+Studio+2012" rel="tag">Visual Studio 2012</a>,<a href="https://technorati.com/tags/T4+Debugging" rel="tag">T4 Debugging</a></div>]]></content:encoded>
    </item>
    <item>
      <title>Is your T4 template a composition?</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/is-your-t4-template-a-composition</link>
      <pubDate>Fri, 31 May 2013 00:25:00 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2013/05/31/is-your-t4-template-a-composition/</guid>
      <description><![CDATA[Maybe every T4 template can&rsquo;t be code poetry, but pretty much anyone who&rsquo;s using T4 can...]]></description>
      <content:encoded><![CDATA[<p>Maybe every T4 template can&rsquo;t be <a title="Code Poetry Book" href="https://code-poems.com/book.html" target="_blank">code poetry</a>, but pretty much anyone who&rsquo;s using T4 can get cleaner code and be more productive by using T4&rsquo;s features around composing chunks of reusable code together.</p>
<p>&nbsp;</p>
<p>An <a title="Template MVC article" href="https://www.artima.com/lejava/articles/stringtemplate.html" target="_blank">oft-cited criticism</a> of template-based code generators is that, over time, the templates tend towards spaghetti code; without some effort I think it&rsquo;s a pretty valid stick to beat T4 and its ilk with.&nbsp; But here&rsquo;s the good news:&nbsp; with not much effort, you can build up a library of chunks that you can compose to get radically more readable and quicker to produce templates.&nbsp; The common analogy here is Lego (or <a title="Legos, really?" href="https://qr.ae/p42YK" target="_blank">Legos as my American colleagues endearingly refer to them</a>), but actually, I&rsquo;m going with bricks and mortar as my analogy.</p>
<p>OK, let&rsquo;s look at an example here to see what I&rsquo;m talking about.&nbsp; Here&rsquo;s a template I&rsquo;m using at present to generate all the boilerplate code necessary to create new serializable Exception classes.</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/0131.image_4FBE0BEE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/0131.image_5F00_4FBE0BEE.png"><img style="display: inline; background-image: none;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/0167.image_thumb_03F4C5E6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/0167.image_5F00_thumb_5F00_03F4C5E6.png" alt="image" width="878" height="708" border="0" /></a></p>
<p>&nbsp;</p>
<p>This generates a bunch of files with code like the example below (click through for the full code &ndash; it&rsquo;s a bit large to insert)</p>
<p><a title="Generated exception code" href="https://sdrv.ms/13oCz3A" target="_blank"><img style="display: inline; background-image: none;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/4380.image_3109B2B4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/4380.image_5F00_3109B2B4.png" alt="image" width="659" height="624" border="0" /></a></p>
<p>&nbsp;</p>
<p>This template is following the <a href="https://msdn.microsoft.com/en-us/library/dd820620.aspx" target="_blank">pattern of setting up a simple data structure to drive the code generator</a> and then walking that structure.&nbsp; In this case, it&rsquo;s using the <a href="https://blogs.msdn.com/b/garethj/archive/2009/09/25/dte-and-t4-better-together.aspx?Redirected=true" target="_blank">CodeModel from Visual Studio&rsquo;s DTE automation</a> interface to find exception classes marked with a specific attribute in the current project, and then populating a simple enumerable.&nbsp;&nbsp; It then walks that enumerable, <a href="https://damieng.com/blog/2009/11/06/multiple-outputs-from-t4-made-easy-revisited" target="_blank">creating a new file for each exception</a>, and populating it with a nice header, a namespace and the exception partial class.&nbsp; Normally, all that logic would make for a complex template, where the exception code would be a bit hard to find when you actually wanted to change the generated output.&nbsp; Here, with the inclusion of some pre-canned functionality and a procedural decomposition style, it&rsquo;s pretty easy to see where the header, the namespace and its associated using statements and the main exception code all get written.&nbsp; At this point, OO purists might be wearing a somewhat pained expression, but I&rsquo;m really applying principals we normally associate with OO, such as <a href="https://en.wikipedia.org/wiki/Single_responsibility_principle" target="_blank">single responsibility principle</a> and applying them to my procedural world here (at least as far as the included helper files at the top of our example go.</p>
<p>What we end up with as input to this template is a very trivial handwritten exception declaration, and the code generator takes care of everything else.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/1588.image_67E697AB.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/1588.image_5F00_67E697AB.png"><img style="display: inline; background-image: none;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/7444.image_thumb_47CB8AEE.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/7444.image_5F00_thumb_5F00_47CB8AEE.png" alt="image" width="473" height="184" border="0" /></a></p>
<p>So what&rsquo;s the typical structure of such a helper? Let&rsquo;s take a look at the simplest of the four I use here, the helper that lets me output a standard code gen header, StandardHeader.cs.t4:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/8015.image_27B07E31.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/8015.image_5F00_27B07E31.png"><img style="display: inline; background-image: none;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/3755.image_thumb_3582C42C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/3755.image_5F00_thumb_5F00_3582C42C.png" alt="image" width="645" height="260" border="0" /></a></p>
<p>As you can see &ndash; very simple, and very single purpose.&nbsp; It&rsquo;s just a definition in a <a href="https://www.olegsych.com/2008/02/t4-class-feature-blocks/" target="_blank">class feature block</a> of a method to write out a header.&nbsp; A lot of my helpers are just like this &ndash; either one method or a small group of related methods to spit out common chunks of boilerplate, perhaps with a few simple parameters.</p>
<p>The key point here is that although the class feature block defines the method signature in C# control block code, it easily switches back to encapsulating boilerplate code without reverting to using clumsy &ldquo;this.WriteLine()&rdquo; methods.&nbsp; This is one of T4&rsquo;s strongest points, allowing me to very easily modify that header code with a simple cut and paste from a newer example that I like better.</p>
<p>OK, this is getting to be a long post so I&rsquo;ll take a break.&nbsp; Next time I&rsquo;ll look at the Exceptions.cs.t4 helper and talk about keeping helpers decoupled using the approach I described as bricks and mortar.</p>
<p>&nbsp;</p>
<p>Gareth Jones &ndash; Architect &ndash; Visual Studio</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cb14a4fa-fd4c-4c3a-b55d-e88c42f39dba" class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">Technorati Tags: <a href="https://technorati.com/tags/T4" rel="tag">T4</a>,<a href="https://technorati.com/tags/Code+Generation" rel="tag">Code Generation</a>,<a href="https://technorati.com/tags/Best+Practices" rel="tag">Best Practices</a></div>]]></content:encoded>
    </item>
    <item>
      <title>What’s new with T4 in Visual Studio 2012 Release Candidate</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/whats-new-with-t4-in-visual-studio-2012-release-candidate</link>
      <pubDate>Mon, 04 Jun 2012 18:52:40 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2012/06/04/whats-new-with-t4-in-visual-studio-2012-release-candidate/</guid>
      <description><![CDATA[I’m a bit quicker off the mark than I was with our Beta as this is my first day back from vacation...]]></description>
      <content:encoded><![CDATA[<p>I’m a bit quicker off the mark <a href="https://blogs.msdn.com/b/garethj/archive/2012/04/03/what-s-new-with-t4-in-visual-studio-11-beta.aspx">than I was with our Beta</a> as this is my first day back from vacation after our <a href="https://www.microsoft.com/visualstudio/11/en-us">Release Candidate has launched</a>.&#160; We have one final significant T4 feature to add for Visual Studio 2012 in addition to all of the stuff from out <a href="https://blogs.msdn.com/b/garethj/archive/2012/04/03/what-s-new-with-t4-in-visual-studio-11-beta.aspx">beta</a> and <a href="https://blogs.msdn.com/b/t4/archive/2011/09/25/what-s-new-with-t4-in-the-developer-preview-of-visual-studio-11.aspx">developer previews</a>, and it’s a doozy!</p>  <ul>   <li>T4 template debugging</li> </ul>  <p>In past releases of Visual Studio, debugging T4 templates has been a little more work than we’d like, so we’ve addressed that in this release with a simple to use but full-featured debugging experience:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/8081.image_7F8DF6F0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/8081.image_5F00_7F8DF6F0.png"><img style="display: inline; background-image: none;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/0160.image_thumb_3F57DD76.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/0160.image_5F00_thumb_5F00_3F57DD76.png" width="700" height="549" /></a></p>    <p>You’ll see the ‘Debug T4 Template’ menu item above on the context menu for the template in the Solution Explorer.&#160; There’s no need to set the debug flag on the template directive or any other special magic; just set a breakpoint in your T4 template and launch the debugger.&#160; You’ll have full access to step through your template code and look at variables in the locals window.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/5873.image_1413466F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/5873.image_5F00_1413466F.png"><img style="display: inline; background-image: none;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/2234.image_thumb_53DD2CF4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/2234.image_5F00_thumb_5F00_53DD2CF4.png" width="864" height="523" /></a></p>    <p>There’s also new service interface, <font face="Courier New">IDebugTextTemplating</font>, to allow folks who use T4’s Visual Studio API to call T4 asynchronously under the debugger and so build equivalent debugging facilities into their tools, plus a couple of new support pieces under the hood to enable all this whilst maintaining backward compatibility on our existing interfaces.</p>  <p>I hope you enjoy the new productivity of debugging your T4 templates in our release candidate!</p>  <div style="margin: 0px; padding: 0px; float: none; display: inline;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:34d8691b-bff0-4fbc-8dd0-d78ecb4d1f3a" class="wlWriterEditableSmartContent">Technorati Tags: <a href="https://technorati.com/tags/T4" rel="tag">T4</a>,<a href="https://technorati.com/tags/Visual+Studio+2012" rel="tag">Visual Studio 2012</a>,<a href="https://technorati.com/tags/Release+Candidate" rel="tag">Release Candidate</a>,<a href="https://technorati.com/tags/Debugging" rel="tag">Debugging</a></div>]]></content:encoded>
    </item>
    <item>
      <title>What’s new with T4 in Visual Studio 11 Beta?</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/whats-new-with-t4-in-visual-studio-11-beta</link>
      <pubDate>Mon, 02 Apr 2012 19:14:01 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2012/04/02/whats-new-with-t4-in-visual-studio-11-beta/</guid>
      <description><![CDATA[Our beta release has been available for a couple of weeks now, so I thought it was about time I...]]></description>
      <content:encoded><![CDATA[<p>Our <a href="https://www.microsoft.com/visualstudio/11/en-us">beta release has been available</a> for a couple of weeks now, so I thought it was about time I updated folks on what’s new for <a href="https://msdn.microsoft.com/en-us/library/bb126445(v=vs.110).aspx">T4</a>.</p>  <p>Everything below is in addition to the features and changes I noted in my previous post, <a href="https://blogs.msdn.com/b/t4/archive/2011/09/25/what-s-new-with-t4-in-the-developer-preview-of-visual-studio-11.aspx">What’s new with T4 in the Developer Preview of Visual Studio 11?</a></p>  <p>OK, here goes…</p>  <ol>   <li><strong>Directive processors are MUCH easier to build and more flexible        <br /></strong>Directive processors are T4’s plug-in mechanism.&#160; They allow you to inject code into a template to pass and initialize parameters, or provide standard constructs within a template in a language-agnostic manner. However, they’ve been a bit fiddly to set up in the past and haven’t seen a lot of use.&#160; This time, we’ve made them much cleaner and easier.       <ul>       <li>Directive processors can now be deployed as simple MEF components in a standard Visual Studio VSIX container. This means you can easily publish them on the Visual Studio gallery. There are new attributes <font face="Courier New">[DirectiveProcessor]</font> and <font face="Courier New">[SupportedDirective]</font> to make this easy. Look out for an example soon. </li>        <li>Directive processors can now be built to run across Visual Studio versions as they only need to implement the new immutable interface type, <font face="Courier New">IDirectiveProcessor</font>. </li>        <li>Directive processors can now <a href="https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2083665-set-class-attributes-in-t4-output-class" target="_blank">add custom attributes to the underlying T4 class</a>.&#160; For example, it’s now really easy to create a directive processor to decorate a runtime template with MEF exports.&#160; You simply implement the new method <font face="Courier New">GetTemplateClassCustomAttributes</font>().&#160; I expect <a href="https://msmvps.com/blogs/kathleen/">Kathleen</a> to be all over this one! <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/36/85/metablogapi/8446.wlEmoticon-smile_4C9E5C95.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-85-metablogapi/8446.wlEmoticon_2D00_smile_5F00_4C9E5C95.png" /> </li>     </ul>   </li>    <li><strong>Cleanliness features for runtime templates        <br /></strong>We’ve finished the name transition from Preprocessed to Runtime templates in the beta including renaming the item templates and, as we’re now seeing a lot more usage of runtime templates, we’ve added a few cleanup features.       <ul>       <li>You can now control the visibility of the generated class, using the new <font face="Courier New">visibility</font> property on the <font face="Courier New">&lt;#@ template #&gt;</font> directive with values <font face="Courier New">public</font> or <font face="Courier New">internal</font>.&#160; This means that if you’ve got runtime templates as part of a published assembly, they no longer have to be part of your public API. </li>        <li>You can now turn off line pragmas for runtime templates with the new <font face="Courier New">linePragmas</font> property on the <font face="Courier New">&lt;#@ template #&gt;</font> directive with values <font face="Courier New">true</font> or <font face="Courier New">false</font>. This gives you more debugging options, as you can choose to either debug the original template or the generated code. This can also help if you’re finding the absolute filenames in pragmas are causing distracting merges under source code control. </li>     </ul>   </li>    <li><strong>UI Simplification        <br /></strong>As part of Visual Studio 11’s <a href="https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Visual-Studio-Toolbox-Simplification-of-the-Visual-Studio-11-Development-Environment" target="_blank">overall effort to simplify the UI</a>, we’ve moved the <font face="Courier New">Transform All Templates</font> button out of the previously cluttered Solution Explorer toolbar.&#160; You’ll now find it on the build toolbar and the build menu.&#160; It also blocks the UI a bit less than it used to when you have lots of templates in your solution. </li> </ol>  <p>&#160;</p>  <p>We hope you enjoy these new features.&#160; As always, please give us feedback via <a href="https://connect.microsoft.com/VisualStudio" target="_blank">Connect</a> or <a href="https://visualstudio.uservoice.com/forums/121579-visual-studio" target="_blank">UserVoice</a>.</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e0dbc393-ad1b-43dc-bcc0-9449b784b3c1" class="wlWriterEditableSmartContent">Technorati Tags: <a href="https://technorati.com/tags/T4" rel="tag">T4</a>,<a href="https://technorati.com/tags/Visual+Studio+11+Beta" rel="tag">Visual Studio 11 Beta</a>,<a href="https://technorati.com/tags/Code+Generation" rel="tag">Code Generation</a></div>]]></content:encoded>
    </item>
    <item>
      <title>Some nice new getting started with T4 videos</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/some-nice-new-getting-started-with-t4-videos</link>
      <pubDate>Tue, 29 Nov 2011 17:22:51 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2011/11/29/some-nice-new-getting-started-with-t4-videos/</guid>
      <description><![CDATA[Kalle over at abstractiondev has a nice series of videos getting started with T4 and developing a...]]></description>
      <content:encoded><![CDATA[<p>Kalle over at <a title="https://abstractiondev.wordpress.com/" href="https://abstractiondev.wordpress.com/" target="_blank">abstractiondev</a> has a nice series of videos getting started with T4 and developing a rich set of metadata to drive systematic generation.</p>  <p><a title="https://abstractiondev.wordpress.com/demo-videos/" href="https://abstractiondev.wordpress.com/demo-videos/">https://abstractiondev.wordpress.com/demo-videos/</a></p>  <p>He’s also not afraid to promote his ideas with conviction, which is refreshing these days!</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3dd28d21-b685-40b7-afd3-f0cd5482eec3" class="wlWriterEditableSmartContent">Technorati Tags: <a href="https://technorati.com/tags/T4" rel="tag">T4</a>,<a href="https://technorati.com/tags/Videos" rel="tag">Videos</a></div>]]></content:encoded>
    </item>
    <item>
      <title>What's new with T4 in the Developer Preview of Visual Studio 11?</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/whats-new-with-t4-in-the-developer-preview-of-visual-studio-11</link>
      <pubDate>Sun, 25 Sep 2011 05:03:33 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2011/09/25/whats-new-with-t4-in-the-developer-preview-of-visual-studio-11/</guid>
      <description><![CDATA[digg_url =...]]></description>
      <content:encoded><![CDATA[<div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"><script type="text/javascript">digg_url = "https://blogs.msdn.com/b/garethj/archive/2011/09/25/what-s-new-with-t4-in-the-developer-preview-of-visual-studio-11.aspx";digg_title = "What's new with T4 in the Developer Preview of Visual Studio 11?";digg_bgcolor = "#FFFFFF";digg_skin = "normal";</script><script src="https://digg.com/tools/diggthis.js" type="text/javascript"></script><script type="text/javascript">digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;</script></div><p>In among all the excitement of new ALM features like <a href="https://blogs.msdn.com/b/bharry/archive/2011/09/19/the-new-team-explorer-in-tfs-11.aspx">integrated Code Review and MyWork</a> to manage your daily workflow in the developer preview, there are, of course, a few nice new features for T4.</p> <p>First of all, a naming change that's underway.&nbsp; We've heard from you that 'Preprocessed' isn't the clearest choice of name for our templates, so we've switched to a new naming scheme:</p> <ul> <li>Design-time templates - Templates that run in the VS IDE to produce output based directly on the template content  <li>Run-time templates - Templates that are preprocessed in the VS IDE to produce a class that you incorporate into your application for use at runtime. Calling a method on the class produces output based on the template content.</li></ul> <p>For the Developer Preview, you'll see this change mostly in our documentation; the new terms will find their way into the product UI in time for Beta.</p> <p>&nbsp;</p> <p>Now on to new features we've added in the preview:</p> <p><strong>1) Improved template inheritance for runtime templates that need access to features of the host</strong></p> <p>Previously, if you had a runtime template that declared itself as <a href="https://www.olegsych.com/2008/02/t4-template-directive/">host-specific</a>, </p> <blockquote> <p><font face="Courier New">&lt;#@ template hostSpecific="true" #&gt;</font></p></blockquote> <p>it was hard to reuse the template through inheritance cleanly.&nbsp; Derived templates that also declared host-specific would create a second 'Host" member that would hide the one from the base class, giving a warning.<br>To address this, we've added a third value for host-specific, "TrueFromBase", that makes the engine generate a host specific template, but expects the 'Host" property to come from the base class.</p> <p>We've also made the comments generated from runtime templates more helpful.</p> <p><br><strong>2) Better error processing for design-time templates</strong></p> <p>When your design-time template gets past the compile stage and starts to run the compiled code, T4 now accurately reports line numbers for any exceptions that get thrown.<br>Don't forget to set debug="true" to make sure the compiler is emitting line number information.</p> <p><strong>3) COM Service helper</strong></p> <p>For folks using host-specific templates to access VS services, there've been a few reports of exceptions being thrown for one or two specific services.<br>Typically, it turns out that these services are written in managed code, but exposed over COM and then marshaled to T4's AppDomain over .Net Remoting. (Phew!)</p> <p>This rather complex path leads to the exceptions, so we've included a simple extension method on IServiceProvider that you can use to get hold of those services and force them to behave properly:</p> <blockquote> <p><font face="Courier New">&nbsp;&nbsp;&nbsp; public static class ServiceProviderExtensions<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static Object GetCOMService(this IServiceProvider provider, Type type)<br>&nbsp;&nbsp;&nbsp; }</font></p></blockquote> <p>Just call this method instead of the regular GetService() method and your COM troubles should be over.</p> <p><strong>4. Item templates now support LINQ out of the box.</strong></p> <p>We've updated our VS item templates, so when you add a new T4 template to your VS project, you'll automatically get all the directives you need to use LINQ right off the bat.</p> <blockquote> <p><font face="Courier New">&lt;#@ assembly name="System.Core" #&gt;<br>&lt;#@ import namespace="System.Linq" #&gt;<br>&lt;#@ import namespace="System.Text" #&gt;<br>&lt;#@ import namespace="System.Collections.Generic" #&gt;</font></p></blockquote> <p><strong>5. Correct disposal of MEF container when T4 AppDomain recycles.</strong></p> <p>We provide a simple helper method (<a href="https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.texttemplating.vshost.compositionservices.initializeservices.aspx">CompositionServices.InitializeServices()</a> ) to set up a MEF composition container in the T4 AppDomain if you want to use VS' MEF components from your template.</p> <p>T4 has a heuristic that decides when to recycle the secondary AppDomain for design-time templates. This one is really more of a bug fix, but I'll mention it just because not many folks know about the MEF setup helper.<br>The fix is that now when the AppDomain gets recycled, the MEF container is correctly Disposed.</p> <p>&nbsp;</p> <p>We'll have some more features to talk about once the Beta comes along, but in the mean time, I hope you enjoy these improvements to T4 in our Developer Preview.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e9923785-e38e-47de-8f8b-7d4c9c0d48f6" class="wlWriterSmartContent">Technorati Tags: <a href="https://technorati.com/tags/T4" rel="tag">T4</a>,<a href="https://technorati.com/tags/VS11" rel="tag">VS11</a>,<a href="https://technorati.com/tags/Visual+Studio" rel="tag">Visual Studio</a></div>]]></content:encoded>
    </item>
    <item>
      <title>DevArt joins the T4 Template Editor Fray</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/devart-joins-the-t4-template-editor-fray</link>
      <pubDate>Wed, 01 Jun 2011 18:32:34 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2011/06/01/devart-joins-the-t4-template-editor-fray/</guid>
      <description><![CDATA[&#160;  We’ve now got a third contender in the Visual Studio T4 Editor space.&#160; The good folks...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p><font size="2">We’ve now got a third contender in the Visual Studio T4 Editor space.&#160; The good folks over at DevArt have joined the race. From their press release:</font></p>  <blockquote>   <p><font size="2">Devart today releases a new powerful Visual Studio add-in for editing T4 templates with syntax highlighting, intellisense, code outlining, and all features of first-class text editor add-in for Visual Studio. It provides very high performance and makes creating T4 templates easier and faster.</font></p>    <p><font size="2">With this new add-in, Devart offers a fast and easy way to create and edit T4 templates with multilevel template including, convenient template navigation, and rich code editing features.</font></p> </blockquote>  <p><font size="2">So here’s my updated table of T4 editors (still </font><font color="#000000" size="2">in strictly alphabetical order)</font></p>  <table style="list-style-type: disc" border="0" cellspacing="0" cellpadding="2" width="672"><tbody>     <tr>       <td valign="top" width="221"><font size="2"></font></td>        <td valign="top" width="242"><font color="#000000" size="2">Visual Studio 2010</font></td>        <td valign="top" width="207"><font color="#000000" size="2">Visual Studio 2008</font></td>     </tr>      <tr>       <td valign="top" width="246"><font color="#000000" size="2"><a href="https://blog.visualt4.com/" target="_blank">Clarius Consulting</a></font></td>        <td valign="top" width="260"><font color="#000000" size="2"><a href="https://visualstudiogallery.msdn.microsoft.com/40a887aa-f3be-40ec-a85d-37044b239591" target="_blank">Get it</a></font></td>        <td valign="top" width="217"><font color="#0066cc" size="2"><u><a href="https://www.t4editor.net/" target="_blank">Get it</a></u></font></td>     </tr>      <tr>       <td valign="top" width="254"><a href="https://www.devart.com/t4-editor/" target="_blank">DevArt</a></td>        <td valign="top" width="265"><a href="https://visualstudiogallery.msdn.microsoft.com/a42a8538-8d6e-491b-8097-5a8a00174d37" target="_blank">Get It</a></td>        <td valign="top" width="221"><a href="https://visualstudiogallery.msdn.microsoft.com/abbd319b-45ff-4948-b071-17ac84a02ba6" target="_blank">Get It</a></td>     </tr>      <tr>       <td valign="top" width="256"><font color="#000000" size="2"><a href="https://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html" target="_blank">Tangible Engineering</a></font></td>        <td valign="top" width="266"><font color="#0066cc" size="2"><u><a href="https://visualstudiogallery.msdn.microsoft.com/60297607-5fd4-4da4-97e1-3715e90c1a23" target="_blank">Get it</a></u></font></td>        <td valign="top" width="222"><font color="#0066cc" size="2"><u><a href="https://visualstudiogallery.msdn.microsoft.com/1A6C4FB2-7908-4721-92B3-61F2CEE92294/" target="_blank">Get it</a></u></font></td>     </tr>   </tbody></table>  <p style="list-style-type: disc"><font size="2"></font></p>  <p style="list-style-type: disc"><font color="#000000" size="2">Keep on transforming those templates.</font></p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d7f99372-44cb-431b-89c4-9c87ea58b9f5" class="wlWriterEditableSmartContent">Technorati Tags: <a href="https://technorati.com/tags/T4" rel="tag">T4</a>,<a href="https://technorati.com/tags/VST4" rel="tag">VST4</a>,<a href="https://technorati.com/tags/T4+Editor" rel="tag">T4 Editor</a>,<a href="https://technorati.com/tags/Visual+Studio" rel="tag">Visual Studio</a></div>]]></content:encoded>
    </item>
    <item>
      <title>Pluralcast Podcast on T4</title>
      <link>https://docs.microsoft.com/archive/blogs/garethj/pluralcast-podcast-on-t4</link>
      <pubDate>Fri, 06 May 2011 13:22:56 GMT</pubDate>
      <dc:creator><![CDATA[GarethJones]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/garethj/2011/05/06/pluralcast-podcast-on-t4/</guid>
      <description><![CDATA[&#160;  A few weeks ago, I recorded a podcast about T4, and how it’s being used inside and outside...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>A few weeks ago, I recorded a podcast about T4, and how it’s being used inside and outside Microsoft with the estimable <a href="https://www.pluralsight-training.net/community/blogs/starr/default.aspx" target="_blank">David Starr</a>, who I happened to meet up with at the recent <a href="https://mvp.support.microsoft.com/gp/MVPsummit" target="_blank">MVP Summit</a>.</p>  <p>You can check it out in the <a href="https://www.pluralsight-training.net" target="_blank">PluralSight</a> <a href="https://www.pluralsight-training.net/community/blogs/pluralcast/" target="_blank">Pluralcast blog</a>. Enjoy.</p>  <p><a href="https://www.pluralsight-training.net/community/blogs/pluralcast/archive/2011/04/07/pluralcast-39-t4-with-gareth-jones.aspx">https://www.pluralsight-training.net/community/blogs/pluralcast/archive/2011/04/07/pluralcast-39-t4-with-gareth-jones.aspx</a></p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:48170b5a-2332-42c4-8b92-dc6fed835f1e" class="wlWriterEditableSmartContent">Technorati Tags: <a href="https://technorati.com/tags/T4" rel="tag">T4</a>,<a href="https://technorati.com/tags/PluralCast" rel="tag">PluralCast</a>,<a href="https://technorati.com/tags/PodCast" rel="tag">PodCast</a>,<a href="https://technorati.com/tags/VST4" rel="tag">VST4</a></div>]]></content:encoded>
    </item>
  </channel>
</rss>