Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 管理一个VS扩展对另一个VS扩展的依赖关系_.net_Visual Studio 2012_Nuget_Vsix - Fatal编程技术网

.net 管理一个VS扩展对另一个VS扩展的依赖关系

.net 管理一个VS扩展对另一个VS扩展的依赖关系,.net,visual-studio-2012,nuget,vsix,.net,Visual Studio 2012,Nuget,Vsix,我已经为内部使用编写了一个VS2012扩展,它简化了从当前加载的解决方案中包含的NUSPEC发布和更新任何nuget包的过程 为此,我引用了官方软件包源中的Nuget.Core,在官方Nuget扩展上添加了扩展级别依赖项,然后将我对Nuget.Core程序集的本地引用标记为不包含在VSIX中 直到昨天nuget被更新之前,这一切都很好——现在我的扩展根本无法工作,因为它无法加载此核心程序集的旧版本(版本号总是更改) 我刚刚尝试从nuget获得新版本,但尚未发布 因此,我面临着两个选择: 再次释

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

为此,我引用了官方软件包源中的Nuget.Core,在官方Nuget扩展上添加了扩展级别依赖项,然后将我对Nuget.Core程序集的本地引用标记为不包含在VSIX中

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

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

因此,我面临着两个选择:

  • 再次释放扩展,绑定重定向到新版本
  • 从nuget扩展的安装位置引用DLL
但这两个似乎都不理想,因为我不想在nuget更新时继续重建和发布我的包!同样,我也不想部署带有扩展的程序集副本,因为它可能会停止主nuget扩展的工作


有人给我其他选择吗

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

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


请查看文档以了解作为分层点的。您需要分发您的软件及其开发所依据的依赖项的精确版本。不能期望用户拥有它们

好了,这是正常的。为什么它会打破任何东西?试试看。

-他在Nuget产品的各个部门工作

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

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

如果在Nuget中添加了新的包特性,我必须保持更新,但是如果扩展被更新,它将继续工作


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

这里的问题是当另一个扩展被更新时,从而部署我的代码所依赖的DLL的更新版本(关键是使用不同的程序集版本)。这会破坏我的扩展,因为它是针对较低版本构建的-抛出.Net运行时加载错误。我不能限制我的团队在Nuget发布时不更新它。-但同样地,我不能分发核心DLL,因为当他们更新它时,它会破坏Nuget扩展。计算机不能同时保存任何库的多个版本吗?然后可以显式引用所需的精确版本。