From c1953a54f60bae967a2a5f90ba3176cc987283c1 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Tue, 17 Sep 2024 16:22:04 +0200 Subject: [PATCH] [msbuild] Use ILRepack as a dotnet tool. (#21240) This is one step towards removing the dependency on having Mono installed during the build. For some reason that also ended up requiring a few nullability issues in the msbuild tests. --- .config/dotnet-tools.json | 6 +++ msbuild/ILMerge.targets | 5 +- .../TaskTests/CompileAppManifestTaskTests.cs | 12 ++--- .../TaskTests/CompileEntitlementsTaskTests.cs | 46 +++++++++---------- .../ResolveNativeReferencesTaskTest.cs | 4 +- 5 files changed, 40 insertions(+), 33 deletions(-) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index e568e8d0517e..011cf03bc23f 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -7,6 +7,12 @@ "commands": [ "t4" ] + }, + "dotnet-ilrepack": { + "version": "1.0.0", + "commands": [ + "ilrepack" + ] } } } diff --git a/msbuild/ILMerge.targets b/msbuild/ILMerge.targets index 27c7e82b8338..35ff9af16f5b 100644 --- a/msbuild/ILMerge.targets +++ b/msbuild/ILMerge.targets @@ -71,6 +71,7 @@ + @@ -85,9 +86,9 @@ $(ILRepackArgs) "/lib:$(NetstandardDirectory)" - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono + $(MSBuildThisFileDirectory)../builds/downloads/dotnet/dotnet - + diff --git a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/CompileAppManifestTaskTests.cs b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/CompileAppManifestTaskTests.cs index bc84da45a258..94463d1d8ab1 100644 --- a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/CompileAppManifestTaskTests.cs +++ b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/CompileAppManifestTaskTests.cs @@ -36,7 +36,7 @@ public void DefaultMinimumOSVersion () ExecuteTask (task); - var plist = PDictionary.FromFile (task.CompiledAppManifest.ItemSpec); + var plist = PDictionary.FromFile (task.CompiledAppManifest!.ItemSpec)!; Assert.AreEqual (task.SdkVersion, plist.GetMinimumOSVersion (), "MinimumOSVersion"); } @@ -55,7 +55,7 @@ public void MainMinimumOSVersions () ExecuteTask (task); - var plist = PDictionary.FromFile (task.CompiledAppManifest.ItemSpec); + var plist = PDictionary.FromFile (task.CompiledAppManifest!.ItemSpec)!; Assert.AreEqual ("14.0", plist.GetMinimumOSVersion (), "MinimumOSVersion"); } @@ -81,7 +81,7 @@ public void MultipleMinimumOSVersions () ExecuteTask (task); - var plist = PDictionary.FromFile (task.CompiledAppManifest.ItemSpec); + var plist = PDictionary.FromFile (task.CompiledAppManifest!.ItemSpec)!; Assert.AreEqual ("13.0", plist.GetMinimumOSVersion (), "MinimumOSVersion"); } @@ -112,7 +112,7 @@ public void SupportedOSPlatformVersion () ExecuteTask (task); - var plist = PDictionary.FromFile (task.CompiledAppManifest.ItemSpec); + var plist = PDictionary.FromFile (task.CompiledAppManifest!.ItemSpec)!; Assert.AreEqual ("11.0", plist.GetMinimumOSVersion (), "MinimumOSVersion"); } @@ -123,7 +123,7 @@ public void MacCatalystVersionCheck () task.SupportedOSPlatformVersion = "14.2"; ExecuteTask (task); - var plist = PDictionary.FromFile (task.CompiledAppManifest.ItemSpec); + var plist = PDictionary.FromFile (task.CompiledAppManifest!.ItemSpec)!; Assert.AreEqual ("11.0", plist.GetMinimumSystemVersion (), "MinimumOSVersion"); } @@ -150,7 +150,7 @@ public void XcodeVariables (ApplePlatform platform, bool isSimulator, string exp task.SdkIsSimulator = isSimulator; ExecuteTask (task); - var plist = PDictionary.FromFile (task.CompiledAppManifest.ItemSpec); + var plist = PDictionary.FromFile (task.CompiledAppManifest!.ItemSpec)!; var variables = new string [] { "DTCompiler", "DTPlatformBuild", diff --git a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/CompileEntitlementsTaskTests.cs b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/CompileEntitlementsTaskTests.cs index 69af26045c4e..00c90fc9d9a1 100644 --- a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/CompileEntitlementsTaskTests.cs +++ b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/CompileEntitlementsTaskTests.cs @@ -11,12 +11,12 @@ namespace Xamarin.MacDev.Tasks { class CustomCompileEntitlements : CompileEntitlements { - protected override MobileProvision? GetMobileProvision (MobileProvisionPlatform platform, string uuid) + protected override MobileProvision GetMobileProvision (MobileProvisionPlatform platform, string uuid) { if (File.Exists (ProvisioningProfile)) return MobileProvision.LoadFromFile (ProvisioningProfile); - return null; + return null!; } } @@ -61,10 +61,10 @@ public void ValidateEntitlement () { var task = CreateEntitlementsTask (out var compiledEntitlements, out var archivedEntitlements); ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); - Assert.IsTrue (compiled.Get (EntitlementKeys.GetTaskAllow).Value, "#1"); - Assert.AreEqual ("32UV7A8CDE.com.xamarin.MySingleView", compiled.Get ("application-identifier").Value, "#2"); - Assert.AreEqual ("Z8CSQKJE7R", compiled.Get ("com.apple.developer.team-identifier").Value, "#3"); + var compiled = PDictionary.FromFile (compiledEntitlements)!; + Assert.IsTrue (compiled.Get (EntitlementKeys.GetTaskAllow)?.Value, "#1"); + Assert.AreEqual ("32UV7A8CDE.com.xamarin.MySingleView", compiled.Get ("application-identifier")?.Value, "#2"); + Assert.AreEqual ("Z8CSQKJE7R", compiled.Get ("com.apple.developer.team-identifier")?.Value, "#3"); Assert.AreEqual ("applinks:*.xamarin.com", compiled.GetAssociatedDomains ().ToStringArray ().First (), "#4"); Assert.AreEqual ("Z8CSQKJE7R.*", compiled.GetPassBookIdentifiers ().ToStringArray ().First (), "#5"); Assert.AreEqual ("Z8CSQKJE7R.com.xamarin.MySingleView", compiled.GetUbiquityKeyValueStore (), "#6"); @@ -113,7 +113,7 @@ public void CustomEntitlemements_String (string value) task.TargetFrameworkMoniker = ".NETCoreApp,Version=v6.0,Profile=maccatalyst"; task.CustomEntitlements = customEntitlements; ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); + var compiled = PDictionary.FromFile (compiledEntitlements)!; Assert.AreEqual (value ?? string.Empty, compiled.GetString ("com.xamarin.custom.entitlement")?.Value, "#1"); } @@ -131,7 +131,7 @@ public void CustomEntitlemements_StringArray () task.TargetFrameworkMoniker = ".NETCoreApp,Version=v6.0,Profile=maccatalyst"; task.CustomEntitlements = customEntitlements; ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); + var compiled = PDictionary.FromFile (compiledEntitlements)!; var array = compiled.GetArray ("com.xamarin.custom.entitlement"); Assert.NotNull (array, "array"); Assert.AreEqual (new string [] { "A", "B", "C" }, array.ToStringArray (), "array contents"); @@ -154,7 +154,7 @@ public void CustomEntitlemements_StringArray_CustomSeparator (string separator) task.TargetFrameworkMoniker = ".NETCoreApp,Version=v6.0,Profile=maccatalyst"; task.CustomEntitlements = customEntitlements; ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); + var compiled = PDictionary.FromFile (compiledEntitlements)!; var array = compiled.GetArray ("com.xamarin.custom.entitlement"); Assert.NotNull (array, "array"); Assert.AreEqual (new string [] { "A;B;C", "D", "E" }, array.ToStringArray (), "array contents"); @@ -166,7 +166,7 @@ public void AllowJit_Default () var task = CreateEntitlementsTask (out var compiledEntitlements); task.TargetFrameworkMoniker = ".NETCoreApp,Version=v6.0,Profile=maccatalyst"; ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); + var compiled = PDictionary.FromFile (compiledEntitlements)!; Assert.IsFalse (compiled.ContainsKey (EntitlementKeys.AllowExecutionOfJitCode), "#1"); } @@ -180,9 +180,9 @@ public void AllowJit_True () task.TargetFrameworkMoniker = ".NETCoreApp,Version=v6.0,Profile=maccatalyst"; task.CustomEntitlements = customEntitlements; ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); + var compiled = PDictionary.FromFile (compiledEntitlements)!; Assert.IsTrue (compiled.ContainsKey (EntitlementKeys.AllowExecutionOfJitCode), "#1"); - Assert.IsTrue (compiled.Get (EntitlementKeys.AllowExecutionOfJitCode).Value, "#2"); + Assert.IsTrue (compiled.Get (EntitlementKeys.AllowExecutionOfJitCode)?.Value, "#2"); } [Test] @@ -195,9 +195,9 @@ public void AllowJit_False () task.TargetFrameworkMoniker = ".NETCoreApp,Version=v6.0,Profile=maccatalyst"; task.CustomEntitlements = customEntitlements; ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); + var compiled = PDictionary.FromFile (compiledEntitlements)!; Assert.IsTrue (compiled.ContainsKey (EntitlementKeys.AllowExecutionOfJitCode), "#1"); - Assert.IsFalse (compiled.Get (EntitlementKeys.AllowExecutionOfJitCode).Value, "#2"); + Assert.IsFalse (compiled.Get (EntitlementKeys.AllowExecutionOfJitCode)?.Value, "#2"); Assert.That (archivedEntitlements, Does.Not.Exist, "No archived entitlements"); } @@ -212,7 +212,7 @@ public void AllowJit_None () task.TargetFrameworkMoniker = ".NETCoreApp,Version=v6.0,Profile=maccatalyst"; task.CustomEntitlements = customEntitlements; ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); + var compiled = PDictionary.FromFile (compiledEntitlements)!; Assert.IsFalse (compiled.ContainsKey (EntitlementKeys.AllowExecutionOfJitCode), "#1"); } @@ -226,14 +226,14 @@ public void AppIdentifierPrefix () task.TargetFrameworkMoniker = ".NETCoreApp,Version=v6.0,Profile=ios"; task.CustomEntitlements = customEntitlements; ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); + var compiled = PDictionary.FromFile (compiledEntitlements)!; Assert.IsFalse (compiled.ContainsKey (EntitlementKeys.AllowExecutionOfJitCode), "#1"); - var kag = ((PString) compiled ["keychain-access-group"]).Value; + var kag = ((PString?) compiled ["keychain-access-group"])?.Value; Assert.That (kag, Is.EqualTo ("32UV7A8CDE.org.xamarin"), "value 1"); - var archived = PDictionary.FromFile (archivedEntitlements); + var archived = PDictionary.FromFile (archivedEntitlements)!; Assert.IsTrue (archived.ContainsKey ("keychain-access-group"), "archived"); - var archivedKag = ((PString) archived ["keychain-access-group"]).Value; + var archivedKag = ((PString?) archived ["keychain-access-group"])?.Value; Assert.That (archivedKag, Is.EqualTo ("32UV7A8CDE.org.xamarin"), "archived value 1"); } @@ -247,14 +247,14 @@ public void TeamIdentifierPrefix () task.TargetFrameworkMoniker = ".NETCoreApp,Version=v6.0,Profile=ios"; task.CustomEntitlements = customEntitlements; ExecuteTask (task); - var compiled = PDictionary.FromFile (compiledEntitlements); + var compiled = PDictionary.FromFile (compiledEntitlements)!; Assert.IsFalse (compiled.ContainsKey (EntitlementKeys.AllowExecutionOfJitCode), "#1"); - var kag = ((PString) compiled ["keychain-access-group"]).Value; + var kag = ((PString?) compiled ["keychain-access-group"])?.Value; Assert.That (kag, Is.EqualTo ("Z8CSQKJE7R.org.xamarin"), "value 1"); - var archived = PDictionary.FromFile (archivedEntitlements); + var archived = PDictionary.FromFile (archivedEntitlements)!; Assert.IsTrue (archived.ContainsKey ("keychain-access-group"), "archived"); - var archivedKag = ((PString) archived ["keychain-access-group"]).Value; + var archivedKag = ((PString?) archived ["keychain-access-group"])?.Value; Assert.That (archivedKag, Is.EqualTo ("Z8CSQKJE7R.org.xamarin"), "archived value 1"); } } diff --git a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/ResolveNativeReferencesTaskTest.cs b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/ResolveNativeReferencesTaskTest.cs index af53a66b3144..838d1be627ce 100644 --- a/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/ResolveNativeReferencesTaskTest.cs +++ b/tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/ResolveNativeReferencesTaskTest.cs @@ -39,7 +39,7 @@ public void Xcode12_x (string targetFrameworkMoniker, bool isSimulator, string a // in Xcode 12.1+ watchOS does not have an i386 architecture anymore // on Xcode 12.2+ you get arm64 for all (iOS, tvOS and watchOS) simulators var path = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location), "Resources", "xcf-xcode12.2.plist"); - var plist = PDictionary.FromFile (path); + var plist = PDictionary.FromFile (path)!; var result = ResolveNativeReferences.TryResolveXCFramework (log, plist, "N/A", targetFrameworkMoniker, isSimulator, architecture, out var frameworkPath); Assert.AreEqual (result, !string.IsNullOrEmpty (expected), "result"); Assert.That (frameworkPath, Is.EqualTo (expected), "frameworkPath"); @@ -52,7 +52,7 @@ public void Xcode12_x (string targetFrameworkMoniker, bool isSimulator, string a public void PreXcode12 (string targetFrameworkMoniker, bool isSimulator, string architecture, string expected) { var path = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location), "Resources", "xcf-prexcode12.plist"); - var plist = PDictionary.FromFile (path); + var plist = PDictionary.FromFile (path)!; var result = ResolveNativeReferences.TryResolveXCFramework (log, plist, "N/A", targetFrameworkMoniker, isSimulator, architecture, out var frameworkPath); Assert.AreEqual (result, !string.IsNullOrEmpty (expected), "result"); Assert.That (frameworkPath, Is.EqualTo (expected), "frameworkPath");