【问题标题】:Referencing an assembly in a T4 template在 T4 模板中引用程序集
【发布时间】:2015-04-02 06:00:37
【问题描述】:

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

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

例子:

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

我认为以下应该可以工作

<#@ assembly name="X" #>

但保存时出现以下错误:

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

我做错了什么?

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

更新:看起来 VS2010 已经破坏了我所期望的程序集解析行为。来自http://blogs.msdn.com/b/garethj/archive/2010/04/15/what-s-new-in-t4-in-visual-studio-2010.aspx

T4的组装集完全 与包含分离 项目的装配集要避免 拿起错误的组件时 项目针对以前的框架 版本。项目程序集没有 不再用于解析模板 汇编指令。

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

【问题讨论】:

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

标签: visual-studio-2010 t4


【解决方案1】:

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

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

【讨论】:

  • 这就是我想要的。谢谢!
  • 这对我不起作用。关于我做错了什么的任何想法?我的程序集参考如下:
  • 这应该工作得很好,但从其他线程听起来你使用的是 VS 2008,而不是 VS2010?如果您使用的是 VS2008,推荐的方法是将程序集添加为托管项目中的项目引用。
  • +1 非常有用。我必须引用当前程序集并使用以下
  • 在 Mvc 中编辑脚手架 tts 怎么样? MVCWebApplication1\CodeTemplates\AddView\CSHTML\Edit.tt。在一个简单的 .tt 中工作,但不是在 Edit.tt 中: 也尝试通过 "$(SolutionDir)
【解决方案2】:

您也可以在这里查看 SO:Can't reference an assembly in a T4 template

【讨论】:

    【解决方案3】:

    @GarethJ 给出了一个很好的答案,但是对于从 T4 模板引用程序集的所有方法,试试这个:T4 Template error - Assembly Directive cannot locate referenced assembly in Visual Studio 2010 project

    如果你喜欢 VS 宏解决方案,那么你可以在这里找到它们:Macros for Build Commands and Properties

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多