如何使Visual Studio扩展同时针对2013和2015版本,并引用TFS客户端dll?

3

我有一个Visual Studio扩展(部署为.vsix),需要支持Visual Studio 2013和2015。

问题在于,该扩展需要与TFS通信,因此它使用TFS客户端库,在VS2015中,这些库从GAC部署更改为nuget包,消费应用程序应重新分发。

我该如何设置我的VS软件包的引用以使其在两个版本的Visual Studio上运行?


我尝试过几种方法:

  1. 引用2013 GAC dll:在VS2015机器上加载时,无法找到这些DLL。
  2. 引用2013 GAC dll但也进行复制(与.vsix捆绑):那些DLL的某些其他依赖项丢失了。
  3. 引用2015 dll(来自nuget)并与.vsix捆绑:在2013和2015中都可以正常加载,但在2013中无法工作(实际上使用TFS功能会失败 - 例如调用GetLocalWorkspaceInfo("c:\src\path")会返回null)
1个回答

2
我会:
  1. 参考2013汇编,以确保您仅使用该版本中可用的API。(当然,2015年是向后兼容的。)
  2. 添加一个AssemblyResolve钩子,以便在无法加载2013汇编时加载2015汇编。以前版本的说明可用,但应类似。
我认为选项3大部分会起作用,但您的工作区无法找到的原因是因为2013和2015使用不同的工作区缓存。我怀疑您可以通过建立与服务器的另一个连接并将工作区缓存更新到2015位置来克服这个问题。虽然这指向了更深层次的兼容性问题:您将无法连接VS连接/工作区对象的事件侦听器。

我是否仍应将2015程序集与扩展捆绑在一起,或者我可以保证它们已经随vs2015安装了? - Isak Savo
它们与每个2015 SKU一起安装 - 我建议您使用它们。 - Edward Thomson
谢谢。这种方法听起来应该是可行的,所以我接受了答案,尽管我们最终采取的方法是提供两个单独的扩展 - 一个用于vs2013,另一个用于vs2015。 - Isak Savo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接