2017-04-09 1 views
1

VS2015とVS2017の両方で動作するVisual Studio拡張機能(VSIX)があります。 VSIXはMicrosoft.VisualStudio.Data.Frameworkに依存している、と私はVS2017で開発していますので、私は私のcsprojに次の行を持っている:複数のVSバージョンでVSIXのアセンブリバージョンを参照する

<Reference 
    Include="Microsoft.VisualStudio.Data.Framework, Version=15.0.0.0, 
    Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" 
/> 

ただし、ユーザーがVS2015での私の拡張機能をインストールしようとすると、彼らは当然例外を取得:

ファイルまたはアセンブリ 'Microsoft.VisualStudio.Data.Framework、Version = 15.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'またはその依存関係の1つを読み込めませんでした。

両方のVSバージョンを対象とするVSIXでMicrosoft.VisualStudio.Data.Frameworkを参照する方法を教えてください。バージョンを15から14に切り替えると、VS2015がインストールされていないため、マシン上にビルドできなくなります(VS2017にインストールするユーザーに問題があると思われます)。

+0

これを行う簡単な方法はありません。サポートされている最低バージョンに対して構築し、devenv.exe.configのbindingRedirectsを信頼して適切なバージョンをロードするか、Visual Studioの各バージョンごとに別々のvsixを構築してください。 – jessehouwing

+0

VS2017にdevenv.exe.configのリダイレクトが付属しているため、以前のバージョンの標準DLLが自動的に読み込まれるようになっていますか?もしそうなら、それはかなり満足のいく解決策です... –

+0

はいそうです。すべてのアセンブリ*が後方互換性があるわけではありません。したがって、これには広範なテストが必要です。 – jessehouwing

答えて

1

フォルダCommon7 \ IDEでのVS 2017のdevenv.exe.configファイルは、この結合15.0.0.0へバージョン14.0.0.0からMicrosoft.VisualStudio.Data.Frameworkのためのリダイレクトがありますので、

<dependentAssembly> 
    <assemblyIdentity name="Microsoft.VisualStudio.Data.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> 
    <bindingRedirect oldVersion="8.0.0.0-14.0.0.0" newVersion="15.0.0.0"/> 
</dependentAssembly> 

あなたプロジェクトはバージョン14.0.0.0を参照する必要があります。どこから? 2つの方法があります:

  1. NuGet package to get Microsoft.VisualStudio.Data.Frameworkを使用してください。

  2. フォルダを作成し、Microsoft.VisualStudio.Data.Frameworkバージョン14.0.xを内部に配置し、フォルダをプロジェクトとともにソースコントロールに追加します(バージョン15.xではなくバージョン14.0.xを参照してください)。

+0

私はそれを取得しません。 VS 2015では14.0.0.0、VS 2017では15.0.0.0を使用する必要があります.VidxプロジェクトではbindingRedirectのために常に15.0.0.0を使用しませんか? – sotn

+0

VSIXは、パッケージDLLの展開メカニズムです。パッケージDllプロジェクトは、VS 2015およびVS 2017で動作するには、バージョン14.0.0.0を参照する必要があります.VSIXは、VS 2015およびVS 2017に独立してパッケージを展開します.VS 2015は、14.0.0.0を使用します。 VS 2017は14.0.0.0を15.0.0.0にリダイレクトします –

関連する問題