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

时间:2015-04-16 13:45:36

标签: c# .net build msbuild t4

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

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

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

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

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

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

    T4文件在使用之前正在工作&#34;正常&#34; (保存T4文件时生成文件)

    以某种方式可以执行T4转换(作为最后的构建步骤),这样我可以在我的T4文件中访问$(TargetPath)而没有问题吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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