让Visual Studio在每个版本上运行T4模板

如何获得T4模板以在每个构建中生成其输出? 就像现在一样,当我对模板进行更改时,它只会重新生成它。

我发现了类似这样的其他问题:

在Visual Studio中T4转换和构建顺序(未答复)

如何让t4文件在Visual Studio中生成? (答案不够详细[虽然仍然复杂],甚至没有总体意义)

必须有一个更简单的方法来做到这一点!


我用JoelFan的回答来提出这个问题。 我更喜欢它,因为每次将新的.tt文件添加到项目时,都不必记住修改预生成事件。

  • 将TextTransform.exe添加到您的%PATH%
  • 创建了一个名为transform_all.bat的批处理文件(请参见下文)
  • 创建一个预生成事件“ transform_all ....
  • transform_all.bat

    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    :: set the working dir (default to current dir)
    set wdir=%cd%
    if not (%1)==() set wdir=%1
    
    :: set the file extension (default to vb)
    set extension=vb
    if not (%2)==() set extension=%2
    
    echo executing transform_all from %wdir%
    :: create a list of all the T4 templates in the working dir
    dir %wdir%*.tt /b /s > t4list.txt
    
    echo the following T4 templates will be transformed:
    type t4list.txt
    
    :: transform all the templates
    for /f %%d in (t4list.txt) do (
    set file_name=%%d
    set file_name=!file_name:~0,-3!.%extension%
    echo:  --^> !file_name!    
    TextTransform.exe -out !file_name! %%d
    )
    
    echo transformation complete
    

    我同意GarethJ - 在VS2010中,在每个版本上重新生成tt模板要容易得多。 奥列格Sych的博客介绍了如何做到这一点。 简而言之:

  • 安装Visual Studio SDK
  • 安装Visual Studio 2010建模和可视化SDK
  • 在文本编辑器项目文件中打开并添加到文件末尾,但在</Project>之前
  • 而已。 打开你的项目。 在每个版本上,所有* .tt模板都将被重新处理

    <!-- This line could already present in file. If it is so just skip it  -->
    <Import Project="$(MSBuildToolsPath)Microsoft.CSharp.targets" />
    <!-- process *.tt templates on each build  -->
    <PropertyGroup>
        <TransformOnBuild>true</TransformOnBuild>
    </PropertyGroup>
    <Import Project="$(MSBuildExtensionsPath)MicrosoftVisualStudioTextTemplatingv10.0Microsoft.TextTemplating.targets" />
    

    有一个很棒的NuGet包可以做到这一点:

    PM> Install-Package Clarius.TransformOnBuild
    

    关于这个包的细节可以在这里找到

    链接地址: http://www.djcxy.com/p/92427.html

    上一篇: Get Visual Studio to run a T4 Template on every build

    下一篇: Simplified WCF configuration on server and client