我正在使用 EnvDTE 在我的 T4 模板中生成一些代码。
我的代码在 Visual Studio 2010 中正常工作,但是我刚刚开始使用 Visual Studio 2012,现在当我尝试运行我的模板时出现以下错误
Compiling transformation: Metadata file 'EnvDTE.dll' could not be found
我的项目中实际上没有对 EnvDTE 的引用,因为它是 Silverlight 类库,我无法添加 DLL,但是它以某种方式找到了 DLL。
我不确定 10 和 12 之间的区别是什么导致了这种情况。
以下是我的 ttinclude 文件开头的导入和程序集定义。
<#@ template debug="true" hostSpecific="true" #>
<#@ output extension=".generated.cs" #>
<#@ Assembly Name="EnvDTE.dll" #>
<#@ Assembly Name="System.Data" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text.RegularExpressions" #>
有什么我必须做的不同才能让它适用于 Visual Studio 2012
最佳答案
看来 VS12 无法弄清楚 EnvDTE 在哪里。奇怪的是(正如您在评论中提到的)融合没有发现这一点。也许确实如此,但您没有正确阅读它?
顺便说一句,当融合日志让你失望时,当你无法弄清楚为什么应用程序找不到应该在那里的东西时,是时候打破进程监视器了。
您可以在 T4 模板中提供程序集引用的完整路径。在你的情况下,这将是<#@ Assembly Name="C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\PublicAssemblies\envdte.dll" #>
(假设您在正确的位置安装了 EnvDTE)。我不会认为这是一个真正的解决方案,并且会就此向 MS 提出一个 Connect 问题。好像是个bug。
关于t4 - VS2012 中未找到的 EnvDTE 在 VS2010 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12176042/