Visual studio 2010 在T4模板中引用部件

Visual studio 2010 在T4模板中引用部件,visual-studio-2010,t4,Visual Studio 2010,T4,我上次使用T4已经有一段时间了,这可能是一个愚蠢的问题 是否可以从模板引用任意程序集 例如: 我想在ProjectX中使用一个类 projectx.Test引用X并包含.tt文件 我认为以下方法应该有效 <#@ assembly name="X" #> 但我在保存时遇到以下错误: 编译转换:元数据 找不到文件“X” 我做错了什么 (如果有人感兴趣:我正试图根据从X获得的一些元数据自动生成特定类型的测试) 更新:看起来VS2010破坏了我所期望的程序集解析行为。发件人: T4

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

是否可以从模板引用任意程序集

例如:

  • 我想在ProjectX中使用一个类
  • projectx.Test引用X并包含.tt文件
我认为以下方法应该有效

<#@ assembly name="X" #>

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

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

我做错了什么

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

更新:看起来VS2010破坏了我所期望的程序集解析行为。发件人:

T4的装配套件已完全安装完毕 与容器分离 要避免的项目的程序集 在发生错误时拾取错误的程序集 项目针对以前的框架 版本。项目程序集不可用 不再用于解析模板 汇编指令


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

您可以在VS2010的参考中使用VS宏变量,例如$(SolutionDir) e、 g



您也可以在此处查看,因此:

@GarethJ给出了一个很好的答案,但对于从T4模板引用程序集的所有方法,请尝试以下方法:


如果您喜欢VS宏解决方案,那么您可以在这里找到它们:

您是否尝试过使用该程序集的完全限定路径?文本模板工具是一个外部工具,可能不知道您已加载到VS中的项目是否有效,但我需要在多台机器上运行此工具,这些机器可能具有不同路径的项目。这正是我所寻找的。谢谢这对我没用。你知道我做错了什么吗?我的assembly ref如下:这应该可以很好地工作,但它听起来像是来自于你使用的VS2008,而不是VS2010?如果您使用的是VS2008,建议您将程序集添加为宿主项目中的项目引用。+1非常有用。我必须引用当前的程序集,并使用以下命令:在Mvc中编辑scaffolding tts时如何?MVCWebApplication1\CodeTemplates\AddView\CSHTML\Edit.tt。在简单的.tt中工作,但不在编辑中工作。tt:也可以通过“$(SolutionDir)”尝试
<#@ assembly name="$(SolutionDir)\Project1\bin\debug\Foo.dll" #>