2016-08-25 182 views
3

最近在我们公司,我们决定将我们公司开发的库文件上传到专用的NuGet服务器。在版本号开始增长之前,一切似乎都没有问题。使用我们的NuGet库的解决方案停止正确构建,并且我们认为版本控制是问题所在。Nuget依赖关系版本

下面是这种情况:

enter image description here

这是与包的参考图(你可以看到他们彼此之间的参考资料)

1)在溶液小号你从私人的NuGet服务器安装例如图书馆A,B,E所有版本号为1.0.0.0

2)您在一个的变化,增加了它的版本号1.0.0.1

3)你从NuGet包管理器解决方案小号更新库一个到版本1.0.0.1

4)你用的一个一个两个版本尽头了(1.0.0.1)和一个B,E(1.0.0.0)

5)在溶液小号,Visual Studio中(测试Ò n 2012,2015 Professional)显示找不到该参考,并且希望重新安装该软件包。当你这样做的时候,但是当你承诺下一个人的构建失败时......

一些(丑陋的?)变通办法不会将包引用为NuGet,而是将引用嵌入到dll中。或在所有引用一个包去,更新它,改变它的版本,然后更新小号,女巫听起来可怕的很多工作..

而且should't它只是因为当你的参考著作一个NuGet包,你没有指定特定的版本,但> =版本?

或者我们是否全都做错了?

谢谢!

回答

3

在你的情况,也有解决问题的两个方面,当相关程序包A升级到版本1.0.0.1。

  1. 重定向程序集版本的应用水平。 您可以手动编辑应用程序配置文件,以将应用程序使用的程序集的旧版本重定向到新版本。然后,应用配置文件中的示例配置代码如下所示。详细介绍有关重定向集版本,请参考:https://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.110).aspx#Anchor_2
<dependentAssembly> 
     <assemblyIdentity name="someAssembly" 
      publicKeyToken="32ab4ba45e0a69a1" 
      culture="en-us" /> 
     <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" /> 
    </dependentAssembly> 
  • 分配时打包NuGet包依赖关系范围。 由于您的软件包B依赖于软件包A并且软件包A的版本发生更改,因此可以使用以下代码为软件包B的.nuspec文件中的软件包A分配依赖性范围。当您的解决方案S上安装了较高版本的软件包A时,软件包B将使用安装的较高版本。在你的情况下,当安装包A 1.0.0.1时,包B将依赖于包A 1.0.0.1。
  • <dependencies> 
        <dependency id="Package A" version="[1.0.0.0, higher version)" /> 
    </dependencies>