管理一个VS扩展的依赖关系

时间:2013-02-21 15:37:14

标签: .net visual-studio-2012 nuget vsix

我编写了一个VS2012扩展供内部使用,它简化了从当前加载的解决方案中包含的nuspecs发布和更新任何nuget包的过程。

我从官方包源中引用了Nuget.Core来执行此操作,在官方nuget扩展上添加了扩展级别依赖项,然后标记了我对Nuget.Core程序集的本地引用将被包含在VSIX中。

直到昨天,当nuget被更新时,这一切都很好 - 现在我的扩展程序根本无法工作,因为它无法加载此核心程序集的旧版本(版本号始终更改)。

我刚尝试从nuget获得新版本,但尚未发布。

所以我面临几个选择:

  • 再次释放扩展程序,绑定重定向到较新版本
  • 从nuget扩展程序的安装位置引用DLL

但这些都不是理想的,因为我不想在nuget也更新的时候继续重建和发布我的包!同样,我不想使用扩展名部署我的程序集副本,因为它可以阻止主要的nuget扩展程序工作。

有人给我任何其他选择吗?

3 个答案:

答案 0 :(得分:0)

由于您的扩展实际上取决于Nuget,我想每次都是发布新版扩展的最佳选择。

关于VS可扩展性本身,据我所知,有一种方法可以使用ServiceProvider在扩展之间进行通信。您可以共享您的服务,也可以获得共享服务。因此,如果Nuget提供任何服务,您可以尝试通过它们使用它。

请查看ServiceProvider Class的文档作为标准点。

答案 1 :(得分:0)

您需要使用您针对其开发的依赖项的精确版本来分发您的软件。不能指望用户拥有它们。

Afaik,这是常态。它为什么会破坏任何东西?试试吧。

答案 2 :(得分:0)

I tweeted this question to Luan Nguyen - 遍布Nuget产品的人。

正如您从响应链中看到的那样,解决方案直接引用Nuget.Core,因为它不受支持。 Nuget提供服务提供商来完成一些Nuget操作,但不是我想要的东西。

所以,我最终得到了他的建议 - 从codeplex中获取Nuget源并构建程序集的本地副本(具有不同的标识,因此它不会干扰块扩展)。

如果新的软件包功能被添加到Nuget,我必须保持更新,但如果扩展更新,它将继续工作。

另一种选择是ILMerge将本地Nuget.Core放入扩展名;但它是一个WPF程序集,它们无法合并。我本来可以创建一个标准的卫星装配,然后我可以合并Nuget.Core我想。