diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml
index ed8514e4c9c..0796a5fb81e 100644
--- a/build-tools/automation/azure-pipelines.yaml
+++ b/build-tools/automation/azure-pipelines.yaml
@@ -203,6 +203,16 @@ extends:
artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab
artifactFolder: $(DotNetTargetFramework)-NoAot
+ - template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml@self
+ parameters:
+ configuration: $(XA.Build.Configuration)
+ testName: Mono.Android.NET_Tests-TrimModePartial
+ project: tests/Mono.Android-Tests/Runtime-Microsoft.Android.Sdk/Mono.Android.NET-Tests.csproj
+ testResultsFiles: TestResult-Mono.Android.NET_Tests-$(XA.Build.Configuration)TrimModePartial.xml
+ extraBuildArgs: -p:TestsFlavor=TrimModePartial -p:TrimMode=partial
+ artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab
+ artifactFolder: $(DotNetTargetFramework)-TrimModePartial
+
- template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml@self
parameters:
configuration: $(XA.Build.Configuration)
diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets
index 7e95621a2d2..f4b2c338709 100644
--- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets
+++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets
@@ -114,6 +114,8 @@
true
false
true
+
+ <_DefaultValueAttributeSupport Condition="'$(_DefaultValueAttributeSupport)' == '' and '$(TrimMode)' == 'partial'">true
false
$(AvoidEmitForPerformance)
true
diff --git a/tests/Mono.Android-Tests/Mono.Android-Test.Shared.projitems b/tests/Mono.Android-Tests/Mono.Android-Test.Shared.projitems
index 0b1ccf1d595..a13accab96d 100644
--- a/tests/Mono.Android-Tests/Mono.Android-Test.Shared.projitems
+++ b/tests/Mono.Android-Tests/Mono.Android-Test.Shared.projitems
@@ -48,6 +48,7 @@
+
diff --git a/tests/Mono.Android-Tests/Runtime-Microsoft.Android.Sdk/Mono.Android.NET-Tests.csproj b/tests/Mono.Android-Tests/Runtime-Microsoft.Android.Sdk/Mono.Android.NET-Tests.csproj
index d8affbe62dd..ad1e6e8e7fa 100644
--- a/tests/Mono.Android-Tests/Runtime-Microsoft.Android.Sdk/Mono.Android.NET-Tests.csproj
+++ b/tests/Mono.Android-Tests/Runtime-Microsoft.Android.Sdk/Mono.Android.NET-Tests.csproj
@@ -38,7 +38,8 @@
r8
full
- true
+ true
+ <_DefaultValueAttributeSupport Condition="'$(TrimMode)' == 'full'">true
diff --git a/tests/Mono.Android-Tests/System.Xml/XmlSerializer.cs b/tests/Mono.Android-Tests/System.Xml/XmlSerializer.cs
new file mode 100644
index 00000000000..61cb3ce56a9
--- /dev/null
+++ b/tests/Mono.Android-Tests/System.Xml/XmlSerializer.cs
@@ -0,0 +1,23 @@
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+using NUnit.Framework;
+
+namespace System.XmlTests {
+ public class C {
+ [DefaultValue(typeof(C), "c")]
+ public Type? T { get; }
+ }
+
+ [TestFixture]
+ public class XmlSerializerTest {
+
+ [Test]
+ public void TrimmingDefaultValueAttribute ()
+ {
+ // Context: https://github.com/dotnet/runtime/issues/109724
+ var s = new XmlSerializer(typeof(C));
+ _ = new C().T; // Prevent C.T from being removed by trimming
+ }
+ }
+}