由于缺少元数据dll,.NET Framework项目4.5.2在Jenkins中构建失败。

3
无法使用Jenkins构建.NET Framework解决方案。
我遇到了一个错误,它说:CSC:error CS0006:元数据文件“..\packages\Microsoft.CodeAnalysis.Analyzers.1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll”无法找到[C:\Users\...\.jenkins\workspace\...\My.Site.csproj]。它包括一个主项目和另外两个项目(API和Tests),所有项目都针对.NET Framework 4.5.2。API项目曾经是NuGet包,因为当我尝试更新CodeAnalysis堆栈时,我会得到如下提示:无法解析依赖项'Api.For.MySite'。使用的来源:'nuget.org'、'Microsoft Visual Studio离线包'、'Package source'
我尝试过:
  1. 设置NUGET_PACKAGES变量,使用Windows方式以及Jenkins EnvIject插件,将其设置为C:\NugetCache/C:\Windows\system32\config\systemprofile\.nuget\packages,如此处所述。
  2. 为API本身创建NuGet包,但没有运气。

我的配置如下:

  1. Jenkins 2.361.2,安装了最新的插件(MSBuild和git)
  2. 存储库是本地的:“file://C:/.../MySite”
  3. /p:Platform=AnyCPU;Configuration=Debug;PublishDestination="C:\inetpub\wwwroot\MySite (mysite.Site.com)" /restore
  4. 我使用的MSBuild位于C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64

还能尝试什么?Jenkins需要读和写吗?当前文件只读属性旁边的框已被选中。隐藏文件夹属性未选中,这是可以接受的。

2022年10月24日更新:
在第3步提到的构建步骤之前,需要先还原包。现在在Jenkins中使用的命令是/t:restore /p:RestorePackagesConfig=true;SolutionDir="${WORKSPACE}"。现在出现了以下错误:
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets(132,5): error : Unable to find version 'X.Y.Z.W' of package 'MyPackage'. [C:\Users\user.name\.jenkins\workspace\mySite\mySite.csproj] C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets(132,5): error : C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'MyPackage.X.Y.Z.W' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'. [C:\Users\user.name\.jenkins\workspace\mCloud\mySite\mySite.csproj] C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets(132,5): error : https://api.nuget.org/v3/index.json: Package 'MyPackage.X.Y.Z.W' is not found on source 'https://api.nuget.org/v3/index.json'。
配置路径和(离线)包位置如下:
NuGet 配置文件:
  1. C:\Windows\system32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config
  2. C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.FallbackLocation.config
  3. C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config
使用的源如下:
  1. C:\Users\user.name\Desktop\MyPackageFolder(我的软件包在这里)

  2. https://api.nuget.org/v3/index.json

  3. C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\(我的软件包也在这里)
    其中一个软件包是针对.NET框架4的。我也按照相同的nuget软件包文件夹/文件结构制作了'MyPackage',但仍然没有成功。
    还有两个额外的软件包,在Jenkins控制台输出中给我带来了相同的错误,但项目如果没有安装这两个软件包也可以(重新)构建。
    我注意到的一件事是上述nuget软件包(至少其中一个)是针对框架4而不是4.5.2,但这仍然不能解释为什么只有在Jenkins中会出现问题,而在Visual Studio中则没有。
    我承认现在我面临的问题非常混乱,但我不知道该去哪里或者现在该做什么或如何以最高效的方式恢复。


你是如何将你的包添加到 MyPackageFolder 和/或 Microsoft SDKs\NuGetPackages 中的?你从哪里获取这个包?Jenkins CI代理在构建之间是否被清除?你能否在HTTP服务器上设置私有NuGet源,而不需要将包复制到解决方案构建所在的每台机器上?这个问题似乎非常特定于你的设置,因此很难给出通用的解决建议。 - zivkan
1个回答

1
在 NuGet 在 2016 年左右添加 PackageReference 之前,无法通过 msbuild 进行还原。当添加了 PackageReference 后,msbuild restore 只会还原 PackageReference 项目,而不是 packages.config 项目,这可能是因为过度谨慎以避免可能的破坏性变化。因此,在 VS 16.5 (VS 2019) 中才添加了对 packages.config 的 msbuild restore,但即使如此,它也是一个可选择的开关。
提到路径“..\packages\”的错误消息告诉我该项目正在使用 packages.config 而不是 PackageReference。
因此,除非您在 CI 中有单独的 nuget.exe restore 步骤,否则您需要通过 -p:RestorePackagesConfig=true 来选择 msbuild restore,具体请参见此处的文档:https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#restoring-packagereference-and-packagesconfig-projects-with-msbuild
个人建议在您的构建中拥有单独的恢复和构建步骤,而不是在同一步骤中同时进行恢复和构建,这样可以使每个步骤的日志更短,并且当某些步骤失败时,失败的步骤会给您更多有关可能失败的信息(恢复失败?哦,这可能是网络问题。构建失败?我可能在提交中有无效的语法)。

我执行了命令,但是之前还是得到了相同的错误。 - SH4NNY1
我运行了命令,但是之前还是得到了相同的错误。我也加了/t:restore标志并且得到了这个信息:C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets(132,5): error : No solution found. Restore against a solution or pass in /p:SolutionDir [C:\Users\user.name\.jenkins\workspace\mySite\MySite\MySite.csproj] - SH4NNY1
我更新了问题,并添加了一些我自己的发现,但我不确定它们是否对某些事情有贡献。 - SH4NNY1
我授予您赏金,因为您至少提供了一些提示,这些提示让我有了一些进展。不幸的是,我仍然没有找到解决问题的方法。 - SH4NNY1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接