无法从源代码本地构建 xamarin forms 5.0.*

unable to build xamarin forms 5.0.* locally from sources

由于一些自定义原因,我们在 XF 中有一些自定义内置功能(例如基于 XAML 的工具栏按钮以及将私有内部更改为 public 类,加上虚拟化一些方法)。因此,我们依赖于 XF NuGet 包的自定义版本。

在 XF5.0 版本之前,它(几乎总是)完美运行。我有一个专用的虚拟机 Windows 并为此预装了 VS。

当我尝试使用下一个命令从源构建 XF 时 .\build.ps1 -Target NugetPack -ScriptArgs '--packageVersion="5.0.0.2013"' 我收到错误:

Successfully created package 'L:\src_github\xf_patch_release-5.0.0-sr3.1\artifacts\Xamarin.Forms.Maps.WPF.5.0.0.2013.nupkg'.
NuGet Version: 5.9.1.11
Attempting to build package from 'Xamarin.Forms.temp.nuspec'.
Object reference is not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
   at NuGet.Packaging.PackageBuilder.<>c.<ValidateReferenceAssemblies>b__173_1(NuGet.Frameworks1204671.NuGetFramework groupFramework)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.HashSet`1.UnionWith(IEnumerable`1 other)
   at System.Collections.Generic.HashSet`1..ctor(IEnumerable`1 collection, IEqualityComparer`1 comparer)
   at NuGet.Packaging.PackageBuilder.ValidateReferenceAssemblies(IEnumerable`1 files, IEnumerable`1 packageAssemblyReferences)
   at NuGet.Packaging.PackageBuilder.Save(Stream stream)
   at NuGet.Commands.PackCommandRunner.BuildPackage(PackageBuilder builder, String outputPath, Boolean symbolsPackage)
   at NuGet.Commands.PackCommandRunner.BuildFromNuspec(String path)
   at NuGet.CommandLine.PackCommand.ExecuteCommand()
   at NuGet.CommandLine.Command.ExecuteCommandAsync()
   at NuGet.CommandLine.Command.Execute()
   at NuGet.CommandLine.Program.MainCore(String workingDirectory, String[] args)
An error occurred when executing task '_NuGetPack'.
Error: One or more errors occurred. (NuGet: Process returned an error (exit code 1).)
        NuGet: Process returned an error (exit code 1).

我尝试过使用不同的方法来摆脱这个无法理解的问题,但没有任何反应。我尝试使用最新的实际 release-5.0.0-sr3.1 标签和最新版本的分支 5.0.0 我尝试更改 build.cake 文件中的一些设置,以从解决方案中卸载一些项目(例如与 UWP 相关的项目,这通常会导致很多错误)。我尝试在我的工作计算机(和环境)上构建解决方案 - 我得到了相同的结果。 然后我转而直接在 VS 中构建解决方案并开始遇到以下问题:

在调用主要任务进行构建之前:.\build.ps1 -Target NugetPack... 我总是调用 .\build.ps1 -Target provision 以确保我没有错过每个 Windows OS 上的一些必需工具.

有什么我遗漏的吗?

我发现我使用的是不同版本的 NuGet 包管理器,我必须在 OS 上全局安装它。可以在 XF 的管道中找到正确的版本(https://dev.azure.com/xamarin/public/_build,请参阅 Windows 相关构建)。 在我将全局版本更改为 5.6.0 后,构建脚本开始为 Xamarin.Forms 项目本身正确生成 *.nupkg 文件。

...