gpt4 book ai didi

c# - 使用 TransformOnBuild 时无法在 T4 模板中引用依赖程序集

转载 作者:行者123 更新时间:2023-11-30 22:39:03 24 4
gpt4 key购买 nike

我们正尝试将 T4 与 Visual Studio 2010 (SP1) 结合使用,以基于我们现有的一些 C# 类为另一种语言构建脚本。我希望得到以下结果:

  1. 模板需要加载我们现有的程序集并使用该程序集中命名空间中的对象。
  2. 转换需要在每台开发机器和构建服务器上的每个构建上运行,无需任何额外安装。
  3. (1) 和 (2) 需要协同工作。

(1) 相当简单:

<#@ assembly name="$(TargetDir)RequiredProject.dll" #>
<#@ import namespace="RequiredProject.RequiredNamespace" #>

使用 $(TargetDir)宏允许我使用完全限定的 UNC 路径引用 dll(根据说明 found here )。

(2) 有点迂回,但我想我已经解决了:我安装了 required text transformation SDKs在另一台机器上并将所需的 .targets 和 .dll 复制到我的解决方案中的一个文件夹中,然后更新我的 .csproj 文件以引用本地 .targets 文件。

(3) 是我遇到问题的地方。好像是 <TransformOnBuild>true</TransformOnBuild>当需要在转换之前构建引用的程序集时,属性不能很好地发挥作用。每次我使用引用的程序集在构建时启用转换时,我都会收到以下错误:

Compiling transformation: Metadata file '$(TargetDir)RequiredProject.dll' could not be found.

但是,我使用与 (1) 中相同的汇编指令来引用程序集。事实上,直接转到 .tt 模板并保存它仍然会产生预期的输出——它只是在“构建”步骤期间不起作用。我做错了什么,还是有办法确保模板转换发生在之后它们所依赖的程序集被构建? (或者,更简单地说,模板转换发生在最后?)

最佳答案

遗憾的是,msbuild T4 主机尚不支持在程序集名称中嵌入宏或 msbuild 变量。

但是,它确实支持 Windows 环境变量“%foo%”,因此尽管这意味着一些机器级设置,但您可以获得在 IDE 和构建时转换中工作的东西。

关于c# - 使用 TransformOnBuild 时无法在 T4 模板中引用依赖程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com