visual studio 扩展如何在引用 TFS 客户端 dll 时同时针对 2013 年和 2015 年
How can a visual studio extension target both 2013 and 2015 while referencing TFS client dlls
我有一个 visual studio 扩展(部署为 .vsix)需要同时支持 Visual Studio 2013 和 2015。
问题是扩展需要与 TFS 通信,因此它使用 TFS 客户端库,在 VS2015 中,这些已从部署 GAC 更改为 消费应用程序应重新分发。
我应该如何设置我的 VS 包的引用,以便它适用于 Visual Studio 的两个版本?
我尝试了几种方法:
- 引用2013 GAC dll的:在VS2015机器上加载时,找不到这些DLL。
- 参考 2013 GAC dll 但也是本地复制(与 .vsix 捆绑):缺少这些 DLL 的其他一些依赖项。
- 参考 2015 dll(来自 nuget)和与 .vsix 的捆绑:在 2013 年和 2015 年都可以正常加载,但在 2013 年不起作用(实际上使用 TFS 功能失败 - 例如调用
GetLocalWorkspaceInfo("c:\src\path")
returns空)
我会:
- 引用 2013 程序集,以确保仅使用该版本中可用的 API。 (当然,2015 版是向后兼容的。)
- 添加一个
AssemblyResolve
挂钩,这样当 2013 程序集无法加载时,您可以加载 2015 程序集来代替 2013 程序集。 Instructions for previous versions are available,但应该差不多。
我认为选项 3 基本可行,但找不到您的工作区的原因是 2013 年和 2015 年使用不同的工作区缓存。我怀疑您 可以 通过建立另一个到服务器的连接并将工作区缓存更新到 2015 年的位置来克服这个问题。尽管这指出了更深层次的兼容性问题:您将无法为 VS connection/workspace 对象连接事件监听器。
我有一个 visual studio 扩展(部署为 .vsix)需要同时支持 Visual Studio 2013 和 2015。
问题是扩展需要与 TFS 通信,因此它使用 TFS 客户端库,在 VS2015 中,这些已从部署 GAC 更改为
我应该如何设置我的 VS 包的引用,以便它适用于 Visual Studio 的两个版本?
我尝试了几种方法:
- 引用2013 GAC dll的:在VS2015机器上加载时,找不到这些DLL。
- 参考 2013 GAC dll 但也是本地复制(与 .vsix 捆绑):缺少这些 DLL 的其他一些依赖项。
- 参考 2015 dll(来自 nuget)和与 .vsix 的捆绑:在 2013 年和 2015 年都可以正常加载,但在 2013 年不起作用(实际上使用 TFS 功能失败 - 例如调用
GetLocalWorkspaceInfo("c:\src\path")
returns空)
我会:
- 引用 2013 程序集,以确保仅使用该版本中可用的 API。 (当然,2015 版是向后兼容的。)
- 添加一个
AssemblyResolve
挂钩,这样当 2013 程序集无法加载时,您可以加载 2015 程序集来代替 2013 程序集。 Instructions for previous versions are available,但应该差不多。
我认为选项 3 基本可行,但找不到您的工作区的原因是 2013 年和 2015 年使用不同的工作区缓存。我怀疑您 可以 通过建立另一个到服务器的连接并将工作区缓存更新到 2015 年的位置来克服这个问题。尽管这指出了更深层次的兼容性问题:您将无法为 VS connection/workspace 对象连接事件监听器。