6

我试图在我的项目中使用这样简单的方案:

Item.cs -> 这包含具有简单实体属性的 c# 部分类。它还设置了属性“自定义工具:T4ScriptFileGenerator”,因此它将“分组”文件Item.tt 附加到它。它在途中生成Item.generated.cs,分组到Item.tt。因此,它会在解决方案资源管理器中生成一个分组树:

Item.cs
˪Item.tt
 ˪Item.generated.cs

您可以在下面看到它在 .csproj 文件中的外观。

整个项目连接到 TFS 2010 工作区。

问题是:

当我编辑Item.cs时,t4 引擎会重新创建Item.generated.cs文件,但不会从 tfs 中检出它。它仅自动检出前两个级别的“分组”文件 - Item.cs及其依赖的Item.tt。Item.generated.cs更新,但被简单覆盖,无需结帐。

如果我编辑 Item.tt 文件或只是在其上按“运行自定义工具” - 再次检出两个文件:Item.tt及其依赖的Item.generated.cs 这很奇怪,因为迫使我们手动“运行自定义工具”编辑实体类文件后的每个 *.tt 文件,以确保 TFS 中没有遗漏任何内容。

问:有什么方法可以强制它在编辑主 Item.cs 时检查整个DependentUpon文件树?

这是它在 .csproj 文件源中的外观:

<Compile Include="Entities\Item.cs">
  <Generator>T4ScriptFileGenerator</Generator>
  <LastGenOutput>Item.tt</LastGenOutput>
</Compile>
<None Include="Entities\Item.tt">
  <Generator>TextTemplatingFileGenerator</Generator>
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>Item.cs</DependentUpon>
  <LastGenOutput>Item.codegen.cs</LastGenOutput>
</None>
<Compile Include="Entities\Item.codegen.cs">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>Item.tt</DependentUpon>
</Compile>
4

2 回答 2

0

它不是很优雅,但您总是可以通过点击解决方案资源管理器顶部的“转换所有模板”按钮让 VS 转换解决方案中的所有模板。

请参阅我对原始问题的注释,至少在 VS2010 SP1 中,这似乎有效,给出了确切的示例项目文件片段。

于 2011-12-21T03:02:04.230 回答
-1
/// <summary>
/// (T4 template code to checkout a file path if necessary)
/// </summary>
/// <param name="fileName">The file name.</param>
private void CheckoutFileIfRequired(String fileName)
{
    var sc = this.dte.SourceControl;
    if (sc != null && sc.IsItemUnderSCC(fileName) && !sc.IsItemCheckedOut(fileName))
            checkOutAction.EndInvoke(checkOutAction.BeginInvoke(fileName, null, null));
}
于 2017-09-19T05:08:18.047 回答