16

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で機能させるために、別の方法で行う必要があることはありますか?

4

3 に答える 3

17

VS12はEnvDTEがどこにあるかを理解できないようです。(コメントで述べたように)フュージョンがそれを理解しなかったのは奇妙なことです。おそらくそれはしましたが、あなたはそれを正しく読んでいませんでしたか?

余談ですが、フュージョンログで失望した場合は、アプリケーションがそこにあるべきものを見つけられない理由がわからないときに、プロセスモニターを起動します。

T4テンプレートでアセンブリ参照のフルパスを指定できます。あなたの場合、それは

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

(正しい場所にEnvDTEがあると仮定します)。私はこれを真の解決策とは考えておらず、これについてMSとの接続の問題を開きます。バグのようです。

于 2012-08-29T16:06:15.880 に答える
16

同じエラーについてつまずいた後、もう少し深く検索したところ、この Microsoft Connect エントリが見つかりました。

この問題を解決するには.dll、アセンブリ名から を削除するだけで、期待どおりに機能します。

<#@ Assembly Name="EnvDTE" #>

また、EnvDTEアセンブリが の下の GAC 内にあることを確認しC:\Windows\assemblyます。これは通常、マシンに 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() #>
于 2013-05-24T13:53:04.603 に答える
0

アプリケーションのロード中に、Visual Studio 2019 で EnvDTE80 に関連する問題に直面していました。エラーで次のメッセージが表示されました:

ソリューションをクリーンアップし、バージョン 8.0.0.0 の nuget パッケージをインストールしました。次に、ソリューションを再構築しました。このようにして、私のビジュアル スタジオはアプリケーションを読み込むことができました。

于 2020-09-03T16:10:47.650 に答える