T4编译转换:无法访问T4文件中的$(TargetPath)



我想在每次构建时构建我的.tt文件。我找到了这个解决方案(让Visual Studio在每个构建上运行T4模板,由Cheburek回答),并按照的步骤运行

  1. 安装Visual Studio SDK
  2. 安装Visual Studio 2010建模和可视化SDK
  3. Microsoft.TextTemplating.targets<TransformOnBuild>true</TransformOnBuild>的导入添加到my.csproj

我现在的问题是:

我在T4文件中使用以下程序集导入:

<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="My.Example.Namespace.Path" #>

我需要这个,因为我需要访问在同一个项目中定义的类。但是现在(我认为因为tt转换是在构建中完成的第一件事)我不能使用这个名称空间导入,因为在构建中发生了以下错误:

Error   Compiling transformation: Metadata file '$(TargetPath)' could not be found.

T4文件在"正常"使用时(保存T4文件时生成文件)

是否可以以某种方式执行T4转换(作为最后一个构建步骤),这样我就可以在T4文件中访问$(TargetPath)而不会出现问题?

我今天遇到了同样的问题,正在寻找答案。问题是dll尚未生成,无法加载。尽管如果TargetPath中已经有一个成功的构建,它应该可以工作。

我完成这项工作的方法是将代码分成两个项目。t4模板中使用的代码现在在另一个项目中。

我不得不在原来的项目中引用新项目
在原始项目的t4模板中,我不得不更改组件参考:

<#@ assembly name="$(SolutionDir)newprojectbinDebugnewproject.dll" #>

最新更新