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

T4 compiling transformation: Cannot access $(TargetPath) in T4 file

我想在每次构建时构建我的 .tt 文件。我找到了这个解决方案(Get Visual Studio to run a T4 Template on every build,由 Cheburek 回答)并按照步骤 运行 得到它

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

我现在的问题是:

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

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

我需要这个,因为我需要访问在同一项目中定义的 class。但是现在(我认为是因为 tt 转换是构建时首先要做的事情)我不能使用这个命名空间导入,因为构建时会出现以下错误:

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

T4 文件在使用之前是有效的"normal"(保存 T4 文件时生成文件)

是否有可能以某种方式执行 T4 转换(作为最后的构建步骤)以便我可以毫无问题地访问我的 T4 文件中的 $(TargetPath)

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

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

我不得不在原项目中引用新项目。
在原始项目的 t4 模板中,我不得不更改程序集引用:

<#@ assembly name="$(SolutionDir)newproject\bin\Debug\newproject.dll" #>