我的团队遇到了一个问题,当使用Nuget进行包管理时,它会在我的项目中创建对dll的特定版本的引用。有没有办法阻止Nuget创建这些紧密耦合的引用?
有点背景。
我们正在使用nuget来管理我们的内部共享库。通常使用VS UI安装软件包。 Nuget包是使用.csproj文件中的nuget.exe规范和nuget.exe包创建的。
我们使用主干开发的标准分支策略在主干上完成并释放rc分支。
我们不想通过命名所有软件包x.y.z-build123进入版本控制地狱,因为开发人员可能需要在我们的CI系统之外进行本地构建并使用它来测试下游解决方案。我们的答案是通过说所有主干版本只是xyz-staging来简化我们的包版本,然后将rc构建命名为xyz这将使dev能够进行本地构建并在nuget.exe安装的帮助下指向dev的机器上的存储库使用它们在下游解决方案中的构建。无需更新包等。
我们看到的问题是虽然这在包级别上运行良好。构建失败,因为项目中的引用是程序集的特定文件版本。在本地开发版本中哪个不包含内部版本号,但在CI服务器上它将包含。
即
项目的引用类似于以下内容。
版本(123)的内部版本号部分在CI服务器上与本地开发机器不同,通常为0。
有没有办法让nuget创建与版本无关的引用,例如只是汇编名称而不是这个几乎强大的名称。
答案 0 :(得分:1)
看来我找到了解决方法。
我创建了一个新的控制台项目,试图重新创建该问题。添加了我最初使用的软件包,它是在没有版本信息的情况下添加的!
我在上一个项目中看不到任何奇怪的设置,所以开始乱搞。我能够通过以下步骤重新创建该问题。 1)将nuget包添加到您的项目中 2)建立 3)卸载nuget包 4)重新安装nuget包
第4步使用版本信息将软件包安装到您的项目中。
这一切归结为,如果您的bin文件夹中已有程序集并且您尝试添加(或卸载并重新安装),则新的引用将添加到包含版本信息的项目中。
解决方案是确保在处理nuget之前始终清理解决方案。
答案 1 :(得分:0)
可以通过项目上的binding redirects来制作技巧。
但请注意,具有相同ID和版本的两个NuGet包被认为是相同的包,这是按设计。
考虑这种情况:
所以你强迫开发人员在每次构建解决方案时清除NuGet缓存,只是为了确保他们使用“真实”版本