gpt4 book ai didi

c# - Jenkins 未使用新的 MSBuild 恢复目标恢复 NuGet 包

转载 作者:行者123 更新时间:2023-12-02 00:25:17 28 4
gpt4 key购买 nike

我们有一个 .net 完整框架 WPF 应用程序,已从 .net 4.6.2 迁移到 4.7.1,并在 csproj 文件中更改为 PackageReference而不是packages.config。

在开发计算机上构建似乎没问题,并且下载并恢复了包,但是当我们使用 Jenkins 在 Windows Server 2012 构建服务器上构建时,nuget 包似乎没有恢复正确。

我们使用 MSBuild v15.5 和最新的“msbuild/restore” 命令在构建时恢复包。注意:使用以前调用“nuget Restore”的方式确实有效,但我们应该能够使用 msbuild /restore now .

包恢复过程似乎正在查看正确的 NuGet 服务器,并且似乎完成了恢复而没有错误(这是在 Jenkins 上编译的测试解决方案,用于隔离问题):

Restore:
Restoring packages for c:\Jenkins\workspace\Test\ConsoleApp1\ConsoleApp1.csproj...
Committing restore...
Generating MSBuild file c:\Jenkins\workspace\Test\ConsoleApp1\obj\ConsoleApp1.csproj.nuget.g.props.
Generating MSBuild file c:\Jenkins\workspace\Test\ConsoleApp1\obj\ConsoleApp1.csproj.nuget.g.targets.
Writing lock file to disk. Path: c:\Jenkins\workspace\Test\ConsoleApp1\obj\project.assets.json
Restore completed in 577.05 ms for c:\Jenkins\workspace\Test\ConsoleApp1\ConsoleApp1.csproj.

NuGet Config files used:
c:\Jenkins\workspace\Test\NuGet.Config
C:\Windows\system32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config

Feeds used:
http://devbuild/NuGetHost/nuget
https://api.nuget.org/v3/index.json
Done Building Project "c:\Jenkins\workspace\Test\ConsoleApp1.sln" (Restore target(s)).

但是当 msbuild 编译代码时,我们收到以下错误,看起来 NuGet 尚未下载:

CSC : error CS0006: Metadata file 'C:\Windows\system32\config\systemprofile\.nuget\packages\log4net\2.0.8\lib\net45-full\log4net.dll' 
could not be found [c:\Jenkins\workspace\Test\ConsoleApp1\ConsoleApp1.csproj]

知道为什么 nuget 包没有恢复吗?

最佳答案

经过几个小时的搜索和筛选 NuGet 问题帖子并过滤掉 .net core 噪音,我找到了解决办法!

根据一些NuGet和 msbuild msbuild使用 NuGet(或 msbuild/restore)恢复时出现的问题在 Windows Server 2012 中的本地系统帐户下,NuGet 使用的文件夹无法访问,或者由于正在运行的 32 位进程与 64 位进程不同,因此它无法将 nuget 下载到该本地缓存文件夹。

msbuild 在编译时要查看的这个文件夹似乎是 C:\Windows\system32\config\systemprofile\.nuget\packages

我们的解决方案是使用系统范围环境变量 NUGET_PACKAGES 将 NuGet 包缓存文件夹设置为不同的可访问文件夹,例如 C:\NugetPackageCache例如

NUGET_PACKAGES=C:\NugetPackageCache

您还可以通过将构建环境->将环境变量注入(inject)到构建过程->属性内容设置为每个 Jenkins 项目来设置此内容:

NUGET_PACKAGES=C:/NugetPackageCache

根据此 NuGet issue post 的另一个潜在解决方案就是将环境变量设置为msbuild正在寻找nugets的文件夹即

NUGET_PACKAGES=C:\Windows\system32\config\systemprofile\.nuget\packages

注意:环境变量优先于 NuGet。他们似乎没有更新 NuGet docs还没有mention the precedence .

注意:要注入(inject)/设置环境变量,我们使用 EnvInject Jenkins 插件如下所示:

Jenkins plugin with environment variables

关于c# - Jenkins 未使用新的 MSBuild 恢复目标恢复 NuGet 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48896486/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com