From 8deec35a207fdd1918de1fdf1085a83aba50530c Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 29 Mar 2023 10:25:25 +0200 Subject: [PATCH] [net8.0] Remove support for .NET 6. (#17901) Context: https://dotnet.microsoft.com/platform/support/policy/maui > A major version of .NET MAUI receives support for a minimum of 6 > months after a successor (the next major release) ships. For > example, .NET MAUI 6.0 will be supported for 6 months after .NET > MAUI 7.0 ships. Similarly, .NET MAUI 7.0 will receive support for 6 > months after .NET MAUI 8.0 ships. By the time .NET 8 GA ships, .NET 6 MAUI projects will not be supported. Remove .NET 6 support from our .NET 8 workloads. --- Make.versions | 7 ------ NuGet.config | 1 - builds/Makefile | 2 -- .../package-download/download-packages.csproj | 2 -- dotnet/.gitignore | 1 - dotnet/Makefile | 17 ++------------ ...kloadManifest.MacCatalyst.template.targets | 6 ----- .../WorkloadManifest.iOS.template.targets | 7 ------ .../WorkloadManifest.macOS.template.targets | 6 ----- .../WorkloadManifest.tvOS.template.targets | 6 ----- dotnet/generate-workloadmanifest-json.csharp | 23 +------------------ ...in.Shared.Sdk.MultiTarget.template.targets | 11 --------- eng/Versions.props | 1 - external/MonoTouch.Dialog | 2 +- external/Touch.Unit | 2 +- tests/dotnet/UnitTests/ProjectTest.cs | 16 ++++--------- 16 files changed, 9 insertions(+), 101 deletions(-) delete mode 100644 dotnet/targets/Xamarin.Shared.Sdk.MultiTarget.template.targets diff --git a/Make.versions b/Make.versions index 8496c8a5ea..2f6a419a6f 100644 --- a/Make.versions +++ b/Make.versions @@ -85,12 +85,5 @@ DEFAULT_TARGET_PLATFORM_VERSION_WATCHOS=9.1 DEFAULT_TARGET_PLATFORM_VERSION_MACOS=13.0 DEFAULT_TARGET_PLATFORM_VERSION_MACCATALYST=16.1 -# These variables must be updated whenever we release a new stable version into .NET 6 -NET6_IOS_NUGET_VERSION_NO_METADATA=16.2.34 -NET6_TVOS_NUGET_VERSION_NO_METADATA=16.1.272 -NET6_WATCHOS_NUGET_VERSION_NO_METADATA=8.5.447 -NET6_MACOS_NUGET_VERSION_NO_METADATA=13.1.34 -NET6_MACCATALYST_NUGET_VERSION_NO_METADATA=16.2.34 - # .NET 7 versions are bumped using maestro. diff --git a/NuGet.config b/NuGet.config index e6f0628b8f..fb4a46c20f 100644 --- a/NuGet.config +++ b/NuGet.config @@ -20,7 +20,6 @@ - diff --git a/builds/Makefile b/builds/Makefile index 6a3dc90928..34513b7a54 100644 --- a/builds/Makefile +++ b/builds/Makefile @@ -136,11 +136,9 @@ ifneq ($(TRACKING_DOTNET_RUNTIME_SEPARATELY),) @# mono toolchain $(Q) mkdir -p ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(MONO_TOOLCHAIN_MANIFEST_VERSION_BAND) $(Q) $(CP) $(TOP)/packages/microsoft.net.workload.mono.toolchain.net7.manifest-$(MONO_TOOLCHAIN_MANIFEST_VERSION_BAND)/$(DOWNLOAD_DOTNET_VERSION)/data/WorkloadManifest.* ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(MONO_TOOLCHAIN_MANIFEST_VERSION_BAND)/microsoft.net.workload.mono.toolchain.net7/ - $(Q) $(CP) $(TOP)/packages/microsoft.net.workload.mono.toolchain.net6.manifest-$(MONO_TOOLCHAIN_MANIFEST_VERSION_BAND)/$(DOWNLOAD_DOTNET_VERSION)/data/WorkloadManifest.* ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(MONO_TOOLCHAIN_MANIFEST_VERSION_BAND)/microsoft.net.workload.mono.toolchain.net6/ @# emscripten, which mono depends on $(Q) mkdir -p ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(EMSCRIPTEN_MANIFEST_VERSION_BAND) $(Q) $(CP) $(TOP)/packages/microsoft.net.workload.emscripten.net7.manifest-$(EMSCRIPTEN_MANIFEST_VERSION_BAND)/$(EMSCRIPTEN_MANIFEST_PACKAGE_VERSION)/data/WorkloadManifest.* ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(EMSCRIPTEN_MANIFEST_VERSION_BAND)/microsoft.net.workload.emscripten.net7/ - $(Q) $(CP) $(TOP)/packages/microsoft.net.workload.emscripten.net6.manifest-$(EMSCRIPTEN_MANIFEST_VERSION_BAND)/$(EMSCRIPTEN_MANIFEST_PACKAGE_VERSION)/data/WorkloadManifest.* ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(EMSCRIPTEN_MANIFEST_VERSION_BAND)/microsoft.net.workload.emscripten.net6/ $(Q) touch $@ endif diff --git a/builds/package-download/download-packages.csproj b/builds/package-download/download-packages.csproj index 50f7856971..087341b310 100644 --- a/builds/package-download/download-packages.csproj +++ b/builds/package-download/download-packages.csproj @@ -22,11 +22,9 @@ - - diff --git a/dotnet/.gitignore b/dotnet/.gitignore index d4a94303b7..d0aedbaff1 100644 --- a/dotnet/.gitignore +++ b/dotnet/.gitignore @@ -7,7 +7,6 @@ Microsoft.*.Sdk/targets/Microsoft.*.Sdk.ImplicitNamespaceImports.props Microsoft.*.Sdk/targets/Microsoft.*.Sdk.SupportedTargetPlatforms.props Microsoft.*.Sdk/targets/Microsoft.*.Sdk.DefaultItems.props Microsoft.*.Sdk/targets/Microsoft.*.Sdk.Versions.props -Microsoft.*.Sdk/targets/Xamarin.Shared.Sdk.MultiTarget.targets Microsoft.*.Sdk/Sdk/AutoImport.props _pkg .stamp-* diff --git a/dotnet/Makefile b/dotnet/Makefile index d36dff1ce1..bf6bd324f0 100644 --- a/dotnet/Makefile +++ b/dotnet/Makefile @@ -12,7 +12,6 @@ DOTNET_PLATFORMS_UPPERCASE:=$(shell echo $(DOTNET_PLATFORMS) | tr a-z A-Z) # Create variables prefixed with the correctly cased platform name from the upper-cased platform name. This makes some of the next sections somewhat simpler. $(foreach platform,$(DOTNET_PLATFORMS),$(eval $(platform)_NUGET_VERSION_NO_METADATA:=$($(shell echo $(platform) | tr a-z A-Z)_NUGET_VERSION_NO_METADATA))) -$(foreach platform,$(DOTNET_PLATFORMS),$(eval NET6_$(platform)_NUGET_VERSION_NO_METADATA:=$(NET6_$(shell echo $(platform) | tr a-z A-Z)_NUGET_VERSION_NO_METADATA))) $(foreach platform,$(DOTNET_PLATFORMS),$(eval NET7_$(platform)_NUGET_VERSION_NO_METADATA:=$(NET7_$(shell echo $(platform) | tr a-z A-Z)_NUGET_VERSION_NO_METADATA))) DOTNET_iOS_GLOBAL_USINGS=CoreGraphics Foundation UIKit @@ -32,7 +31,6 @@ $(1)_NUGET_TARGETS = \ $(DOTNET_DESTDIR)/Microsoft.$(1).Sdk/targets/Microsoft.$(1).Sdk.Versions.props \ $(DOTNET_DESTDIR)/Microsoft.$(1).Sdk/targets/Microsoft.$(1).Sdk.targets \ $(DOTNET_DESTDIR)/Microsoft.$(1).Sdk/targets/Xamarin.Shared.Sdk.DefaultItems.targets \ - $(DOTNET_DESTDIR)/Microsoft.$(1).Sdk/targets/Xamarin.Shared.Sdk.MultiTarget.targets \ $(DOTNET_DESTDIR)/Microsoft.$(1).Sdk/targets/Xamarin.Shared.Sdk.Publish.targets \ $(DOTNET_DESTDIR)/Microsoft.$(1).Sdk/targets/Xamarin.Shared.Sdk.TargetFrameworkInference.props \ $(DOTNET_DESTDIR)/Microsoft.$(1).Sdk/targets/Xamarin.Shared.Sdk.props \ @@ -151,20 +149,10 @@ Microsoft.$(1).Sdk/targets/Microsoft.$(1).Sdk.SupportedTargetPlatforms.props: $( endef $(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call SupportedTargetPlatforms,$(platform)))) -define SharedAfterTargetsTemplate -Microsoft.$(1).Sdk/targets/Xamarin.Shared.Sdk.MultiTarget.targets: targets/Xamarin.Shared.Sdk.MultiTarget.template.targets Makefile $(TOP)/Make.config.inc $(TOP)/.git/HEAD $(TOP)/.git/index - $$(Q_GEN) sed \ - -e "s/@NET6_NUGET_VERSION_NO_METADATA@/$2/g" \ - -e "s/@NET7_NUGET_VERSION_NO_METADATA@/$3/g" \ - $$< > $$@.tmp - $$(Q) mv $$@.tmp $$@ -endef -$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call SharedAfterTargetsTemplate,$(platform),$(NET6_$(platform)_NUGET_VERSION_NO_METADATA),$(NET7_$(platform)_NUGET_VERSION_NO_METADATA)))) - define WorkloadTargets Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.json: Makefile $(TOP)/Make.config.inc $(TOP)/.git/HEAD $(TOP)/.git/index Makefile generate-workloadmanifest-json.csharp | Workloads/Microsoft.NET.Sdk.$(1) $$(Q) rm -f $$@.tmp - $$(Q_GEN) ./generate-workloadmanifest-json.csharp "$(1)" "$(3)" "$(4)" "$(6)" "$$(DOTNET_$(5)_RUNTIME_IDENTIFIERS)" "$$@.tmp" "$$(DOTNET_WINDOWS_PLATFORMS)" + $$(Q_GEN) ./generate-workloadmanifest-json.csharp "$(1)" "$(3)" "$(5)" "$$(DOTNET_$(4)_RUNTIME_IDENTIFIERS)" "$$@.tmp" "$$(DOTNET_WINDOWS_PLATFORMS)" $$(Q) mv $$@.tmp $$@ Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.targets: Workloads/WorkloadManifest.$(1).template.targets Makefile $(TOP)/Make.config.inc $(TOP)/.git/HEAD $(TOP)/.git/index | Workloads/Microsoft.NET.Sdk.$(1) @@ -184,7 +172,7 @@ LOCAL_WORKLOAD_TARGETS += Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.json LOCAL_WORKLOAD_TARGETS += Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.targets LOCAL_WORKLOAD_TARGETS += Workloads/Microsoft.NET.Sdk.$(1)/LICENSE endef -$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call WorkloadTargets,$(platform),$(shell echo $(platform) | tr A-Z a-z),$($(platform)_NUGET_VERSION_NO_METADATA),$(NET6_$(platform)_NUGET_VERSION_NO_METADATA),$(shell echo $(platform) | tr a-z A-Z),$(NET7_$(platform)_NUGET_VERSION_NO_METADATA)))) +$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call WorkloadTargets,$(platform),$(shell echo $(platform) | tr A-Z a-z),$($(platform)_NUGET_VERSION_NO_METADATA),$(shell echo $(platform) | tr a-z A-Z),$(NET7_$(platform)_NUGET_VERSION_NO_METADATA)))) # Always use the commit distance as the third number in the VS component version, as it should always increase across all branches. $(foreach platform,$(DOTNET_PLATFORMS),$(eval $(platform)_MSI_VERSION:=$($(shell echo $(platform) | tr '[:lower:]' '[:upper:]')_NUGET_OS_VERSION).$($(shell echo $(platform) | tr a-z A-Z)_NUGET_COMMIT_DISTANCE).0)) @@ -211,7 +199,6 @@ $(DOTNET_NUPKG_DIR)/SignList.targets: Workloads/SignList.targets TEMPLATED_FILES = \ $(foreach platform,$(DOTNET_PLATFORMS),Microsoft.$(platform).Sdk/targets/Microsoft.$(platform).Sdk.Versions.props) \ $(foreach platform,$(DOTNET_PLATFORMS),Microsoft.$(platform).Sdk/targets/Microsoft.$(platform).Sdk.SupportedTargetPlatforms.props) \ - $(foreach platform,$(DOTNET_PLATFORMS),Microsoft.$(platform).Sdk/targets/Xamarin.Shared.Sdk.MultiTarget.targets) \ nupkgs/$(IOS_WINDOWS_NUGET).%.nupkg: CURRENT_VERSION_NO_METADATA=$(IOS_WINDOWS_NUGET_VERSION_NO_METADATA) nupkgs/$(IOS_WINDOWS_NUGET).%.nupkg: CURRENT_VERSION_FULL=$(IOS_WINDOWS_NUGET_VERSION_FULL) diff --git a/dotnet/Workloads/WorkloadManifest.MacCatalyst.template.targets b/dotnet/Workloads/WorkloadManifest.MacCatalyst.template.targets index 6090a0e3cb..2c3d40be96 100644 --- a/dotnet/Workloads/WorkloadManifest.MacCatalyst.template.targets +++ b/dotnet/Workloads/WorkloadManifest.MacCatalyst.template.targets @@ -2,15 +2,9 @@ - - - - <_MultiTargetTargetsFile>$(_XamarinSdkRootDirectory)..\@NUGET_VERSION_NO_METADATA@\targets\Xamarin.Shared.Sdk.MultiTarget.targets - $(AfterMicrosoftNETSdkTargets);$(_MultiTargetTargetsFile) - diff --git a/dotnet/Workloads/WorkloadManifest.iOS.template.targets b/dotnet/Workloads/WorkloadManifest.iOS.template.targets index 7fde97bc8e..80e0616ed0 100644 --- a/dotnet/Workloads/WorkloadManifest.iOS.template.targets +++ b/dotnet/Workloads/WorkloadManifest.iOS.template.targets @@ -2,18 +2,11 @@ - - - - - <_MultiTargetTargetsFile>$(_XamarinSdkRootDirectory)..\@NUGET_VERSION_NO_METADATA@\targets\Xamarin.Shared.Sdk.MultiTarget.targets - $(AfterMicrosoftNETSdkTargets);$(_MultiTargetTargetsFile) - diff --git a/dotnet/Workloads/WorkloadManifest.macOS.template.targets b/dotnet/Workloads/WorkloadManifest.macOS.template.targets index 0f1554ab4f..6f72655f50 100644 --- a/dotnet/Workloads/WorkloadManifest.macOS.template.targets +++ b/dotnet/Workloads/WorkloadManifest.macOS.template.targets @@ -2,15 +2,9 @@ - - - - <_MultiTargetTargetsFile>$(_XamarinSdkRootDirectory)..\@NUGET_VERSION_NO_METADATA@\targets\Xamarin.Shared.Sdk.MultiTarget.targets - $(AfterMicrosoftNETSdkTargets);$(_MultiTargetTargetsFile) - diff --git a/dotnet/Workloads/WorkloadManifest.tvOS.template.targets b/dotnet/Workloads/WorkloadManifest.tvOS.template.targets index 24727d88f8..1374a44b50 100644 --- a/dotnet/Workloads/WorkloadManifest.tvOS.template.targets +++ b/dotnet/Workloads/WorkloadManifest.tvOS.template.targets @@ -2,15 +2,9 @@ - - - - <_MultiTargetTargetsFile>$(_XamarinSdkRootDirectory)..\@NUGET_VERSION_NO_METADATA@\targets\Xamarin.Shared.Sdk.MultiTarget.targets - $(AfterMicrosoftNETSdkTargets);$(_MultiTargetTargetsFile) - diff --git a/dotnet/generate-workloadmanifest-json.csharp b/dotnet/generate-workloadmanifest-json.csharp index f09a028815..ad8ac35f0d 100755 --- a/dotnet/generate-workloadmanifest-json.csharp +++ b/dotnet/generate-workloadmanifest-json.csharp @@ -6,7 +6,7 @@ using System.IO; using System.Xml; var args = Environment.GetCommandLineArgs (); -var expectedArgumentCount = 7; +var expectedArgumentCount = 6; if (args.Length != expectedArgumentCount + 3 /* 2 default arguments (executable + script) + 'expectedArgumentCount' arguments we're interested in */) { // first arg is "/Library/Frameworks/Mono.framework/Versions/4.8.0/lib/mono/4.5/csharp.exe" // second arg the script itself @@ -19,7 +19,6 @@ if (args.Length != expectedArgumentCount + 3 /* 2 default arguments (executable var argumentIndex = 3; var platform = args [argumentIndex++]; var version = args [argumentIndex++]; -var net6Version = args [argumentIndex++]; var net7Version = args [argumentIndex++]; var runtimeIdentifiers = args [argumentIndex++].Split (new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var outputPath = args [argumentIndex++]; @@ -37,11 +36,9 @@ using (TextWriter writer = new StreamWriter (outputPath)) { writer.WriteLine ($" \"packs\": ["); writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net8\","); writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net7\","); - writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net6\","); if (hasWindows) { writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net8\","); writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net7\","); - writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net6\","); } writer.WriteLine ($" \"Microsoft.{platform}.Ref\","); foreach (var rid in runtimeIdentifiers) { @@ -52,11 +49,9 @@ using (TextWriter writer = new StreamWriter (outputPath)) { writer.WriteLine ($" \"extends\": ["); if (platform == "macOS") { writer.WriteLine ($" \"microsoft-net-runtime-mono-tooling\","); - writer.WriteLine ($" \"microsoft-net-runtime-mono-tooling-net6\","); writer.WriteLine ($" \"microsoft-net-runtime-mono-tooling-net7\","); } else { writer.WriteLine ($" \"microsoft-net-runtime-{platformLowerCase}\","); - writer.WriteLine ($" \"microsoft-net-runtime-{platformLowerCase}-net6\","); writer.WriteLine ($" \"microsoft-net-runtime-{platformLowerCase}-net7\","); } writer.WriteLine ($" ]"); @@ -77,13 +72,6 @@ using (TextWriter writer = new StreamWriter (outputPath)) { writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Sdk\""); writer.WriteLine ($" }}"); writer.WriteLine ($" }},"); - writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net6\": {{"); - writer.WriteLine ($" \"kind\": \"sdk\","); - writer.WriteLine ($" \"version\": \"{net6Version}\","); - writer.WriteLine ($" \"alias-to\": {{"); - writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Sdk\""); - writer.WriteLine ($" }}"); - writer.WriteLine ($" }},"); if (hasWindows) { writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net8\": {{"); writer.WriteLine ($" \"kind\": \"sdk\","); @@ -103,15 +91,6 @@ using (TextWriter writer = new StreamWriter (outputPath)) { writer.WriteLine ($" \"win-arm64\": \"Microsoft.{platform}.Windows.Sdk\","); writer.WriteLine ($" }}"); writer.WriteLine ($" }},"); - writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net6\": {{"); - writer.WriteLine ($" \"kind\": \"sdk\","); - writer.WriteLine ($" \"version\": \"{net6Version}\","); - writer.WriteLine ($" \"alias-to\": {{"); - writer.WriteLine ($" \"win-x64\": \"Microsoft.{platform}.Windows.Sdk\","); - writer.WriteLine ($" \"win-x86\": \"Microsoft.{platform}.Windows.Sdk\","); - writer.WriteLine ($" \"win-arm64\": \"Microsoft.{platform}.Windows.Sdk\","); - writer.WriteLine ($" }}"); - writer.WriteLine ($" }},"); } writer.WriteLine ($" \"Microsoft.{platform}.Ref\": {{"); writer.WriteLine ($" \"kind\": \"framework\","); diff --git a/dotnet/targets/Xamarin.Shared.Sdk.MultiTarget.template.targets b/dotnet/targets/Xamarin.Shared.Sdk.MultiTarget.template.targets deleted file mode 100644 index 00e8e760d0..0000000000 --- a/dotnet/targets/Xamarin.Shared.Sdk.MultiTarget.template.targets +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/eng/Versions.props b/eng/Versions.props index 78b25afed1..2f6496c078 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -11,7 +11,6 @@ 7.0.100-alpha.1.21601.1 0.11.4-alpha.23163.1 - $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) diff --git a/external/MonoTouch.Dialog b/external/MonoTouch.Dialog index 558958b0a2..94359c74ef 160000 --- a/external/MonoTouch.Dialog +++ b/external/MonoTouch.Dialog @@ -1 +1 @@ -Subproject commit 558958b0a2de19036cf6fdd21401573a65239017 +Subproject commit 94359c74ef481ce7b5daa28b890f35a6e77d94c8 diff --git a/external/Touch.Unit b/external/Touch.Unit index b85fb26cc0..8d80e1f104 160000 --- a/external/Touch.Unit +++ b/external/Touch.Unit @@ -1 +1 @@ -Subproject commit b85fb26cc07f5103a24ce41dc0819d15e6a5dbe6 +Subproject commit 8d80e1f10414ec85afa14c8c45a05334eb37c6dd diff --git a/tests/dotnet/UnitTests/ProjectTest.cs b/tests/dotnet/UnitTests/ProjectTest.cs index 39e90b7222..4279cbcec0 100644 --- a/tests/dotnet/UnitTests/ProjectTest.cs +++ b/tests/dotnet/UnitTests/ProjectTest.cs @@ -1032,18 +1032,10 @@ namespace Xamarin.Tests { Clean (project_path); var properties = GetDefaultProperties (runtimeIdentifiers); - var result = DotNet.AssertBuild (project_path, properties); - AssertThatLinkerExecuted (result); - var infoPlistPath = GetInfoPListPath (platform, appPath); - Assert.That (infoPlistPath, Does.Exist, "Info.plist"); - var infoPlist = PDictionary.FromFile (infoPlistPath)!; - Assert.AreEqual ("com.xamarin.mysimpleapp", infoPlist.GetString ("CFBundleIdentifier").Value, "CFBundleIdentifier"); - Assert.AreEqual ("MySimpleApp", infoPlist.GetString ("CFBundleDisplayName").Value, "CFBundleDisplayName"); - Assert.AreEqual ("6.0", infoPlist.GetString ("CFBundleVersion").Value, "CFBundleVersion"); - Assert.AreEqual ("6.0", infoPlist.GetString ("CFBundleShortVersionString").Value, "CFBundleShortVersionString"); - - var appExecutable = GetNativeExecutable (platform, appPath); - ExecuteWithMagicWordAndAssert (platform, runtimeIdentifiers, appExecutable); + var result = DotNet.AssertBuildFailure (project_path, properties); + var errors = BinLog.GetBuildLogErrors (result.BinLogPath).ToList (); + Assert.AreEqual (1, errors.Count, "Error Count"); + Assert.That (errors [0].Message, Does.Contain ("To build this project, the following workloads must be installed: "), "Error message"); } [Test]