我编写了一个VS2012扩展供内部使用,它简化了从当前加载的解决方案中包含的nuspecs发布和更新任何nuget包的过程。
我从官方包源中引用了Nuget.Core来执行此操作,在官方nuget扩展上添加了扩展级别依赖项,然后标记了我对Nuget.Core程序集的本地引用将被包含在VSIX中。
直到昨天,当nuget被更新时,这一切都很好 - 现在我的扩展程序根本无法工作,因为它无法加载此核心程序集的旧版本(版本号始终更改)。
我刚尝试从nuget获得新版本,但尚未发布。
所以我面临几个选择:
但这些都不是理想的,因为我不想在nuget也更新的时候继续重建和发布我的包!同样,我不想使用扩展名部署我的程序集副本,因为它可以阻止主要的nuget扩展程序工作。
有人给我任何其他选择吗?
答案 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我想。