在具有多个 VS 版本的 VSIX 中引用程序集版本

Referencing assembly versions in VSIX with multiple VS versions

我有一个 Visual Studio 扩展 (VSIX),可以在 VS2015 和 VS2017 中使用。 VSIX 依赖于 Microsoft.VisualStudio.Data.Framework,并且由于我在 VS2017 上开发,所以我的 csproj 中有以下行:

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

但是,当用户尝试在 VS2015 中安装我的扩展时,他们可以理解地遇到异常:

Could not load file or assembly 'Microsoft.VisualStudio.Data.Framework, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.

我应该如何在针对两个 VS 版本的 VSIX 中引用 Microsoft.VisualStudio.Data.Framework?如果我将版本从 15 切换到 14,我将无法再在我的机器上构建,因为未安装 VS2015(而且我还怀疑在 VS2017 中安装的用户会出现问题)。

文件夹 Common7\IDE 中 VS 2017 的 devenv.exe.config 文件具有针对 Microsoft.VisualStudio.Data.Framework 从版本 14.0.0.0 到 15.0.0.0 的绑定重定向:

<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版本。来自哪里?两种方法:

  1. 使用一个NuGet package to get Microsoft.VisualStudio.Data.Framework。 (确保参考版本 14.0.x,而不是版本 15.x)

  2. 创建一个文件夹,放入 Microsoft.VisualStudio.Data.Framework 版本 14.0.x 并将该文件夹与您的项目一起添加到源代码管理中。