引用T4模板中的程序集

Die*_*hon 15 t4 visual-studio-2010

自从我上次使用T4以来已经有一段时间了,这可能是一个愚蠢的问题......

是否可以从模板引用任意组件?

例:

  • 我有一个我想在Project X中使用的课程
  • 项目X.Test引用X并包含.tt文件

我认为以下应该有效

<#@ assembly name="X" #>
Run Code Online (Sandbox Code Playgroud)

但是我在保存时收到以下错误:

编译转换:找不到元数据文件"X"

我究竟做错了什么?

(如果有人感兴趣:我正在尝试根据我从X获得的一些元数据自动生成特定类型的测试)

更新:看起来VS2010已经破坏了我期待的装配分辨率行为.来自http://blogs.msdn.com/b/garethj/archive/2010/04/15/what-s-new-in-t4-in-visual-studio-2010.aspx:

T4的装配集与包含项目的装配集完全分离,以避免在项目针对以前的框架版本时拾取错误的装配.项目程序集不再用于解析模板程序集指令.

除了使用绝对路径之外,还有其他解决方法吗?

Gar*_*thJ 25

从VS2010开始,您可以在参考中使用VS宏变量,例如$(SolutionDir),例如

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

  • +1非常有用.我必须引用当前程序集并使用以下<#@ assembly name ="$(TargetPath)"#> (3认同)