Nuget在构建服务器上还原软件包的方式不同

时间:2018-12-06 18:51:47

标签: msbuild nuget

本地开发者计算机按如下方式还原软件包:

  

.. \ Microsoft.Extensions.Configuration.UserSecrets.2.1.1 \ ..

但是构建服务器在还原nuget软件包时会将其中一些更改为

  

.. \ microsoft.extensions.configuration.usersecrets \ 2.1.1 \ ..

使用小写字母并更改文件夹结构。为解决方案执行MSBuild时,由于文件夹结构不同,因此找不到所需的文件。 我认为这可能是nuget.config问题,但我不确定。

编辑:csproj文件具有一个条件,用于检查基础依赖项(microsoft.extensions.configuration.usersecrets)是否在正确的文件夹路径中。如果它不在正确的文件夹路径中,则它将引发生成错误。

2 个答案:

答案 0 :(得分:0)

使用结构packages\PackageId.Version\的packages文件夹,我相信是“ v2”提要,而packages\packageid\version\是“ v4”提要。当NuGet将包添加到源时,它将尝试在添加新包之前检测源版本,并且对于packages.config项目默认为V2源。全局程序包文件夹应始终为V4,但packages.config项目将还原到解决方案程序包文件夹,该文件夹通常为V2。

所以我猜测您的解决方案具有packages.config项目,但解决方案的packages文件夹在构建服务器上并非为空,并且NuGet将其检测为v4提要,而不是v2提要。

我建议确保解决方案包文件夹指向您的存储库中的文件夹。将其设置为.. \ packages之类的内容以逃避您的回购,这意味着在您的构建影响您之前,在构建代理上运行其他构建的风险会增加。另外,您的构建脚本可以在还原之前删除解决方案软件包文件夹,以确保其中的任何内容都不会对您的构建产生负面影响。

如果这些建议没有帮助,了解构建服务器上正在使用的nuget版本以及本地计算机上正在使用的nuget版本将很有用。

答案 1 :(得分:0)

我没有确认完全从csproj文件中删除针对特定nuget引用的条件检查,而是检查并确认该软件包不在任何文件夹结构位置中,以便它既支持开发人员环境,也支持构建环境。