我想添加Tore Østergaard's answer 的一个小变体,以防您将 CSPROJ 转换为 SDK 样式的项目(此时的 iOS 项目通常不是,但您可以它工作)。
在 SDK 样式的项目中,“系统”目标和道具通过 CSPROJ 顶部的 SDK 属性导入,如下所示:
<Project Sdk="MSBuild.Sdk.Extras">
... various project settings ...
</Project>
但是,如果您尝试使用 Tore Østergaard 的答案,它将无法正常工作,因为该答案的目标覆盖本身将被 SDK 的目标覆盖(它们总是在最后导入)。
解决方法是手动导入 SDK 目标和道具,以便您可以控制它们的顺序:
<Project>
<!--
The SDK is imported manually so that certain targets can be overridden (see bottom of file).
Otherwise we could use Project Sdk="MSBuild.Sdk.Extras"
-->
<Import Project="Sdk.props" Sdk="MSBuild.Sdk.Extras" />
... various project settings ...
<!-- See comment at top of file about manually importing SDK -->
<Import Project="Sdk.targets" Sdk="MSBuild.Sdk.Extras" />
<!--
These targets must be imported last so that they override the SDK-provided targets.
These override the Mac build agent command because they are not needed on CI.
-->
<Import Project="AvoidMacBuildWarning.targets" Condition=" '$(SkipMacBuild)' == 'true' " />
</Project>
注意:我还将条件更改为特定条件 SkipMacBuild,但您可以使用对构建有意义的任何条件。
我还必须向AvoidMacBuildWarning.targets 添加一个额外的“空目标”以确保它们也被静音。我完整的AvoidMacBuildWarning.targets 看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Inspired by https://stackoverflow.com/a/47182083 from Tore Østergaard -->
<Target Name="_SayHello">
<Message Text="INFO: This would have been MSBuild warning VSX1000, but it has been ignored by importing this targets file." />
</Target>
<Target Name="_SayGoodbye">
</Target>
<Target Name="_DetectSdkLocations">
</Target>
<Target Name="_CollectBundleResources">
</Target>
<Target Name="_PackLibraryResources">
</Target>
<Target Name="CopyFilesToMacOutputDirectory">
</Target>
<Target Name="_VerifyBuildSignature">
</Target>
<Target Name="_VerifyXcodeVersion">
</Target>
</Project>