2017-03-15 45 views
0

我有一个在VS2013和VS2015中工作多年的设计时T4模板。在Visual Studio 2017中损坏的T4组装指令

在VS2017中,该模板无法运行,并出现MissingMethodException。有问题的方法被安置在一个自定义组件中。该程序集使用绝对路径以及$(SolutionDir)宏引用。例如:

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

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

我认为这是T4VSHost中的一个错误。无论如何要解决这个问题或解决方法吗?

+0

作为解决方法,我将my.dll放在$(DevEnvDir)的“我的”子目录中。就我个人而言,我认为这是一个不好的做法。但Fusion会以这种方式找到它。我宁愿将它放在更负责任的地方,并指示Fusion在哪里找到它。 –

+0

可以硬编码文件路径吗? – qxg

+0

@qxg,你在暗示宏(或宏扩展)有问题吗?显然,这不是问题。我硬编码的路径来测试理论 - 不行。 –

回答

0

Visual Studio在2017和之前的版本中将锁定其在当前VS会话中构建的组件。所以,如果你的路径看起来像。

<#@ assembly name="$(SolutionDir)SomeProjectFolder\bin\Debug\SomeAssembly.dll" #>

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

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

相关问题