Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Nuget在项目中创建对程序集的特定版本化引用_C#_Visual Studio_Nuget_Build Automation_Nuget Package - Fatal编程技术网

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

C# Nuget在项目中创建对程序集的特定版本化引用,c#,visual-studio,nuget,build-automation,nuget-package,C#,Visual Studio,Nuget,Build Automation,Nuget Package,我的团队遇到一个问题,在使用Nuget进行包管理时,它会在我的项目中创建对特定版本dll的引用。有没有办法阻止Nuget创建这些紧密耦合的引用 一点背景知识 我们正在使用nuget管理我们的内部共享库。软件包通常使用VS UI安装。Nuget软件包是使用.csproj文件上的Nuget.exe规范和Nuget.exe包创建的 我们使用主线的标准分支策略,开发是在主干上完成的,释放rc分支 我们不想通过将所有包命名为x.y.z-build123而进入版本控制地狱,因为开发人员可能需要在CI系统之外

我的团队遇到一个问题,在使用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创建版本无关的引用,例如只创建程序集名称,而不是这个几乎强大的名称。

可能可以通过在项目中使用

但请考虑两个具有相同ID和版本的NUGET包被认为是同一个包,这是<>强>设计< <强> > /P> 考虑以下情况:

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

因此,每次开发人员构建解决方案时,您都会强制他们清除NuGet缓存,以确保他们使用的是“真实”版本。看来我已经找到了解决方案

我创建了一个新的控制台项目,试图重新创建该问题。添加了我最初使用的软件包,添加时没有版本信息

我在以前的项目中看不到任何奇怪的设置,所以开始胡闹。我可以通过以下步骤重新创建问题。 1) 将nuget包添加到项目中 2) 建造 3) 卸载nuget包 4) 重新安装nuget软件包

这第四步将使用版本信息将软件包安装到您的项目中

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


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

谢谢。这是我们长期争论的问题。两者都不理想,我现在开始考虑使用Nuget来管理内部包。