如何解决如何在 MSBuild 中为 TargetFramework 设置操作系统条件
我的解决方案中的项目很少 - 很少有用于移动设备 (Xamarin.Forms) 和一个 xUnit。 xUnit 使用 .NET5 构建并引用移动项目。
Azure DevOps 上有 2 个管道来构建移动应用程序。一种适用于 Android,可在 Windows 上运行,另一种适用于 iOS,可在 OSX 上运行。
将新 NuGet 添加到移动项目 (Rg.Plugins.Popup
) 后,xUnit 项目构建开始失败。
最初,为 xUnit 项目设置 TargetFramework
看起来像这样
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
该设置适用于 OSX,但不适用于 Windows,并显示错误消息 Error NETSDK1136: The target platform must be set to Windows (usually by including '-windows' in the TargetFramework property) when using Windows Forms or WPF,or referencing projects or packages that do so.
改成
<PropertyGroup>
<TargetFramework>net5.0-windows</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
修复了 Windows 问题,但它在 OSX 上开始失败(出现相同的错误消息,这很奇怪,因为我们不再使用 Windows)。
我尝试了一些其他选项,但无法在两台机器上都成功。
<PropertyGroup>
<TargetFramework Condition=" '$(OS)' == 'Windows_NT' ">net5.0-windows</TargetFramework>
<TargetFramework Condition=" '$(OS)' != 'Windows_NT' ">net5.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<PropertyGroup>
<TargetFrameworks>net5.0;net5.0-windows</TargetFrameworks>
<IsPackable>false</IsPackable>
</PropertyGroup>
我也尝试过 Choose
、When
和 Otherwise
,但看起来您根本无法将 TargetFramework
包裹起来。
我这样做是完全错误还是巧合,正确的代码在我的情况下不起作用?
解决方法
尝试将 Condition
放在 PropertyGroup
而不是 TargetFramework
中。
试试下面的代码
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT' ">
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT' ">
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
</PropertyGroup>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。