【问题标题】:Visual Studio update (16.8.1) lead to CI build failuresVisual Studio 更新 (16.8.1) 导致 CI​​ 构建失败
【发布时间】:2021-02-28 17:32:33
【问题描述】:

我们最近更新了我们的构建服务器以使用 Visual Studio 16.8.1 和 Xamarin.iOS 14.4.1.3,并且在之前运行的 MSBuild 命令中遇到了问题。

为了记录,我们在这里构建了一个 Xamarin Forms 解决方案并以 iOS 为目标。

命令是:

"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild" MySolution.sln /p:Configuration="AppStore" /p:Platform="iPhone" /p:ServerAddress="" /p:ServerUser=""

我已尝试搜索它报告的特定错误消息(如下),但到目前为止我还没有找到任何有用的信息。

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Xamarin\iOS\Xamarin.Shared.targets(230,3):错误 MSB4044:“GetMinimumOSVersion”任务未指定值为所需的参数“SdkVersion”。

更新

经过进一步挖掘,我相信我已经将错误的根源追溯到Xamarin.Shared.props 中未设置的这些行。

<!-- SdkVersion -->
<_SdkVersion Condition="'$(_PlatformName)' == 'macOS'">$(MacOSXSdkVersion)</_SdkVersion>
<_SdkVersion Condition="'$(_PlatformName)' != 'macOS'">$(MtouchSdkVersion)</_SdkVersion>

我无法找出设置 MtouchSdkVersion 的原因以及未设置它的原因。上面引用部分的评论指出:

有时我们会为 Xamarin.iOS 和 Xamarin.Mac 项目使用不同的变量名称。这里我们尝试统一这些变量

会不会是这种统一改变了以前有效的东西的行为?

【问题讨论】:

    标签: visual-studio xamarin xamarin.ios msbuild teamcity


    【解决方案1】:

    这在 Visual Studio 2019 版本 16.8.3 中再次引起关注。看起来他们已经将问题转移到: &lt;VS Install path&gt;\MSBuild\Xamarin\iOS\Xamarin.Messaging.targets 通过删除 _DisconnectAfterClean 目标的第 52 行上的 _SayGoodbye 依赖关系,我能够让我的构建再次运行。

    &lt;Target Name="_DisconnectAfterClean" Condition="'$(IsRebuild)' != 'true'" DependsOnTargets="" /&gt;

    【讨论】:

    • 感谢您的更新。我推迟了尝试 16.8.3,但如果我这样做了,我会使用你的方法
    • 修改 .targets 文件并没有为我们解决它。我们通过连续执行两次构建来解决这个问题。第一次构建总是失败,但以某种方式为第二次构建成功做好了准备。我们只是克隆了构建任务来执行构建并将第一个任务设置为继续出错。它不漂亮,但它有效。 (我试图将其放入答案中,但由于某种原因它被删除了。?‍♂️)
    【解决方案2】:

    这当然不是问题的永久解决方案,但 Xamarin 团队提供了一种解决方法。供参考,回复在GitHub

    我们正在对其进行调查,但看起来构建过程在运行干净的目标后会断开连接,因此如果您运行 Build 而不是 Rebuild,则不应该遇到这种情况。

    与此同时,取消阻止 Rebuilds 的潜在解决方法是编辑 &lt;VS Install path&gt;\MSBuild\Xamarin\iOS\Xamarin.iOS.Windows.After.targets 并从 CleanDependsOn 属性组中删除 _SayGoodbye 条目。

    我可以确认这使我们的 CI 构建再次运行。

    不言而喻,但我想明确指出,您应该在执行此操作之前备份Xamarin.iOS.Windows.After.targets 文件的副本。

    【讨论】:

    • 既然您有解决问题的方法,我建议您可以标记自己的答案:)
    • @PerryQian-MSFT 我想你是对的。我不相信解决方法真的应该是答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2015-05-15
    • 2012-08-12
    • 2019-09-21
    • 1970-01-01
    • 2012-05-17
    相关资源
    最近更新 更多