Nuget创建对项目中程序集的特定版本的引用

本文关键字:版本 引用 程序集 创建 项目 Nuget | 更新日期: 2023-09-27 18:25:37

我的团队遇到一个问题,当使用Nuget进行包管理时,它会在我的项目中创建对dll特定版本的引用。有没有办法阻止Nuget创建这些紧密耦合的引用?

有点背景。

我们正在使用nuget来管理我们的内部共享库。程序包通常使用VS UI进行安装。Nuget包是使用.csproj文件上的Nuget.exe规范和Nuget.exe包创建的。

我们使用干线的标准分支策略,在干线上进行开发,并释放rc分支。

我们不想通过将所有包命名为x.y.z-build123来进入版本控制地狱,因为开发人员可能需要在我们的CI系统之外进行本地构建,并使用它来测试下游解决方案。对此,我们的答案是简化我们的包版本控制,即所有主干构建都是简单的x.y.z-staging,然后将rc构建命名为x.y.z。这将使开发人员能够进行本地构建,并在指向开发人员机器上存储库的nuget.exe安装的帮助下,在下游解决方案中使用他们的构建。无需更新包等

我们看到的问题是,虽然这在包级别上运行良好。生成失败,因为项目中的引用指向程序集的特定文件版本。在本地开发版本上,它不会包括版本号,但在CI服务器上会包括。

即。

一个项目有一个参考,如下所示。

版本(123)的内部版本号部分在CI服务器上与本地开发机器不同,后者通常为0。

有没有任何方法可以让nuget创建与版本无关的引用,例如只创建程序集名称,而不是这个几乎是强名称。

Nuget创建对项目中程序集的特定版本的引用

看来我已经找到了解决方案。

我创建了一个新的控制台项目,试图重新创建这个问题。添加了我最初使用的包,它是在没有版本信息的情况下添加的!

我在以前的项目中看不到任何奇怪的设置,所以开始乱搞。我通过以下步骤重新创建了这个问题。1) 将nuget包添加到项目中2) 构建3) 卸载nuget包4) 重新安装nuget包

这第四步使软件包安装到您的项目中,并提供版本信息。

归根结底,如果你的bin文件夹中已经有程序集,并且你试图添加(或卸载和重新安装)你的新引用将与版本信息一起添加到项目中。

解决方案是确保在处理nuget之前始终清洁解决方案。

可能可以通过在项目上绑定重定向来实现。

但请注意,具有相同id和版本的两个NuGet包被视为同一个包,这在设计上是

考虑这个场景:

  • 您从变更集1发布了一个包"foo.12.3.staging"
  • 我将其安装在我的解决方案中
  • 您从变更集2发布了一个包"foo.12.3.staging"(可能是一个错误修复)
  • 我的NuGet永远不会通知更新,更糟糕的是,在我的机器上构建的每个解决方案上,它都会继续使用旧的(缓存的)版本

因此,每次开发人员构建解决方案时,您都要强制他们清除NuGet缓存,以确保他们使用的是"真实"版本