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

Mar*_*ger 0 .net c# msbuild t4 build

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

  1. 安装 Visual Studio SDK
  2. 安装 Visual Studio 2010 建模和可视化 SDK
  3. 增加进口的Microsoft.TextTemplating.targets<TransformOnBuild>true</TransformOnBuild>我的.csproj

我现在的问题是:

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

<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="My.Example.Namespace.Path" #>
Run Code Online (Sandbox Code Playgroud)

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

Error   Compiling transformation: Metadata file '$(TargetPath)' could not be found.
Run Code Online (Sandbox Code Playgroud)

T4 文件在“正常”使用之前工作正常(保存 T4 文件时生成文件)

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

Gid*_*der 5

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

我获得这项工作的方式是将代码拆分为两个项目。t4 模板中使用的代码现在在另一个项目中。

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

<#@ assembly name="$(SolutionDir)newproject\bin\Debug\newproject.dll" #>
Run Code Online (Sandbox Code Playgroud)