【发布时间】:2020-11-27 21:14:46
【问题描述】:
我有复杂的 Xamarin 解决方案,其中包含 android、ios 和 nestandard 核心项目(通过 Microsoft.NET.Sdk 定义)以及一些具有某些逻辑的其他 csprojs(一些通过 Microsoft.NET.Sdk 定义为 netstandard2.0。其他通过MSBuild.Sdk.Extras 用于多目标 netstandard2.0、xamarin.ios10、monoandroid10.0 并具有一些特定于平台的代码) 使用最新库在我的 macos 上进行本地构建是可以的(netcore 3 和 5,最新的 xamarin。在 Rider 和 VS for mac 上尝试过)。 使用 msbuild 在 windows-2019 代理上成功构建 ADO(只是带有代码检查等的常规 CI) 基于 macos-10.15 代理的 ADO 构建(用于 ios 和 android 打包的不同作业,使用 XamarinIos/XamarinAndroid 任务)失败并出现以下奇怪行为: 我在我的解决方案中看到针对特定平台库的 droid/ios 项目中有很多命名空间错误。
我进行了一些调查,发现 msbuild 首先运行特定于平台的 csprojs 构建,复制输出,然后为相同的 csprojs 运行 netstandard 构建,并用 netstandard 版本替换输出中的文件。显然,它没有任何特定于平台的代码行。
所以,问题是wtf?我想怎么解决这个问题?
我尝试了什么:
- 用 msbuild 调用替换 Xamarin 任务
- 将 Xamarin SDK 版本更改为 16_12_3 和 16_12_0(当前为 16_12_2)
- 通过 global.json 和使用 UseDotNet@2 任务安装 v5 两种方式将 .net 版本更改为 5(当前为 3.1.x)
- 核心项目已转换为多目标
- 从 sln 中删除所有内容并从头开始添加每个项目
我也认为 msbuild,也许,试图从我的库中制作一个 nupkg,所以我在 build props 中尝试了这个:
<PropertyGroup>
<IsPackable>false</IsPackable>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
</PropertyGroup>
我也有这个
<PropertyGroup Label="Multiplatform" Condition=" '$(TargetsToBuild)' != 'All' ">
<TargetFrameworks Condition=" '$(TargetsToBuild)' == 'Android' ">monoandroid10.0</TargetFrameworks>
<TargetFrameworks Condition=" '$(TargetsToBuild)' == 'iOS' ">xamarin.ios10</TargetFrameworks>
</PropertyGroup>
多目标项目有这个
<PropertyGroup Label="Multiplatform">
<TargetFrameworks>netstandard2.0;xamarin.ios10;monoandroid10.0</TargetFrameworks>
</PropertyGroup>
当然,我已经尝试删除上面的标签并在没有它们的情况下构建。不走运:(
【问题讨论】:
标签: xamarin azure-devops msbuild