EnvDTE不是在VS2012发现VS2010工程(EnvDTE not found in VS20

2019-06-27 12:49发布

我使用EnvDTE我的T4模板内做一些代码生成。

我的代码在Visual Studio 2010中正常工作,但我刚刚使用Visual Studio 2012,现在当我尝试运行我的模板开始,我得到以下错误

Compiling transformation: Metadata file 'EnvDTE.dll' could not be found 

我实际上并不在我的项目作为一个Silverlight类库EnvDTE参考,我不能添加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

Answer 1:

看来,VS12可想不通的地方EnvDTE是。 它的奇怪的是,(如你在留言中提到)融合并没有挑选起来。 也许是做了,但是你没有正确地读它?

顺便说一句,当融合日志可以让你失望,它的时间打出来的Process Monitor当你想不通为什么一个应用程序无法找到的东西,应该有。

你可以给在T4模板组装一个引用完整路径。 对你来说,这将是

<#@ Assembly Name="C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\PublicAssemblies\envdte.dll" #>

(假设你在正确的位置有EnvDTE)。 我不认为这是一个真正的解决方案,并会打开一个连接问题与MS这个问题。 似乎是一个错误。



Answer 2:

跌跌撞撞差不多的错误后,我搜索得更深一些,发现这个微软连接入口 。

为了解决这个问题只需删除.dll从组件名称,它按预期工作:

<#@ Assembly Name="EnvDTE" #>

还要确保EnvDTE组件在位于GAC中的C:\Windows\assembly 。 当您的计算机上安装Visual Studio这通常发生automaticaly。

下面是应开箱的例子:

<#@ template language="C#" debug="true" hostSpecific="true" #>
<#@ output extension=".txt" #>
<#@ Assembly Name="System.Core" #>
<#@ Assembly Name="System.Design" #>
<#@ Assembly Name="System.Drawing" #>
<#@ Assembly Name="System.Windows.Forms" #>
<#@ Assembly Name="EnvDTE" #>
<#@ import namespace="System" #>
<#@ import namespace="System.CodeDom.Compiler" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Drawing" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Resources" #>
<#@ import namespace="System.Resources.Tools" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="Microsoft.CSharp" #>

All projects currently available within this solution:
<#
    //System.Diagnostics.Debugger.Launch();

    EnvDTE.DTE dte = (EnvDTE.DTE)((IServiceProvider)this.Host)
                       .GetService(typeof(EnvDTE.DTE));

    EnvDTE.Projects projects = dte.Solution.Projects;

    foreach (EnvDTE.Project project in projects)
    {
#>
        <#= project.Name #>
<#
    }
#>

This file was generated at: <#= System.DateTime.Now.ToShortDateString() #> <#= DateTime.Now.ToLongTimeString() #>


文章来源: EnvDTE not found in VS2012 works in VS2010