使用 CakeBuild 构建 Xamarin.Android 项目时找不到 mscorlib

Posted

技术标签:

【中文标题】使用 CakeBuild 构建 Xamarin.Android 项目时找不到 mscorlib【英文标题】:mscorlib not found when building Xamarin.Android project with CakeBuild 【发布时间】:2018-08-29 10:51:33 【问题描述】:

我正在将 Xamarin android 项目集成到我们的 CI 管道中。我们已经将 CakeBuild 用于其他 .NET 项目,所以我也想在这里使用它。

问题是我在尝试使用 Cake 构建时总是收到以下错误消息:

C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(406,2):错误:无法加载程序集 'mscorlib,版本 = 0.0.0.0,文化 = 中性,PublicKeyToken ='。也许它在 Mono for Android 配置文件中不存在? [C:\[myproject].csproj]

在 Visual Studio 2015 中构建工作并使用 Visual Studio 开发人员命令提示符。因此,我认为这与在 VS 中设置的环境变量以及通过 VS 命令提示符设置的环境变量有关。所以我做的是制作一个小批量文件:

call "%vs140comntools%vsvars32.bat"
Powershell.exe ./build.ps1 -Target Build

但我得到了完全相同的错误。在我的项目中,没有明确引用mscorlib

Cake 构建任务如下所示:

Task("Build")
.IsDependentOn("Restore-NuGet-Packages")
.Does(() =>

    var settings = new MSBuildSettings()
    
        ArgumentCustomization = args =>
        
            args = args.Append("/t:PackageForAndroid");
            args = args.Append("/p:TargetFrameworkRootPath=\"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\"");
            return args;
        ,
        Verbosity = Verbosity.Normal
    ;
    settings.SetConfiguration(configuration);
    MSBuild("../myproject.csproj", settings);    
);

我必须添加TargetFrameworkRootPath,因为如果我不明确设置它,它将找不到引用程序集。

我想知道要复制VS / VS命令提示符的构建环境,还要做什么。

【问题讨论】:

【参考方案1】:

您的目标是 .NET Standard 还是仍在使用 PCL? 详细输出是什么样的?它应该为您提供正在执行的确切 MSBuild 命令。

call "%vs140comntools%vsvars32.bat" Powershell.exe ./build.ps1 -Target Build -Verbosity Diagnostic

【讨论】:

以上是关于使用 CakeBuild 构建 Xamarin.Android 项目时找不到 mscorlib的主要内容,如果未能解决你的问题,请参考以下文章

cake-build -.Net Core 跨平台构建自动化系统。

如何使用 msBuild 在 nuke-build 中发布解决方案

cake build使用:

Xamarin - 在android中截取屏幕截图

Xamarin.Android之引导页的简单制作

coffeescript 的新手,运行 cakefile 时出现 spawn ENOENT 错误