我们有许多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。
答案 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)
/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>