Skip to content

Commit 51fb93e

Browse files
[One .NET] support for multiple $(RuntimeIdentifiers) (#4767)
For .NET 5, obsolete the `$(AndroidSupportedAbis)` MSBuild property and replace with the `$(RuntimeIdentifiers)` MSBuild property. The `$(AndroidSupportedAbis)` MSBuild property has long been used to control which Android ABIs are included in a `.apk` or `.aab` file, unless `$(AndroidCreatePackagePerAbi)`=True. The .NET Core analogue is the [`$(RuntimeIdentifiers)` property][0], which is a `;`-separated list of "RID" values from the [.NET Core RID catalog][1]. The mapping between `$(AndroidSupportedAbis)` and `$(RuntimeIdentifiers)` values is as follows: * armeabi-v7a: android.21-arm * arm64-v8a: android.21-arm64 * x86: android.21-x86 * x86_64: android.21-x64 Within a .NET 5+/`dotnet build` context, the `$(AndroidSupportedAbis)` property is *no longer supported*; `$(AndroidSupportedAbis)` will not be supported in .NET 5 because `$(RuntimeIdentifiers)` may be implicitly set based on the `$(TargetFrameworks)` property; it may not be possible to override `$(RuntimeIdentifiers)` "early enough" to take `$(AndroidSupportedAbis)` into consideration. If the `$(AndroidSupportedAbis)` property present, an XA0036 warning will be generated: warning XA0036: The 'AndroidSupportedAbis' MSBuild property is no longer supported. Edit the project file in a text editor, remove any uses of 'AndroidSupportedAbis', and use the 'RuntimeIdentifiers' MSBuild property instead.\ A `HelloAndroid.csproj` targeting all architectures might look like: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0-android</TargetFramework> <RuntimeIdentifiers>android.21-x86;android.21-x64;android.21-arm;android.21-arm64</RuntimeIdentifiers> <OutputType>Exe</OutputType> </PropertyGroup> </Project> To achieve this, we can do a nested `<MSBuild/>` call: <ItemGroup> <_RIDs Include="$(RuntimeIdentifiers)" /> </ItemGroup> <MSBuild Projects="$(MSBuildProjectFile)" Targets="_ComputeFilesToPublishForRuntimeIdentifiers" Properties="RuntimeIdentifier=%(_RIDs.Identity)"> <Output TaskParameter="TargetOutputs" ItemName="ResolvedFileToPublish" /> </MSBuild> For a new target: <Target Name="_ComputeFilesToPublishForRuntimeIdentifiers" DependsOnTargets="ResolveReferences;ComputeFilesToPublish" Returns="@(ResolvedFileToPublish)"> </Target> This is equivalent to what would happen in the legacy `_ResolveAssemblies` target. The linker then outputs files to: obj\Release\net5.0\$(RuntimeIdentifier)\linked\ One problem with this is that you receive multiple BCL assemblies for each architecture: obj\Release\net5.0\android.21-arm\linked\System.Linq.dll obj\Release\net5.0\android.21-arm64\linked\System.Linq.dll obj\Release\net5.0\android.21-x86\linked\System.Linq.dll obj\Release\net5.0\android.21-x64\linked\System.Linq.dll I created a `<ProcessAssemblies/>` MSBuild task that checks the MVID of each assembly to detect duplicates. Non-duplicates will be placed in a sub-directory within the `.apk` file, such as: * `assemblies\HelloAndroid.dll` * `assemblies\System.Linq.dll` * `assemblies\arm64-v8a\System.Private.CoreLib.dll` * `assemblies\armeabi-v7a\System.Private.CoreLib.dll` * `assemblies\x86\System.Private.CoreLib.dll` * `assemblies\x86_64\System.Private.CoreLib.dll` I had to make a few build & runtime changes for these ABI sub-directories to work. Other notes: * We must pass `@(IntermediateAssembly)` from the outer build to the nested `<MSBuild/>` calls. Otherwise, the inner calls look for `obj\Release\net5.0\android.21-arm\HelloAndroid.dll` instead of `obj\Release\net5.0\HelloAndroid.dll` that actually exists. * `_ComputeFilesToPublishForRuntimeIdentifiers` was running some extra targets causing `<ResolveSdks/>` to run 5 times for 4 ABIs. I had to make changes in `BuildOrder.targets` to fix this. * `<ResolveAssemblies/>` now sets `%(IntermediateLinkerOutput)` on each assembly item. This allows .NET 6 builds to support multiple linker directories. [0]: https://docs.microsoft.com/en-us/dotnet/core/tools/csproj#runtimeidentifiers [1]: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
1 parent cf9d46a commit 51fb93e

40 files changed

+729
-208
lines changed

Documentation/guides/DotNet5.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,24 @@ In .NET 5 the behavior of the following MSBuild tasks will change, but
6464

6565
## Changes to MSBuild properties
6666

67+
`$(AndroidSupportedAbis)` should not be used. Instead of:
68+
69+
```xml
70+
<PropertyGroup>
71+
<!-- Used in legacy Xamarin.Android projects -->
72+
<AndroidSupportedAbis>armeabi-v7a;arm64-v8a;x86;x86_64</AndroidSupportedAbis>
73+
</PropertyGroup>
74+
```
75+
76+
Instead use .NET's concept of [runtime identifiers][rids]:
77+
78+
```xml
79+
<PropertyGroup>
80+
<!-- Used going forward in .NET -->
81+
<RuntimeIdentifiers>android.21-arm;android.21-arm64;android.21-x86;android.21-x64</RuntimeIdentifiers>
82+
</PropertyGroup>
83+
```
84+
6785
`$(AndroidUseIntermediateDesignerFile)` will be `True` by default.
6886

6987
`$(AndroidBoundExceptionType)` will be `System` by default. This will
@@ -84,6 +102,7 @@ If Java binding is enabled with `@(InputJar)`, `@(EmbeddedJar)`,
84102
`@(LibraryProjectZip)`, etc. then `$(AllowUnsafeBlocks)` will default
85103
to `True`.
86104

105+
[rids]: https://docs.microsoft.com/dotnet/core/rid-catalog
87106
[abet-sys]: https://github.com/xamarin/xamarin-android/issues/4127
88107

89108
## Default file inclusion

Documentation/guides/messages/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ ms.date: 01/24/2020
4646
+ [XA0032](xa0032.md): Java SDK {requiredJavaForBuildTools} or above is required when using Android SDK Build-Tools {buildToolsVersion}.
4747
+ [XA0033](xa0033.md): Failed to get the Java SDK version because the returned value does not appear to contain a valid version number.
4848
+ [XA0034](xa0034.md): Failed to get the Java SDK version.
49+
+ [XA0035](xa0035.md): Failed to determine the Android ABI for the project.
50+
+ [XA0036](xa0036.md): $(AndroidSupportedAbis) is not supported in .NET 5 and higher.
4951
+ XA0100: EmbeddedNativeLibrary is invalid in Android Application projects. Please use AndroidNativeLibrary instead.
5052
+ [XA0101](xa0101.md): warning XA0101: @(Content) build action is not supported.
5153
+ [XA0102](xa0102.md): Generic `lint` Warning.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
title: Xamarin.Android error XA0035
3+
description: XA0035 error code
4+
ms.date: 06/17/2020
5+
---
6+
# Xamarin.Android error XA0035
7+
8+
## Issue
9+
10+
Xamarin.Android was not able to determine the application's target
11+
[Android ABIs][abis] as specified by the `.csproj` file.
12+
13+
[abis]: https://developer.android.com/ndk/guides/abis
14+
15+
## Solution
16+
17+
Open the project file [in Visual Studio][edit-project-files] or another text
18+
editor and make sure all of the values in the `RuntimeIdentifiers` MSBuild
19+
property are valid:
20+
21+
```xml
22+
<PropertyGroup>
23+
<RuntimeIdentifiers>android.21-arm;android.21-arm64;android.21-x86;android.21-x64</RuntimeIdentifiers>
24+
</PropertyGroup>
25+
```
26+
27+
See the Microsoft documentation on [runtime identifiers][rids] for more
28+
information.
29+
30+
[edit-project-files]: https://docs.microsoft.com/visualstudio/msbuild/visual-studio-integration-msbuild#edit-project-files-in-visual-studio
31+
[rids]: https://docs.microsoft.com/dotnet/core/rid-catalog
32+
33+
## Example messages
34+
35+
```
36+
error XA0035: Unable to determine the Android ABI from the value 'XYZ'. Edit the project file in a text editor and set the 'RuntimeIdentifiers' MSBuild property to contain only valid identifiers for the Android platform.
37+
```
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
title: Xamarin.Android warning XA0036
3+
description: XA0036 warning code
4+
ms.date: 06/17/2020
5+
---
6+
# Xamarin.Android warning XA0036
7+
8+
## Issue
9+
10+
The `$(AndroidSupportedAbis)` MSBuild property is no longer supported
11+
in .NET 5 and higher.
12+
13+
## Solution
14+
15+
Open the project file [in Visual Studio][edit-project-files] or
16+
another text editor and remove `<AndroidSupportedAbis/>`. Use the
17+
`RuntimeIdentifiers` MSBuild property instead:
18+
19+
```xml
20+
<PropertyGroup>
21+
<RuntimeIdentifiers>android.21-arm;android.21-arm64;android.21-x86;android.21-x64</RuntimeIdentifiers>
22+
</PropertyGroup>
23+
```
24+
25+
See the Microsoft documentation on [runtime identifiers][rids] for more
26+
information.
27+
28+
[edit-project-files]: https://docs.microsoft.com/visualstudio/msbuild/visual-studio-integration-msbuild#edit-project-files-in-visual-studio
29+
[rids]: https://docs.microsoft.com/dotnet/core/rid-catalog
30+
31+
## Example messages
32+
33+
```
34+
warning XA0036: The 'AndroidSupportedAbis' MSBuild property is no longer supported. Edit the project file in a text editor, remove any uses of 'AndroidSupportedAbis', and use the 'RuntimeIdentifiers' MSBuild property instead.
35+
```

src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.AssemblyResolution.targets

Lines changed: 70 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,42 +10,54 @@ _ResolveAssemblies MSBuild target.
1010

1111
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
1212

13-
<Target Name="_ResolveAssemblies" DependsOnTargets="ComputeFilesToPublish">
13+
<UsingTask TaskName="Xamarin.Android.Tasks.ProcessAssemblies" AssemblyFile="$(_XamarinAndroidBuildTasksAssembly)" />
1414

15-
<!--
16-
TODO: not yet complete.
17-
18-
Two things here are placeholders for later:
19-
20-
* %(HasMonoAndroidReference) is always True to disable
21-
performance improvements around $(TargetFrameworkVersion)
22-
detection.
15+
<Target Name="_ComputeFilesToPublishForRuntimeIdentifiers"
16+
DependsOnTargets="_FixupIntermediateAssembly;ResolveReferences;ComputeFilesToPublish"
17+
Returns="@(ResolvedFileToPublish)">
18+
</Target>
2319

24-
* Is there better metadata to use other than %(NuGetPackageId)
25-
to determine which runtime components are coming from our
26-
known @(FrameworkReference)s?
27-
-->
20+
<Target Name="_FixupIntermediateAssembly" Condition=" '$(_OuterIntermediateAssembly)' != '' ">
21+
<ItemGroup>
22+
<IntermediateAssembly Remove="@(IntermediateAssembly)" />
23+
<IntermediateAssembly Include="$(_OuterIntermediateAssembly)" />
24+
</ItemGroup>
25+
</Target>
2826

27+
<Target Name="_ResolveAssemblies">
28+
<ItemGroup>
29+
<_RIDs Include="$(RuntimeIdentifier)" Condition=" '$(RuntimeIdentifiers)' == '' " />
30+
<_RIDs Include="$(RuntimeIdentifiers)" Condition=" '$(RuntimeIdentifiers)' != '' " />
31+
</ItemGroup>
32+
<PropertyGroup>
33+
<_AdditionalProperties>_ComputeFilesToPublishForRuntimeIdentifiers=true;_OuterIntermediateAssembly=@(IntermediateAssembly)</_AdditionalProperties>
34+
</PropertyGroup>
35+
<MSBuild
36+
Projects="$(MSBuildProjectFile)"
37+
Targets="_ComputeFilesToPublishForRuntimeIdentifiers"
38+
Properties="RuntimeIdentifier=%(_RIDs.Identity);$(_AdditionalProperties)">
39+
<Output TaskParameter="TargetOutputs" ItemName="ResolvedFileToPublish" />
40+
</MSBuild>
41+
<ItemGroup>
42+
<_ResolvedAssemblyFiles Include="@(ResolvedFileToPublish)" Condition=" '%(ResolvedFileToPublish.Extension)' == '.dll' " />
43+
</ItemGroup>
44+
<ProcessAssemblies
45+
InputAssemblies="@(_ResolvedAssemblyFiles)"
46+
IntermediateAssemblyDirectory="$(MonoAndroidIntermediateAssemblyDir)"
47+
LinkMode="$(AndroidLinkMode)">
48+
<Output TaskParameter="OutputAssemblies" ItemName="ResolvedAssemblies" />
49+
<Output TaskParameter="ShrunkAssemblies" ItemName="_ShrunkAssemblies" />
50+
</ProcessAssemblies>
2951
<ItemGroup>
3052
<ResolvedFrameworkAssemblies
31-
Include="@(ResolvedFileToPublish)"
32-
Condition=" '%(ResolvedFileToPublish.Extension)' == '.dll' and '%(ResolvedFileToPublish.NuGetPackageId)' == 'Microsoft.Android.Runtime.$(RuntimeIdentifier)' "
33-
HasMonoAndroidReference="True"
34-
/>
35-
<ResolvedFrameworkAssemblies
36-
Include="@(ResolvedFileToPublish)"
37-
Condition=" '%(ResolvedFileToPublish.Extension)' == '.dll' and '%(ResolvedFileToPublish.NuGetPackageId)' == 'Microsoft.NETCore.App.Runtime.$(RuntimeIdentifier)' "
38-
HasMonoAndroidReference="True"
53+
Include="@(ResolvedAssemblies)"
54+
Condition=" '%(ResolvedAssemblies.FrameworkAssembly)' == 'true' "
3955
/>
4056
<ResolvedUserAssemblies
41-
Include="@(ResolvedFileToPublish)"
42-
Exclude="@(ResolvedFrameworkAssemblies)"
43-
Condition=" '%(ResolvedFileToPublish.Extension)' == '.dll' "
44-
HasMonoAndroidReference="True"
57+
Include="@(ResolvedAssemblies)"
58+
Condition=" '%(ResolvedAssemblies.FrameworkAssembly)' != 'true' "
4559
/>
46-
<ResolvedAssemblies Include="@(ResolvedFrameworkAssemblies);@(ResolvedUserAssemblies)" />
4760
</ItemGroup>
48-
4961
<Hash ItemsToHash="@(ResolvedAssemblies)">
5062
<Output TaskParameter="HashResult" PropertyName="_ResolvedUserAssembliesHash" />
5163
</Hash>
@@ -60,4 +72,35 @@ _ResolveAssemblies MSBuild target.
6072
</ItemGroup>
6173
</Target>
6274

75+
<Target Name="_PrepareAssemblies"
76+
DependsOnTargets="$(_PrepareAssembliesDependsOnTargets)">
77+
<ItemGroup Condition=" '$(AndroidLinkMode)' == 'None' ">
78+
<_ResolvedAssemblies Include="@(ResolvedAssemblies->'%(IntermediateLinkerOutput)')" />
79+
<_ResolvedUserAssemblies Include="@(ResolvedUserAssemblies->'%(IntermediateLinkerOutput)')" />
80+
<_ResolvedFrameworkAssemblies Include="@(ResolvedFrameworkAssemblies->'%(IntermediateLinkerOutput)')" />
81+
<_ShrunkAssemblies Include="@(_ResolvedAssemblies)" />
82+
<_ShrunkUserAssemblies Include="@(_ResolvedUserAssemblies)" />
83+
<_ShrunkFrameworkAssemblies Include="@(_ResolvedFrameworkAssemblies)" />
84+
</ItemGroup>
85+
<ItemGroup Condition=" '$(AndroidLinkMode)' != 'None' ">
86+
<_ResolvedAssemblies Include="@(ResolvedAssemblies)" />
87+
<_ResolvedUserAssemblies Include="@(ResolvedUserAssemblies)" />
88+
<_ResolvedFrameworkAssemblies Include="@(ResolvedFrameworkAssemblies)" />
89+
<_ShrunkFrameworkAssemblies
90+
Include="@(_ShrunkAssemblies)"
91+
Condition=" '%(_ShrunkAssemblies.FrameworkAssembly)' == 'true' "
92+
/>
93+
<_ShrunkUserAssemblies
94+
Include="@(_ShrunkAssemblies)"
95+
Condition=" '%(_ShrunkAssemblies.FrameworkAssembly)' != 'true' "
96+
/>
97+
</ItemGroup>
98+
<ItemGroup>
99+
<_ResolvedUserMonoAndroidAssemblies
100+
Include="@(_ResolvedUserAssemblies)"
101+
Condition=" '%(_ResolvedUserAssemblies.TargetFrameworkIdentifier)' == 'MonoAndroid' Or '%(_ResolvedUserAssemblies.HasMonoAndroidReference)' == 'True' "
102+
/>
103+
</ItemGroup>
104+
</Target>
105+
63106
</Project>

src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,8 @@ projects, these properties are set in Xamarin.Android.Legacy.targets.
4545
</BuildDependsOn>
4646
</PropertyGroup>
4747

48-
<PropertyGroup>
49-
<CompileDependsOn>
50-
_SetupDesignTimeBuildForCompile;
51-
_AddAndroidDefines;
52-
_IncludeLayoutBindingSources;
53-
AddLibraryJarsToBind;
54-
$(CompileDependsOn);
55-
</CompileDependsOn>
56-
<CoreCompileDependsOn>
57-
UpdateGeneratedFiles;
58-
$(CoreCompileDependsOn)
59-
</CoreCompileDependsOn>
48+
<!-- Targets that run unless we are running _ComputeFilesToPublishForRuntimeIdentifiers -->
49+
<PropertyGroup Condition=" '$(_ComputeFilesToPublishForRuntimeIdentifiers)' != 'true' ">
6050
<CoreResolveReferencesDependsOn>
6151
_SeparateAppExtensionReferences;
6252
_PrepareWearApplication;
@@ -71,6 +61,20 @@ projects, these properties are set in Xamarin.Android.Legacy.targets.
7161
AddEmbeddedJarsAsResources;
7262
AddEmbeddedReferenceJarsAsResources;
7363
</ResolveReferencesDependsOn>
64+
</PropertyGroup>
65+
66+
<PropertyGroup>
67+
<CompileDependsOn>
68+
_SetupDesignTimeBuildForCompile;
69+
_AddAndroidDefines;
70+
_IncludeLayoutBindingSources;
71+
AddLibraryJarsToBind;
72+
$(CompileDependsOn);
73+
</CompileDependsOn>
74+
<CoreCompileDependsOn>
75+
UpdateGeneratedFiles;
76+
$(CoreCompileDependsOn)
77+
</CoreCompileDependsOn>
7478
<DeferredBuildDependsOn>
7579
$(DeferredBuildDependsOn);
7680
UpdateAndroidResources;

src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Linker.targets

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ This file contains the .NET 5-specific targets to customize ILLink
1010
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
1111

1212
<Target Name="_PrepareLinking"
13+
Condition=" '$(PublishTrimmed)' == 'true' "
1314
AfterTargets="ComputeResolvedFilesToPublishList"
1415
DependsOnTargets="GetReferenceAssemblyPaths">
1516
<ItemGroup>
@@ -22,9 +23,7 @@ This file contains the .NET 5-specific targets to customize ILLink
2223
</ItemGroup>
2324
<PropertyGroup>
2425
<!-- make the output verbose to see what the linker is doing. FIXME: make dependent upon verbosity level -->
25-
<_ExtraTrimmerArgs>$(_ExtraTrimmerArgs) --verbose --custom-data XATargetFrameworkDirectories="$(_XATargetFrameworkDirectories)"</_ExtraTrimmerArgs>
26-
27-
<IntermediateLinkDir>$(MonoAndroidIntermediateAssemblyDir)</IntermediateLinkDir>
26+
<_ExtraTrimmerArgs>$(_ExtraTrimmerArgs) --verbose --deterministic --custom-data XATargetFrameworkDirectories="$(_XATargetFrameworkDirectories)"</_ExtraTrimmerArgs>
2827

2928
<!-- we don't want to ignore stuff we can't find -->
3029
<_ExtraTrimmerArgs>$(_ExtraTrimmerArgs) --skip-unresolved false</_ExtraTrimmerArgs>
@@ -43,4 +42,9 @@ This file contains the .NET 5-specific targets to customize ILLink
4342
</_TrimmerCustomSteps>
4443
</ItemGroup>
4544
</Target>
45+
46+
<Target Name="_LinkAssemblies"
47+
DependsOnTargets="_ResolveAssemblies;_CreatePackageWorkspace;$(_BeforeLinkAssemblies);_GenerateJniMarshalMethods;_LinkAssembliesNoShrink"
48+
/>
49+
4650
</Project>

src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Tooling.targets

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ called for "legacy" projects in Xamarin.Android.Legacy.targets.
5858
<RuntimeIdentifierToAbi
5959
Condition=" '$(AndroidApplication)' == 'true' "
6060
RuntimeIdentifier="$(RuntimeIdentifier)"
61+
RuntimeIdentifiers="$(RuntimeIdentifiers)"
6162
SupportedAbis="$(AndroidSupportedAbis)">
6263
<Output TaskParameter="SupportedAbis" PropertyName="AndroidSupportedAbis" />
6364
</RuntimeIdentifierToAbi>

src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.targets

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
<AndroidApplication Condition=" '$(AndroidApplication)' == '' And '$(OutputType)' == 'Exe' ">true</AndroidApplication>
1010
<AndroidApplication Condition=" '$(AndroidApplication)' == '' ">false</AndroidApplication>
1111
<SelfContained Condition=" '$(SelfContained)' == '' And '$(AndroidApplication)' == 'true' ">true</SelfContained>
12-
<RuntimeIdentifier Condition=" '$(RuntimeIdentifier)' == '' And '$(AndroidApplication)' == 'true' ">android.21-x86</RuntimeIdentifier>
12+
<!-- Prefer $(RuntimeIdentifiers) plural -->
13+
<RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)' == '' And '$(RuntimeIdentifiers)' == '' And '$(AndroidApplication)' == 'true' ">android.21-arm64;android.21-x86</RuntimeIdentifiers>
14+
<RuntimeIdentifier Condition=" '$(RuntimeIdentifiers)' != '' And '$(RuntimeIdentifier)' != '' " />
1315
<AndroidManifest Condition=" '$(AndroidManifest)' == '' And '$(AndroidApplication)' == 'true' ">Properties\AndroidManifest.xml</AndroidManifest>
1416
<!-- We don't ever need a `static void Main` method, so switch to Library here-->
1517
<OutputType Condition=" '$(OutputType)' == 'Exe' ">Library</OutputType>

src/Xamarin.Android.Build.Tasks/Properties/Resources.Designer.cs

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)