2013-02-21 149 views
1

我已经编写了一个VS2012扩展以供内部使用,它简化了从当前加载的解决方案中包含的nuspec中发布和更新任何nuget包的过程。管理一个VS扩展与另一个扩展的依赖关系

我从官方的包源要做到这一点参考Nuget.Core,增加了官方的NuGet扩展扩展级依赖,然后打上我的本地参考Nuget.Core装配被列入在VSIX中。

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

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

所以我面临着两个选择:再次

  • 释放扩展,具有绑定重定向到新的版本
  • 参考距离的NuGet扩展的安装位置的DLL

但是这些都不是很理想,因为我不想在每次更新nuget时不得不重建和释放我的软件包!同样,我不想用扩展部署我的程序集副本,因为它可能会阻止主要的nuget扩展工作。

有人有任何其他选择吗?

回答

0

I tweeted this question to Luan Nguyen - 谁在Nuget产品上工作过。

正如您从响应链那里看到的,解决方案是而不是直接引用Nuget.Core,因为它不受支持。有一些由Nuget提供的服务提供商用于执行一些Nuget操作,但不是我正在寻找的东西。

因此,我已经结束了他的建议 - 抓住Nuplex源代码复制并建立程序集的本地副本(使用不同的身份,以免干扰块金扩展)。

如果将新包特性添加到Nuget中,我必须保持此更新,但如果扩展更新,它将继续工作。

另一种选择是ILMerge本地Nuget.Core到扩展名;但是它是一个WPF程序集,它们不能合并。我可以创建一个标准的卫星程序集,然后我可以合并Nuget.Core,我想。

0

由于你的扩展真的取决于Nuget,我猜想每次发布扩展的新版本的最佳选择。

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

请检查文档ServiceProvider Class作为一个标准点。

0

您需要将软件与其开发的依赖关系的精确版本进行分发。用户不能期望拥有它们。

Afaik,这是常态。为什么会打破任何东西?尝试一下。

+0

这里的问题是当其他扩展更新时,因此部署我的代码依赖的DLL(更重要的是,使用不同的汇编版本)的更新版本。这会打破我的扩展,因为它是针对较低版本构建的 - 引发.Net运行时加载错误。我无法限制我的团队在更新Nuget时不要更新它。 - 但同样我不能分发核心DLL,因为它会在更新它时破坏Nuget扩展。 – 2013-02-22 11:17:33

+0

计算机不能同时保存任何库的多个版本吗?然后您可以明确引用您需要的精确版本。 – 2013-02-22 11:25:16

相关问题