1

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

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

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

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

所以我面临着几个选择:

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

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

有人给我其他选择吗?

4

3 回答 3

0

由于您的扩展确实依赖于 Nuget,我想每次发布新版本扩展的最佳选择。

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

请检查ServiceProvider 类的文档作为一个策略点。

于 2013-02-22T10:33:36.240 回答
0

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

阿法克,这是常态。为什么它会破坏任何东西?试试看。

于 2013-02-22T10:38:05.650 回答
0

我将这个问题发给了 Luan Nguyen,他在 Nuget 产品中工作。

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

因此,我最终遵循了他的建议——从 codeplex 中获取 Nuget 源并构建程序集的本地副本(具有不同的身份,因此它不会干扰 nugget 扩展)。

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

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

于 2013-02-22T11:29:19.973 回答