首页 > 解决方案 > 如果版本号为零,Nuget 包还原将跳过版本号的修订部分

问题描述

我有一个项目的包配置文件

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Stylesoft.Common.Dev" version="1.0.1.0" targetFramework="net461" />
</packages>

并且在 csproj 文件中像这样引用包 dll

<Reference Include="Stylesoft.Common.Dev, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL">
   <HintPath>..\..\..\..\..\SharedPackages\Stylesoft.Common.Dev.1.0.1.0\lib\net40\Stylesoft.Common.Dev.dll</HintPath>
</Reference>

之前这曾经工作,因为 nuget 用于恢复此文件夹中的包,Stylesoft.Common.Dev.1.0.1.0但我不知道发生了什么变化,但现在 nuget 跳过版本的修订号,现在它创建名称Stylesoft.Common.Dev.1.0.1跳过最后一个零的文件夹,所以我得到编译错误,因为项目试图检查这个路径中的 dll

..\..\..\..\..\SharedPackages\Stylesoft.Common.Dev.1.0.1.0\lib\net40\Stylesoft.Common.Dev.dll

我无法弄清楚发生了什么变化以及如何使其恢复与之前相同的文件夹结构中的包

任何帮助,将不胜感激!

标签: asp.net.netnuget-package-restore

解决方案


我遇到了同样的问题。原因可能是 nuget.exe 版本已更新并且现在正在下载不包括路径中的修订版的包,或者是托管包的位置发生了更改。在将源代码从 TFS 迁移到 Azure DevOps 时,我不确定是哪一个。所以构建管道是不同的,并且包在一个新的提要上。

我觉得最好的解决方案是让 Visual Studio 中的项目以服务器构建所期望的方式在本地工作。因此,当它正在查找文件夹中的包时,不包括其名称中的修订号,这就是它们应该在的位置。

所以解决方法是使用相同的提要和 nuget 客户端重新安装包。Visual Studio 包管理器应将包安装到正确的位置。因此,您可以确保您拥有正确的版本,或者只是希望一切正常并继续以下操作:

  1. 从包文件夹中删除所有包(希望您的所有项目都使用相同的文件夹,否则这可能很费力)。
  2. 从 Visual Studio 中清除您的 nuget 包缓存(在工具 -> 选项 -> Nuget 包管理器下有一个按钮可以执行此操作)
  3. 在 Visual Studio 中,打开 nuget 包管理器控制台。
  4. 运行“更新包-重新安装”

这可能需要一些时间,具体取决于您拥有多少包和项目,但这有望确保您的项目参考提示路径与包的安装位置匹配。


推荐阅读