T4模板的自定义输出文件路径

时间:2014-01-25 15:24:52

标签: c# visual-studio-2010 t4 texttemplate

我发现使用非标准目录结构的t4模板非常困难。我在我的csproj文件中使用链接,这似乎是问题的根源。

我有它的工作,但是,VS自动做出改变,打破了事情。

我有以下目录结构:

/source
  + MyLib.cs 
/generate
    /MyLib
      + MyLib.tt
      + MyLib.A.t4 // included by MyLib.tt
      + MyLib.B.t4 // included by MyLib.tt
  + MyLib.C.t4 // included by MyLib.tt
/build_examples
   /vs
     + MyLib.csproj
     + MyLib.sln

MyLib.csproj看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    ...
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
  </ItemGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <ItemGroup>
    <None Include="..\..\generate\MyLib\MyLib.tt">
      <Link>MyLib\MyLib.tt</Link>
      <Generator>TextTemplatingFileGenerator</Generator>
      <LastGenOutput>..\..\source\MyLib.cs</LastGenOutput>
    </None>
    <None Include="..\..\generate\MyLib\MyLib.A.t4">
      <Link>MyLib\MyLib.A.t4</Link></None>
    <None Include="..\..\generate\MyLib\MyLib.B.t4">
      <Link>MyLib\MyLib.A.t4</Link></None>
    <None Include="..\..\generate\MyLib\MyLib.C.t4">
      <Link>MyLib\MyLib.A.t4</Link></None>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="..\..\source\MyLib.cs">
      <Link>MyLib\MyLib.cs</Link>
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>MyLib.tt</DependentUpon>
    </Compile>
  </ItemGroup>
</Project>

所以我的项目有一个t4模板的链接,我希望t4模板在项目之外生成一个输出文件,项目链接到并编译。

我的上述作品。设置这样的项目,打开它,VS正确链接并嵌套LINKED tt文件和cs文件。现在重建。一切正常。 t4引擎正确地重建了项目目录之外的文件。

但是再试一次,还有BOOM!

执行构建后,VS会自动从.csproj文件中删除以下行:

      <LastGenOutput>..\..\source\MyLib.cs</LastGenOutput>

我不确定为什么会这样做,一旦触发重建时线路消失,而不是改变t4引擎:

/source/MyLib.cs

它决定它需要从tt文件自动生成一个新输出,并创建:

/generate/MyLib/MyLib1.cs

任何帮助都将不胜感激。

干杯

1 个答案:

答案 0 :(得分:3)

尝试将OutputFilePath添加到项目文件中:

<None Include="..\..\generate\MyLib\MyLib.tt">
  <Link>MyLib\MyLib.tt</Link>
  <Generator>TextTemplatingFileGenerator</Generator>
  <OutputFilePath>..\..\source\</OutputFilePath>
  <LastGenOutput>..\..\source\MyLib.cs</LastGenOutput>
</None>

有关在构建过程中运行T4的详细信息,请参阅http://msdn.microsoft.com/en-us/library/ee847423.aspx