在 T4 模板中引用程序集

15

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

在模板中是否可以引用任意程序集?

例如:

  • 我有一个类我想在项目X中使用
  • 项目X.Test引用了X并包含.tt文件

我觉得以下内容应该可以工作

<#@ assembly name="X" #>

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

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

我做错了什么?

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

更新:看起来VS2010破坏了我期望的程序集解析行为。来自 链接

T4的程序集集合完全与包含项目的程序集集合分开,以避免在项目针对以前的框架版本时选择错误的程序集。项目程序集不再用于解析模板程序集指令。

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


你尝试过使用该程序集的完全限定路径吗?文本模板工具是一个外部工具,可能不知道你已经加载到VS中的项目。 - Mark H
可以运行,但我需要它在多台机器上运行,这些机器可能有不同的项目路径。 - Diego Mijelshon
3个回答

26

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

<#@ assembly name="$(SolutionDir)\Project1\bin\debug\Foo.dll" #>

这对我不起作用。你知道我做错了什么吗?我的程序集引用如下:<#@ assembly name="$(SolutionDir)\DataObjects\bin\Debug\DataObjects.dll" #> - ProfK
这应该完全没问题,但是从其他线程中得知您正在使用VS 2008而不是VS2010?如果您使用的是VS2008,则推荐的方法是在托管项目中添加程序集作为项目引用。 - GarethJ
3
+1非常有用。我需要参考当前的程序集,使用以下<#@assembly name="$(TargetPath)"#>。 - JanW
编辑Mvc中的脚手架tts时怎么样?MVCWebApplication1\CodeTemplates\AddView\CSHTML\Edit.tt。在简单的.tt文件中可以正常工作,但在Edit.tt中无法正常工作:<#@ assembly name="$(TargetDir)\ToSpinitLibraryModel.dll"#>也尝试过通过"$(SolutionDir)来实现。 - Per G
不行,目前那需要使用另一个主机。你可以提交连接错误或在asp.net uservoice上发帖要求此功能。 - GarethJ

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接