Nuget依赖版本

时间:2016-08-25 10:02:08

标签: .net visual-studio nuget

最近在我们公司,我们决定将我们公司开发的库文件上传到私人NuGet服务器。在版本号开始增长之前,一切似乎都很好。使用我们的NuGet库的解决方案已经停止正确构建,我们认为版本控制就是问题所在。

以下是该方案:

enter image description here

这是一个带有包的引用的图表(你可以看到它们之间有引用)

1)在解决方案 S 中,您从私有NuGet服务器安装,例如库 A,B,E ,所有版本号均为 1.0.0.0

2)您在 A 中进行了更改,并将其版本号增加为 1.0.0.1

3)您将库 A 从解决方案 S 中的NuGet包管理器更新为版本 1.0.0.1

4)你最终有两个版本的 A 一个 S (1.0.0.1)和一个 B,E (1.0。 0.0)

5)在解决方案 S 中,Visual Studio(在2012年,2015专业版上测试)显示找不到引用,并且想要重新安装软件包。当你这样做时,它会构建,但当你提交下一个人的构建失败时......

一些(丑陋?)解决方法不是将包引用为NuGet,而是将引用嵌入到dll中。或者进入所有引用 A 的软件包,更新它,更改其版本然后更新 S ,这听起来很糟糕......

并且它应该正常工作,因为当您引用NuGet包时,您没有指定特定版本但是> =版本?

或者我们做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

在您的情况下,当从属程序包A升级到版本1.0.0.1时,有两种方法可以解决此问题。

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