t4 - VS2012 中未找到的 EnvDTE 在 VS2010 中有效

标签 t4 visual-studio-2012 envdte

我正在使用 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/

相关文章:

entity-framework - 在对数据库进行逆向工程时改进导航属性名称

c# - 存储 T4 配置设置的最佳方式

c# - EntityCollection - ICollection<InterfaceTEntity> - 运行时问题/怪癖

sql-server - 在 Visual Studio 2017 中升级报表服务器项目时出错

c# - 如何获取 ENVDTE CodeInterface 的通用类型参数?

没有下划线的驼峰式 T4 FieldName?

c# - 如何在 Visual Studio Express 2012 中添加 resx 文件?

c++ - 在 VS2012 中使用 sqrt 内在的堆栈运行时检查失败

powershell - 如何从 powershell 设置 csproj 文件使用的启动操作(外部程序)

c# - 你能以编程方式访问 'Service Reference' 吗?