0

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

一点背景。

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

我们使用标准的主线分支策略 dev 在主干上完成并释放 rc 分支。

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

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

IE。

一个项目有一个类似下面的引用。

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

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

4

2 回答 2

1

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

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

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

第 4 步使用版本信息将包安装到您的项目中。

这一切归结为,如果您的 bin 文件夹中已经有程序集,并且您尝试添加(或卸载并重新安装)您的新引用将被添加到带有版本信息的项目中。

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

于 2013-07-31T19:36:21.787 回答
0

可能这个技巧可以通过项目上的绑定重定向来实现。

但是请考虑两个具有相同 id 和版本的 NuGet 包被认为是同一个包,这是设计使然

考虑这种情况:

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

所以你强迫你的开发人员在每次构建解决方案时清除 NuGet 缓存,只是为了确保他们使用的是“真实”版本

于 2013-07-31T18:57:31.293 回答