【问题标题】:EnvDTE not found in VS2012 works in VS2010EnvDTE not found in VS2012 适用于 VS2010
【发布时间】:2012-08-29 10:36:56
【问题描述】:

我正在使用 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 上工作

【问题讨论】:

  • &lt;#@ Assembly Name="EnvDTE.dll" #&gt; 另外,您需要使用Fusion log viewer. 进行调试,只需确保以管理员身份运行它,打开日志,然后在尝试调试之前重新启动。您将看到 CLR 在哪里寻找程序集,以及什么版本,并从那里确定为什么找不到它(如果您甚至安装了它)。
  • 使用 Fusion 登录时,EnvDTE 没有任何显示,我肯定在 2010 年和 2008 年安装了 EnvDTE,2012 年没有新版本
  • 什么都没有?这似乎很奇怪。对于 S&G,请尝试 &lt;#@ Assembly Name="C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\PublicAssemblies\envdte.dll" #&gt;(假设您可以在那里找到 EnvDTE)
  • 谢谢威尔,给它完整的路径。老实说,我不太清楚为什么我没有首先想到这一点。

标签: t4 visual-studio-2012 envdte


【解决方案1】:

VS12 似乎无法确定 EnvDTE 在哪里。奇怪的是(正如您在评论中提到的那样)融合并没有接受这一点。也许是这样,但您没有正确阅读?

顺便说一句,当融合日志让您失望时,当您无法弄清楚为什么应用程序找不到应该存在的东西时,是时候打破进程监视器了。

您可以为 T4 模板中的程序集引用提供完整路径。在你的情况下,它会是

&lt;#@ Assembly Name="C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\PublicAssemblies\envdte.dll" #&gt;

(假设您在正确的位置有 EnvDTE)。我不会认为这是一个真正的解决方案,并且会就此向 MS 提出 Connect 问题。好像是个bug。

【讨论】:

  • 我们的计划是最终远离 EnvDTE,所以现在这应该足够了。谢谢
  • 如果您需要将这些引用作为 subversion 项目的一部分提供,则无济于事
  • 是否有适用于 32 位和 64 位机器的解决方案?您的解决方案仅适用于 64 位
  • @PedroRainho:呃,从路径中删除`(x86)`?只需搜索要引用的 envdte.dll 的位置,复制路径,然后使用即可。
  • @PedroRainho:尝试使用预处理器指令?
【解决方案2】:

在偶然发现同样的错误后,我进行了更深入的搜索,发现this Microsoft Connect entry

要解决此问题,只需从程序集名称中删除 .dll 即可按预期工作:

<#@ Assembly Name="EnvDTE" #>

还要确保EnvDTE 程序集位于C:\Windows\assembly 下的GAC 中。这通常会在您在计算机上安装 Visual Studio 时自动发生。

示例

这是一个可以开箱即用的示例:

<#@ 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() #>

【讨论】:

  • 是的,在包含文件中有这个。删除扩展工作。 +1。
  • 那行不通。我已经测试过,这是结果错误 CS0006: Metadata file 'EnvDTE' could not be found
  • @PedroRainho:刚刚添加了一个在 VS2012 下没有任何问题的示例。也许它可以帮助您找到错误。
  • 好的,您的示例有效,因为您在 GAC 中有 EnvDte。但是开箱即用而不将此程序集移动到 gac,它不起作用。我无法将 envDte 移动到 gac,因为我有几十个开发人员使用 T4,我不会在所有机器上都这样做。
  • @PedroRainho:您使用哪种工具进行编码?如果您使用 Visual Studio 及其默认安装程序,它会在您安装时自动将 EnvDTE 放入 GAC。
【解决方案3】:

在加载应用程序时,我在 Visual Studio 2019 上遇到了与 EnvDTE80 相关的问题。 错误显示以下消息: "Reference.svcmap: 无法加载文件或程序集 "'EnvDTE," Version=8.0.0.0, Culture=neutral..."

我清理了解决方案并安装了 8.0.0.0 版的 nuget 包。然后重建解决方案。通过这种方式,我的视觉工作室能够加载应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2015-09-28
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多