【发布时间】:2011-05-04 16:49:36
【问题描述】:
我们正在尝试将 T4 与 Visual Studio 2010 (SP1) 结合使用,为基于我们现有的一些 C# 类的另一种语言构建脚本。我希望得到以下结果:
- 模板需要加载我们现有的程序集并使用该程序集中命名空间中的对象。
- 转换需要在每台开发机器和构建服务器的每个构建上运行,无需任何额外安装。
- (1) 和 (2) 需要协同工作。
(1) 相当简单:
<#@ assembly name="$(TargetDir)RequiredProject.dll" #>
<#@ import namespace="RequiredProject.RequiredNamespace" #>
使用 $(TargetDir) 宏允许我使用完全限定的 UNC 路径引用 dll(根据指令 found here)。
(2) 有点迂回,但我想我已经解决了:我在另一台机器上安装了required text transformation SDKs,并将所需的 .targets 和 .dlls 复制到我的解决方案中的一个文件夹中,然后更新了我的.csproj 文件以引用本地 .targets 文件。
(3) 是我遇到问题的地方。当需要在转换之前构建引用的程序集时,<TransformOnBuild>true</TransformOnBuild> 属性似乎不能很好地发挥作用。每次我使用引用的程序集在构建上启用转换时,都会收到以下错误:
Compiling transformation: Metadata file '$(TargetDir)RequiredProject.dll' could not be found.
但是,我使用与 (1) 中相同的汇编指令来引用程序集。事实上,直接转到 .tt 模板并保存它仍然会产生预期的输出——它只是在“构建”步骤期间不起作用。我做错了什么,还是有办法确保模板转换发生在在它们所依赖的程序集构建之后? (或者,更简单地说,模板转换最后发生?)
【问题讨论】:
-
您要协助解决这个问题吗?我对第 2 步很好奇。看起来你也在使用 stackoverflow.com/questions/4672064/… T4Toolbox,但我没有在上面看到。
标签: c# visual-studio-2010 code-generation t4