如何禁止丢失Mac服务器的警告(警告VSX1000)

时间:2017-11-03 13:35:38

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

我们有许多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。

4 个答案:

答案 0 :(得分:2)

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

在我们的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>

答案 1 :(得分:1)

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

据我所知,仍然无法使用MSB前缀抑制警告。请参阅:Supress/Disable/Solve Visual Studio Build Warning

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

答案 2 :(得分:0)

您应该按msbuild documentation

使用/nowarn:VSX1000

答案 3 :(得分:0)

如果您将CSPROJ转换为SDK风格的项目(此时的iOS项目通常不是 ,但我想可以使其正常工作。)

在SDK风格的项目中,“系统”目标和道具通过CSPROJ顶部的SDK属性导入,如下所示:

<Project Sdk="MSBuild.Sdk.Extras">

  ... various project settings ...

</Project>

但是,如果您尝试使用ToreØstergaard的答案,它将无法工作,因为该答案的目标替代会被SDK的目标(始终导入 last )覆盖。 >

解决方法是手动导入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>