【问题标题】:How to suppress warnings for missing Mac Server (Warning VSX1000)如何抑制缺少 Mac 服务器的警告(警告 VSX1000)
【发布时间】:2017-11-03 13:35:37
【问题描述】:

我们有许多 Xamarin iOS 项目是我们主要解决方案的一部分,因为我们需要确保它们作为门控签入的一部分进行编译。但是,我们的大多数开发人员都没有使用 iOS,因此没有配置与 Mac 构建代理的连接。

在本地和我们的服务器上构建期间,我们看到以下警告:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\iOS\Xamarin.iOS.Windows.After.targets(63,5):警告 VSX1000:没有地址和用户指定以建立与 Mac 服务器的连接,因此仅为项目“MyProject.iOS”编译了主程序集。连接到 Mac 服务器并再次尝试构建完整的应用程序。

有没有办法配置这是否应该是一个警告,以便我们可以从 Visual Studio 的 错误列表 和服务器的构建日志中删除它? 最好在项目中完成,这样每个人都可以设置一次。

我们正在使用最新的 Visual Studio 2017 和 TFS 2017 Update 2 并构建 vNext。

【问题讨论】:

  • 似乎在本地构建时,也返回相同的警告?您是否在构建管道中使用 MSBuild 任务,您可以尝试使用 /property:WarningLevel=0 MSBuild 参数。不确定它是否适用于上面的这种警告。

标签: xamarin.ios visual-studio-2017 tfsbuild


【解决方案1】:

一个肮脏的解决方法是覆盖产生警告的目标 - 在我的情况下这很好,因为我不需要它们。

在我们的 iOS 项目文件中,我有条件地(如果定义了服务器地址)导入了一个目标文件,AvoidMacBuildWarning.target,它替换了许多目标。

部分项目文件:

...
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets"/>
<Import Project="AvoidMacBuildWarning.target" Condition=" '$(ServerAddress)' == '' " />
<ItemGroup>
...

AvoidMacBuildWarning.target:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="_SayHello">
    <Message Text="Warning (demoted to message) VSX1000: No Address and User has been specified in order to establish a connection to a Mac Server, so only the main assembly was compiled for project 'MediumService.iOS'. Connect to a Mac Server and try again to build the full application." />
  </Target>
  <Target Name="_SayGoodbye">
  </Target>
  <Target Name="_DetectSdkLocations">
  </Target>
  <Target Name="_CollectBundleResources">
  </Target>
  <Target Name="_PackLibraryResources">
  </Target>
  <Target Name="CopyFilesToMacOutputDirectory">
  </Target>
</Project>

【讨论】:

  • 这个答案对我有用,变化很小。如果您使用的是 SDK 风格的项目,请参阅我在这篇文章 stackoverflow.com/a/62801507/31668 中的回答,了解您需要进行的小改动。
  • 请参阅我的回答,了解可能需要添加其他空目标以使其正常工作。由于最初提出/回答了这个问题,因此它们可能是新增内容。
【解决方案2】:

与通过 Visual Studio 进行的本地构建相比,我们没有做任何特别的更改来更改 VSTS/TFS 构建中的警告行为。

据我所知,使用 MSB 前缀抑制警告仍然是不可能的。参考:Supress/Disable/Solve Visual Studio Build Warning

您可以通过 MSBuild 参数尝试使用 /property:WarningLevel=0。不确定它是否适用于上述这种警告。如果没有,怕是没办法绕过。

【讨论】:

  • 据我了解,上述开关将禁用所有警告,而不仅仅是特定警告。这以某种方式破坏了能够看到实际需要处理的警告的意义。
  • @ToreØstergaard 是的,这是限制。又怕没有办法只忽略一个具体的警告,这可以通过本地VS来实现。但绝对不能通过 vNext 构建。您可以使用logging command 自定义构建日志并通过powershell 调用它,但无法抑制构建服务器生成的警告消息。
  • 我找到了一种解决方法并将其添加为答案,但希望您的 cmets 能够使用它,Patrick。
  • @ToreØstergaard 很高兴在这里,当你自己修复它时总是更好:)
  • @ToreØstergaard 抱歉对 xamarin 项目不太熟悉,好像您正在创建一个自定义目标,该目标是在错误生成目标后&amp;ServerAddress = none 时触发的。然后只在目标中提示一条消息而不是警告。解决方法看起来可行。
【解决方案3】:

你应该使用/nowarn:VSX1000msbuild documentation

【讨论】:

    【解决方案4】:

    我想添加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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-02
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 2011-03-18
      • 1970-01-01
      相关资源
      最近更新 更多