diff --git a/Documentation/docs-mobile/building-apps/build-properties.md b/Documentation/docs-mobile/building-apps/build-properties.md
index 66f8774e70a..81e67edfc6b 100644
--- a/Documentation/docs-mobile/building-apps/build-properties.md
+++ b/Documentation/docs-mobile/building-apps/build-properties.md
@@ -1535,6 +1535,67 @@ If `DebugType` is not set or is the empty string, then the
`DebugSymbols` property controls whether or not the Application is
debuggable.
+## DiagnosticAddress
+
+A value provided by `dotnet-dsrouter` such as `127.0.0.1`, the IP
+address component of `$(DiagnosticConfiguration)` or `$DOTNET_DiagnosticPorts`.
+
+Implicitly enables the Mono diagnostic component, meaning that
+`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`.
+
+Defaults to `127.0.0.1`.
+
+## DiagnosticConfiguration
+
+A value provided by `dotnet-dsrouter` for `$DOTNET_DiagnosticPorts` such as:
+
+* `127.0.0.1:9000,suspend,connect`
+* `127.0.0.1:9000,nosuspend,connect`
+
+Note that the `,` character will need to be escaped with `%2c` if
+passed in command-line to `dotnet build`:
+
+```dotnetcli
+dotnet build -c Release -p:DiagnosticConfiguration=127.0.0.1:9000%2csuspend%2cconnect
+```
+
+This will automatically set the `$DOTNET_DiagnosticPorts` environment
+variable packaged inside the application.
+
+Implicitly enables the Mono diagnostic component, meaning that
+`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`.
+
+## DiagnosticListenMode
+
+A value provided by `dotnet-dsrouter` such as `connect`, the listening
+mode component of `$(DiagnosticConfiguration)` or `$DOTNET_DiagnosticPorts`.
+
+Implicitly enables the Mono diagnostic component, meaning that
+`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`.
+
+Defaults to `connect`.
+
+## DiagnosticPort
+
+A value provided by `dotnet-dsrouter` such as `9000`, the port
+component of `$(DiagnosticConfiguration)` or `$DOTNET_DiagnosticPorts`.
+
+Implicitly enables the Mono diagnostic component, meaning that
+`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`.
+
+Defaults to `9000`.
+
+## DiagnosticSuspend
+
+A boolean value provided by `dotnet-dsrouter` such as `true/suspend`
+or `false/nosuspend`, a component of `$(DiagnosticConfiguration)`
+or `$DOTNET_DiagnosticPorts`.
+
+Implicitly enables the Mono diagnostic component, meaning that
+`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`.
+
+Defaults to `false`.
+
## EmbedAssembliesIntoApk
A boolean property that
diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets
index c647dc91295..ee627e65d03 100644
--- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets
+++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets
@@ -72,7 +72,7 @@ properties that determine build ordering.
_ConvertCustomView;
$(_AfterConvertCustomView);
$(AfterGenerateAndroidManifest);
- _GenerateEnvironmentFiles;
+ _ReadAndroidManifest;
_CompileJava;
_CreateApplicationSharedLibraries;
_CompileDex;
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 7bf14ef1fcb..0adb893fe9e 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
@@ -43,8 +43,9 @@
obsolete
- $(EnableDiagnostics)
- false
+ $(EnableDiagnostics)
+ true
+ false
None
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs
index aedd58f29e2..cea5d2525d4 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs
@@ -1255,21 +1255,30 @@ public void AbiNameInIntermediateOutputPath ()
}
[Test]
- public void PackageNamingPolicy ([Values ("LowercaseMD5", "LowercaseCrc64")] string packageNamingPolicy)
+ [TestCase (true, "LowercaseMD5", "")]
+ [TestCase (true, "LowercaseCrc64", "")]
+ [TestCase (false, "LowercaseCrc64", "127.0.0.1:9000,suspend,connect")]
+ public void EnvironmentVariables (bool useInterpreter, string packageNamingPolicy, string diagnosticConfiguration)
{
var proj = new XamarinAndroidApplicationProject ();
- proj.SetProperty ("UseInterpreter", "true");
- proj.SetProperty ("AndroidPackageNamingPolicy", packageNamingPolicy);
+ proj.SetProperty ("UseInterpreter", useInterpreter.ToString ());
+ if (!string.IsNullOrEmpty (packageNamingPolicy))
+ proj.SetProperty ("AndroidPackageNamingPolicy", packageNamingPolicy);
+ if (!string.IsNullOrEmpty (diagnosticConfiguration))
+ proj.SetProperty ("DiagnosticConfiguration", diagnosticConfiguration);
proj.SetAndroidSupportedAbis ("armeabi-v7a", "x86");
using (var b = CreateApkBuilder ()) {
Assert.IsTrue (b.Build (proj), "build should have succeeded.");
var environment = b.Output.GetIntermediaryPath (Path.Combine ("__environment__.txt"));
FileAssert.Exists (environment);
var values = new List {
- $"__XA_PACKAGE_NAMING_POLICY__={packageNamingPolicy}"
+ $"__XA_PACKAGE_NAMING_POLICY__={packageNamingPolicy}",
+ "mono.enable_assembly_preload=0",
};
- values.Add ("mono.enable_assembly_preload=0");
- values.Add ("DOTNET_MODIFIABLE_ASSEMBLIES=Debug");
+ if (useInterpreter)
+ values.Add ("DOTNET_MODIFIABLE_ASSEMBLIES=Debug");
+ if (!string.IsNullOrEmpty (diagnosticConfiguration))
+ values.Add ($"DOTNET_DiagnosticPorts={diagnosticConfiguration}");
Assert.AreEqual (string.Join (Environment.NewLine, values), File.ReadAllText (environment).Trim ());
}
}
diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
index 5086a918125..9e9479a0486 100644
--- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
+++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
@@ -1470,7 +1470,7 @@ because xbuild doesn't support framework reference assemblies.
-
+
<_GenerateJavaStubsInputs Include="@(_AndroidMSBuildAllProjects)" />
<_GenerateJavaStubsInputs Include="$(_ResolvedUserAssembliesHashFile)" />
@@ -1631,11 +1631,12 @@ because xbuild doesn't support framework reference assemblies.
-
+
<_GeneratedAndroidEnvironment Include="__XA_PACKAGE_NAMING_POLICY__=$(AndroidPackageNamingPolicy)" />
<_GeneratedAndroidEnvironment Include="mono.enable_assembly_preload=0" Condition=" '$(AndroidEnablePreloadAssemblies)' != 'True' " />
<_GeneratedAndroidEnvironment Include="DOTNET_MODIFIABLE_ASSEMBLIES=Debug" Condition=" '$(AndroidIncludeDebugSymbols)' == 'true' and '$(AndroidUseInterpreter)' == 'true' " />
+ <_GeneratedAndroidEnvironment Include="DOTNET_DiagnosticPorts=$(DiagnosticConfiguration)" Condition=" '$(DiagnosticConfiguration)' != '' " />