【问题标题】:T4 assembly directive broken in Visual Studio 2017Visual Studio 2017 中的 T4 程序集指令损坏
【发布时间】:2017-03-15 02:47:14
【问题描述】:

我有一个在 VS2013 和 VS2015 中使用多年的设计时 T4 模板。

在 VS2017 中,模板无法运行并出现 MissingMethodException。有问题的方法位于自定义程序集中。使用绝对路径和 $(SolutionDir) 宏引用程序集。比如:

<#@ assembly name="$(SolutionDir)path\my.dll"#>

我一直在使用 Fusion Log Viewer 来调试此问题。显然,找不到“my.dll”。根据日志,Visual Studio 并没有在绝对路径中查找。

我认为这是 T4VSHost 中的一个错误。有没有办法解决这个问题或解决方法?

【问题讨论】:

  • 作为一种解决方法,我将 my.dll 放在 $(DevEnvDir) 的“my”子目录中。就个人而言,我认为这是一种不好的做法。但是Fusion会以这种方式找到它。我宁愿把它放在更负责任的地方,并指示 Fusion 在哪里找到它。
  • 硬编码文件路径可以工作吗?
  • @qxg,你是说宏(或宏扩展)有问题吗?显然,这不是问题。我硬编码了测试理论的路径 - 不行。

标签: t4 visual-studio-2017


【解决方案1】:

Visual Studio 在 2017 年及之前版本将锁定它在当前 VS 会话中构建的程序集。所以如果你的路径看起来像这样。

&lt;#@ assembly name="$(SolutionDir)SomeProjectFolder\bin\Debug\SomeAssembly.dll" #&gt;

然后T4引擎会抛出一个异常,说找不到Assembly。如果您重新启动解决方案,然后在不构建的情况下运行 T4 模板,它将正常运行。

这使得调试或以其他方式处理主要用于在 T4 模板中引用的程序集变得很痛苦。

【讨论】:

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