由于缺少元数据dll,.NET Framework项目4.5.2无法在Jenkins中生成

z6psavjg  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(179)

bounty将在3天后过期。回答此问题可获得+350的声望奖励。SH4NNY1希望吸引更多人关注此问题:我的期望是,他能够提供一个令人满意的答案,解决问题的多个答复,并解释如何解决这种未来的错误在一个系统的所有方式。好的文章也欢迎有关jenkins和.NET,但不是强制性的。

无法使用Jenkins生成.NET Framework解决方案。
我得到一个错误,显示CSC : error CS0006: Metadata file '..\packages\Microsoft.CodeAnalysis.Analyzers.1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll' could not be found [C:\Users\...\.jenkins\workspace\...\My.Site.csproj]。它包括一个主项目和两个其他项目(一个API和两个Tests),所有这些项目都面向.NET Framework 4.5.2。API项目在某个时候是一个核心包,因为当我尝试更新CodeAnalysis堆栈时,我得到Unable to resolve dependency 'Api.For.MySite'. Source(s) used: 'nuget.org', 'Microsoft Visual Studio Offline Packages', 'Package source'.
我试探着:
1.如here所述,使用Windows方式和Jenkins EnvIject插件将NUGET_PACKAGES变量设置为C:\NugetCache/C:\Windows\system32\config\systemprofile\.nuget\packages
1.为API本身创建一个nuget包。但没有运气。
我的配置如下:
1.安装了最新插件(MSBuild和git)的Jenkins 2.361.2
1.存储库是本地的:我的网站

  1. /p:Platform=AnyCPU;Configuration=Debug;PublishDestination="C:\inetpub\wwwroot\MySite (mysite.Site.com)" /restore
    1.我使用的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
    使用的源:
  4. C:\Users\user.name\Desktop\MyPackageFolder(我的软件包在这里)
  5. https://api.nuget.org/v3/index.json
  6. C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\(我的包也在这里)
    一个软件包的目标是.NET FW 4。我也为“MyPackage”制作了相同的Nuget软件包文件夹/文件结构,但仍然没有运气。
    另外,在jenkins控制台输出中给出相同错误的两个额外的包对于项目来说是不需要的。如果没有安装这两个包,项目(重新)构建相同的包。
    我还注意到的一件事是,前面提到的nuget包(至少其中一个)针对framework 4而不是4.5.2,但这仍然不能解释为什么只有jenkins有问题,而visual studio没有问题。
    我承认现在我所拥有的一切都是一团糟,但我不知道该去哪里,现在该做什么,或者如何尽可能有效地从中恢复过来。
mi7gmzs6

mi7gmzs61#

在NuGet于2016年左右添加PackageReference之前,无法通过msbuild进行恢复。当添加PackageReference时,msbuild restore只恢复了PackageReference项目,而不是packages.config项目,可能是由于过于谨慎以避免可能的破坏性更改。因此,直到VS 16.5(VS 2019)才添加了msbuild restore的packages.config,但即使在那时,它也是一个选择性开关。
提到路径..\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
个人而言,我建议在你的构建中有单独的恢复和构建步骤,而不是在同一个步骤中同时进行恢复和构建,这样1.每个步骤的日志会更短,2.当某个步骤失败时,失败的步骤会给你更多关于可能失败的信息(恢复失败?哦,可能是网络问题。构建失败?我可能在提交中有无效的语法)。

相关问题