From fcf5a477f351417dc062293c5ab5b918140db42f Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Wed, 2 Dec 2020 15:47:12 +0100 Subject: [PATCH 01/13] Remove custom types marking for types which XA does not own for netcore This is or will be handled by BCL libraries and XA tooling should try not to interfere with more fine tuned handling done by BCL. --- .../ApplyPreserveAttributeBase.cs | 36 ++++++------------- .../Microsoft.Android.Sdk.ILLink.csproj | 2 ++ src/Microsoft.Android.Sdk.ILLink/SetupStep.cs | 1 - .../ILLink/ILLink.LinkAttributes.xml | 10 ++++++ src/Mono.Android/Mono.Android.csproj | 2 ++ 5 files changed, 24 insertions(+), 27 deletions(-) create mode 100644 src/Mono.Android/ILLink/ILLink.LinkAttributes.xml diff --git a/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs b/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs index 8f0ea655283..bd8a53024c1 100644 --- a/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs +++ b/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs @@ -11,10 +11,7 @@ namespace Microsoft.Android.Sdk.ILLink { - public abstract class ApplyPreserveAttributeBase : BaseSubStep { - - // set 'removeAttribute' to true if you want the preserved attribute to be removed from the final assembly - protected abstract bool IsPreservedAttribute (ICustomAttributeProvider provider, CustomAttribute attribute, out bool removeAttribute); + public class ApplyPreserveAttribute : BaseSubStep { public override SubStepTargets Targets { get { @@ -66,7 +63,7 @@ public override void ProcessEvent (EventDefinition @event) void MarkMethodIfPreserved (MethodDefinition method) { - foreach (var attribute in GetPreserveAttributes (method)) + foreach (var attribute in GetPreserveAttributes (method)) MarkMethod (method, attribute); } @@ -126,6 +123,9 @@ void PreserveUnconditional (IMetadataTokenProvider provider) void TryApplyPreserveAttribute (TypeDefinition type) { + if (!type.HasCustomAttributes) + return; + foreach (var attribute in GetPreserveAttributes (type)) { Annotations.Mark (type); @@ -138,28 +138,12 @@ void TryApplyPreserveAttribute (TypeDefinition type) } } - List GetPreserveAttributes (ICustomAttributeProvider provider) + static IEnumerable GetPreserveAttributes (ICustomAttributeProvider provider) { - List attrs = new List (); - - if (!provider.HasCustomAttributes) - return attrs; - - var attributes = provider.CustomAttributes; - - for (int i = attributes.Count - 1; i >= 0; i--) { - var attribute = attributes [i]; - - bool remote_attribute; - if (!IsPreservedAttribute (provider, attribute, out remote_attribute)) - continue; - - attrs.Add (attribute); - if (remote_attribute) - attributes.RemoveAt (i); - } - - return attrs; + return provider.CustomAttributes.Where (a => { + var type = a.Constructor.DeclaringType; + return type.Namespace == "Android.Runtime" && type.Name == "PreserveAttribute"; + }); } } } diff --git a/src/Microsoft.Android.Sdk.ILLink/Microsoft.Android.Sdk.ILLink.csproj b/src/Microsoft.Android.Sdk.ILLink/Microsoft.Android.Sdk.ILLink.csproj index 6e66df24856..82e7b6d69a4 100644 --- a/src/Microsoft.Android.Sdk.ILLink/Microsoft.Android.Sdk.ILLink.csproj +++ b/src/Microsoft.Android.Sdk.ILLink/Microsoft.Android.Sdk.ILLink.csproj @@ -28,6 +28,7 @@ + @@ -36,6 +37,7 @@ + diff --git a/src/Microsoft.Android.Sdk.ILLink/SetupStep.cs b/src/Microsoft.Android.Sdk.ILLink/SetupStep.cs index e257aa711c9..f4896c951cc 100644 --- a/src/Microsoft.Android.Sdk.ILLink/SetupStep.cs +++ b/src/Microsoft.Android.Sdk.ILLink/SetupStep.cs @@ -43,7 +43,6 @@ protected override void Process () subSteps2.Add (new PreserveApplications ()); subSteps2.Add (new PreserveRegistrations (cache)); subSteps2.Add (new PreserveJavaInterfaces ()); - subSteps2.Add (new RemoveAttributes ()); InsertAfter (new FixAbstractMethodsStep (cache), "RemoveUnreachableBlocksStep"); InsertAfter (subSteps2, "RemoveUnreachableBlocksStep"); diff --git a/src/Mono.Android/ILLink/ILLink.LinkAttributes.xml b/src/Mono.Android/ILLink/ILLink.LinkAttributes.xml new file mode 100644 index 00000000000..14ca00dde2b --- /dev/null +++ b/src/Mono.Android/ILLink/ILLink.LinkAttributes.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/Mono.Android/Mono.Android.csproj b/src/Mono.Android/Mono.Android.csproj index 8377a02c8f9..0eb1e062cd0 100644 --- a/src/Mono.Android/Mono.Android.csproj +++ b/src/Mono.Android/Mono.Android.csproj @@ -85,6 +85,8 @@ + + From 6f2502ce6529280f5485dc445920bc08e39abd7f Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Wed, 2 Dec 2020 23:42:33 +0100 Subject: [PATCH 02/13] Updated expected list of files --- .../PackagingTest.cs | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs index c33a5c6125c..7ee27203316 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs @@ -87,36 +87,13 @@ public void CheckIncludedAssemblies () "Java.Interop.dll", "Microsoft.Win32.Primitives.dll", "Mono.Android.dll", - "System.Collections.NonGeneric.dll", "System.ComponentModel.Primitives.dll", "System.Console.dll", - "System.Formats.Asn1.dll", - "System.IO.Compression.Brotli.dll", - "System.IO.Compression.dll", - "System.IO.FileSystem.dll", "System.Linq.Expressions.dll", - "System.Net.Http.dll", - "System.Net.NameResolution.dll", - "System.Net.NetworkInformation.dll", "System.Net.Primitives.dll", - "System.Net.Quic.dll", - "System.Net.Security.dll", - "System.Net.Sockets.dll", "System.ObjectModel.dll", - "System.Private.Uri.dll", - "System.Private.Xml.dll", - "System.Private.Xml.Linq.dll", - "System.Runtime.CompilerServices.Unsafe.dll", - "System.Runtime.InteropServices.RuntimeInformation.dll", - "System.Runtime.Numerics.dll", - "System.Security.Cryptography.Encoding.dll", - "System.Security.Cryptography.OpenSsl.dll", - "System.Security.Cryptography.X509Certificates.dll", "System.Runtime.Serialization.Primitives.dll", - "System.Security.Cryptography.Algorithms.dll", "System.Security.Cryptography.Primitives.dll", - "System.Text.RegularExpressions.dll", - "System.Threading.Channels.dll", "System.Private.CoreLib.dll", "System.Collections.Concurrent.dll", "System.Collections.dll", From 848648e716ba9a6394938f992c60e2e93a187e9b Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Thu, 3 Dec 2020 10:39:59 +0100 Subject: [PATCH 03/13] PR review feedback --- .../ApplyPreserveAttributeBase.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs b/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs index bd8a53024c1..de2a9590cc0 100644 --- a/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs +++ b/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs @@ -140,10 +140,7 @@ void TryApplyPreserveAttribute (TypeDefinition type) static IEnumerable GetPreserveAttributes (ICustomAttributeProvider provider) { - return provider.CustomAttributes.Where (a => { - var type = a.Constructor.DeclaringType; - return type.Namespace == "Android.Runtime" && type.Name == "PreserveAttribute"; - }); + return provider.CustomAttributes.Where (a => a.Constructor.DeclaringType.Name == "PreserveAttribute"); } } } From e131184b2a97a8301b580d7302b383796e51137f Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Thu, 3 Dec 2020 10:42:26 +0100 Subject: [PATCH 04/13] More test updates --- .../Tests/Xamarin.Android.Build.Tests/PackagingTest.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs index 7ee27203316..fffd4ce4c7a 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs @@ -85,7 +85,6 @@ public void CheckIncludedAssemblies () var expectedFiles = Builder.UseDotNet ? new [] { "Java.Interop.dll", - "Microsoft.Win32.Primitives.dll", "Mono.Android.dll", "System.ComponentModel.Primitives.dll", "System.Console.dll", From 13abcaa4803ebe1493b276f2d79d2980dbf33ff2 Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Thu, 3 Dec 2020 14:35:19 +0100 Subject: [PATCH 05/13] More tests fixes --- tests/MSBuildDeviceIntegration/Tests/InstallTests.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs index 5d838700cdb..a4f8151a0e1 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs @@ -217,7 +217,11 @@ public void InstallWithoutSharedRuntime () // "The Shared Runtime should not have been installed."); var directorylist = GetContentFromAllOverrideDirectories (proj.PackageName); StringAssert.Contains ($"{proj.ProjectName}.dll", directorylist, $"{proj.ProjectName}.dll should exist in the .__override__ directory."); - StringAssert.Contains ($"System.dll", directorylist, $"System.dll should exist in the .__override__ directory."); + if (Builder.UseDotNet) + StringAssert.Contains ($"System.Private.CoreLib.dll", directorylist, $"System.Private.CoreLib.dll should exist in the .__override__ directory."); + else + StringAssert.Contains ($"System.dll", directorylist, $"System.dll should exist in the .__override__ directory."); + StringAssert.Contains ($"Mono.Android.dll", directorylist, $"Mono.Android.dll should exist in the .__override__ directory."); Assert.IsTrue (builder.Uninstall (proj), "unnstall should have succeeded."); } From e9be8429ec2435011394716ebc440a041e8fb7e1 Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Thu, 3 Dec 2020 19:30:53 +0100 Subject: [PATCH 06/13] Move DataContractSerializer linker test to disabled category for netcore --- .../Tests/InstallAndRunTests.cs | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index c9c29207983..0bdd90bfd6b 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -330,21 +330,32 @@ public class LinkModeFullClass { return sr.ReadToEnd (); }, }, - new BuildItem.Source ("Bug36250.cs") { - TextContent = () => { - using (var sr = new StreamReader (typeof (InstallAndRunTests).Assembly.GetManifestResourceStream ("Xamarin.Android.Build.Tests.Resources.LinkDescTest.Bug36250.cs"))) - return sr.ReadToEnd (); - }, - }, - new BuildItem.Source ("Bug35195.cs") { - TextContent = () => { - using (var sr = new StreamReader (typeof (InstallAndRunTests).Assembly.GetManifestResourceStream ("Xamarin.Android.Build.Tests.Resources.LinkDescTest.Bug35195.cs"))) - return sr.ReadToEnd (); - }, - }, }, }; + // sqlite-net-pcl does not work in .NET 6 + if (!Builder.UseDotNet) { + lib2.PackageReferences.Add (new Package { + Id = "sqlite-net-pcl", + Version = "1.7.335", + }); + + // https://github.com/dotnet/runtime/issues/45559 + lib2.Sources.Add (new BuildItem.Source ("Bug36250.cs") { + TextContent = () => { + using (var sr = new StreamReader (typeof (InstallAndRunTests).Assembly.GetManifestResourceStream ("Xamarin.Android.Build.Tests.Resources.LinkDescTest.Bug36250.cs"))) + return sr.ReadToEnd (); + }, + }); +) + lib2.Sources.Add (new BuildItem.Source ("Bug35195.cs") { + TextContent = () => { + using (var sr = new StreamReader (typeof (InstallAndRunTests).Assembly.GetManifestResourceStream ("Xamarin.Android.Build.Tests.Resources.LinkDescTest.Bug35195.cs"))) + return sr.ReadToEnd (); + }, + }); + } + proj = new XamarinFormsAndroidApplicationProject () { IsRelease = true, AndroidLinkModeRelease = linkMode, @@ -406,8 +417,9 @@ public class LinkModeFullClass { }, logcatPath, 90), "Linker test app did not run successfully."); var logcatOutput = File.ReadAllText (logcatPath); + var logcatOutputCut = Substring(Math.Min(logcatOutput.Length - 3000, logcatOutput), logcatOutput.Length); StringAssert.Contains ("[PASS]", logcatOutput); - StringAssert.DoesNotContain ("[FAIL]", logcatOutput); + StringAssert.DoesNotContain ("[FAIL]", logcatOutputCut); if (linkMode == AndroidLinkMode.Full) { StringAssert.Contains ("[LINKALLPASS]", logcatOutput); StringAssert.DoesNotContain ("[LINKALLFAIL]", logcatOutput); From ee6c8dfafad2c4e0e4ca6a04d267320edd9645eb Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Fri, 4 Dec 2020 08:39:04 +0100 Subject: [PATCH 07/13] Fix typo --- tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index 0bdd90bfd6b..e19775a6cc9 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -347,7 +347,7 @@ public class LinkModeFullClass { return sr.ReadToEnd (); }, }); -) + lib2.Sources.Add (new BuildItem.Source ("Bug35195.cs") { TextContent = () => { using (var sr = new StreamReader (typeof (InstallAndRunTests).Assembly.GetManifestResourceStream ("Xamarin.Android.Build.Tests.Resources.LinkDescTest.Bug35195.cs"))) From 932db4c7cd084686842db1a7dc0cba477ec3acab Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Fri, 4 Dec 2020 09:51:24 +0100 Subject: [PATCH 08/13] Undo accidentally pushed change --- tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index e19775a6cc9..c0fb70bc8db 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -417,9 +417,8 @@ public class LinkModeFullClass { }, logcatPath, 90), "Linker test app did not run successfully."); var logcatOutput = File.ReadAllText (logcatPath); - var logcatOutputCut = Substring(Math.Min(logcatOutput.Length - 3000, logcatOutput), logcatOutput.Length); StringAssert.Contains ("[PASS]", logcatOutput); - StringAssert.DoesNotContain ("[FAIL]", logcatOutputCut); + StringAssert.DoesNotContain ("[FAIL]", logcatOutput); if (linkMode == AndroidLinkMode.Full) { StringAssert.Contains ("[LINKALLPASS]", logcatOutput); StringAssert.DoesNotContain ("[LINKALLFAIL]", logcatOutput); From 894ea494f1248782936532aa331353a4412524b8 Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Fri, 4 Dec 2020 12:16:18 +0100 Subject: [PATCH 09/13] Update ILLink.LinkAttributes.xml --- src/Mono.Android/ILLink/ILLink.LinkAttributes.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mono.Android/ILLink/ILLink.LinkAttributes.xml b/src/Mono.Android/ILLink/ILLink.LinkAttributes.xml index 14ca00dde2b..0f8c426864d 100644 --- a/src/Mono.Android/ILLink/ILLink.LinkAttributes.xml +++ b/src/Mono.Android/ILLink/ILLink.LinkAttributes.xml @@ -1,5 +1,5 @@ - + @@ -7,4 +7,4 @@ - \ No newline at end of file + From e2898e4e4efd1c5f9bd9308430a4939992021318 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Mon, 7 Dec 2020 21:12:19 +0100 Subject: [PATCH 10/13] Rename the source file to reflect class name --- .../{ApplyPreserveAttributeBase.cs => ApplyPreserveAttribute.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/Microsoft.Android.Sdk.ILLink/{ApplyPreserveAttributeBase.cs => ApplyPreserveAttribute.cs} (100%) diff --git a/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs b/src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttribute.cs similarity index 100% rename from src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttributeBase.cs rename to src/Microsoft.Android.Sdk.ILLink/ApplyPreserveAttribute.cs From 43169d7bfe147a08e60adf210f17439c67581a3e Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Mon, 7 Dec 2020 21:41:03 +0100 Subject: [PATCH 11/13] Fix test after rebase --- .../Tests/InstallAndRunTests.cs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index c0fb70bc8db..cb7cc3ad0d3 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -330,16 +330,17 @@ public class LinkModeFullClass { return sr.ReadToEnd (); }, }, + new BuildItem.Source ("Bug35195.cs") { + TextContent = () => { + using (var sr = new StreamReader (typeof (InstallAndRunTests).Assembly.GetManifestResourceStream ("Xamarin.Android.Build.Tests.Resources.LinkDescTest.Bug35195.cs"))) + return sr.ReadToEnd (); + }, + }, }, }; // sqlite-net-pcl does not work in .NET 6 if (!Builder.UseDotNet) { - lib2.PackageReferences.Add (new Package { - Id = "sqlite-net-pcl", - Version = "1.7.335", - }); - // https://github.com/dotnet/runtime/issues/45559 lib2.Sources.Add (new BuildItem.Source ("Bug36250.cs") { TextContent = () => { @@ -347,13 +348,6 @@ public class LinkModeFullClass { return sr.ReadToEnd (); }, }); - - lib2.Sources.Add (new BuildItem.Source ("Bug35195.cs") { - TextContent = () => { - using (var sr = new StreamReader (typeof (InstallAndRunTests).Assembly.GetManifestResourceStream ("Xamarin.Android.Build.Tests.Resources.LinkDescTest.Bug35195.cs"))) - return sr.ReadToEnd (); - }, - }); } proj = new XamarinFormsAndroidApplicationProject () { From d30b2f04f81662c66eaf94dd56cdf0bd6ebe3457 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Mon, 7 Dec 2020 21:42:59 +0100 Subject: [PATCH 12/13] Update comment --- tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index cb7cc3ad0d3..ecbe02bb1f1 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -339,8 +339,8 @@ public class LinkModeFullClass { }, }; - // sqlite-net-pcl does not work in .NET 6 if (!Builder.UseDotNet) { + // DataContractSerializer is not trimming safe // https://github.com/dotnet/runtime/issues/45559 lib2.Sources.Add (new BuildItem.Source ("Bug36250.cs") { TextContent = () => { From 8383257d0aa0e87db8e698fa9969fac31e6b1690 Mon Sep 17 00:00:00 2001 From: Radek Doulik Date: Tue, 8 Dec 2020 10:00:57 +0100 Subject: [PATCH 13/13] Fix build of test --- .../Resources/LinkDescTest/MainActivityReplacement.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/MainActivityReplacement.cs b/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/MainActivityReplacement.cs index 4dbea4e2ceb..da9757adabc 100644 --- a/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/MainActivityReplacement.cs +++ b/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/MainActivityReplacement.cs @@ -117,8 +117,9 @@ protected override void OnCreate(Bundle bundle) Android.Util.Log.Info(TAG, LinkTestLib.Bug21578.MulticastOption_ShouldNotBeStripped()); Android.Util.Log.Info(TAG, LinkTestLib.Bug21578.MulticastOption_ShouldNotBeStripped2()); Android.Util.Log.Info(TAG, LinkTestLib.Bug35195.AttemptCreateTable()); +#if !NET Android.Util.Log.Info(TAG, LinkTestLib.Bug36250.SerializeSearchRequestWithDictionary()); - +#endif Android.Util.Log.Info(TAG, "All regression tests completed."); } }