diff --git a/Makefile b/Makefile index 5f4471a390e..d1e8d3798eb 100644 --- a/Makefile +++ b/Makefile @@ -149,7 +149,7 @@ TEST_APK_PROJECTS = \ # Syntax: $(call BUILD_TEST_APK,path/to/project.csproj) define BUILD_TEST_APK # Must use xabuild to ensure correct assemblies are resolved - MSBUILD="$(MSBUILD)" tools/scripts/xabuild /t:SignAndroidPackage $(1) + MSBUILD="$(MSBUILD)" tools/scripts/xabuild $(MSBUILD_FLAGS) /t:SignAndroidPackage $(1) endef # BUILD_TEST_APK run-apk-tests: diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/BuildApk.cs b/src/Xamarin.Android.Build.Tasks/Tasks/BuildApk.cs index c98b6f23379..cc37c749077 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/BuildApk.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/BuildApk.cs @@ -273,6 +273,10 @@ private void AddAssemblies (ZipArchiveEx apk) int count = 0; foreach (ITaskItem assembly in ResolvedUserAssemblies) { + + if (MonoAndroidHelper.IsReferenceAssembly (assembly.ItemSpec)) { + Log.LogWarning ($"{assembly.ItemSpec} is a reference assembly!"); + } // Add assembly apk.Archive.AddFile (assembly.ItemSpec, GetTargetDirectory (assembly.ItemSpec) + "/" + Path.GetFileName (assembly.ItemSpec), compressionMethod: CompressionMethod.Store); @@ -305,6 +309,9 @@ private void AddAssemblies (ZipArchiveEx apk) count = 0; // Add framework assemblies foreach (ITaskItem assembly in ResolvedFrameworkAssemblies) { + if (MonoAndroidHelper.IsReferenceAssembly (assembly.ItemSpec)) { + Log.LogWarning ($"{assembly.ItemSpec} is a reference assembly!"); + } apk.Archive.AddFile (assembly.ItemSpec, "assemblies/" + Path.GetFileName (assembly.ItemSpec), compressionMethod: CompressionMethod.Store); var config = Path.ChangeExtension (assembly.ItemSpec, "dll.config"); AddAssemblyConfigEntry (apk, config); diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs index 83921a11285..3793b77e161 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs @@ -8,6 +8,7 @@ using Mono.Security.Cryptography; using Xamarin.Android.Build.Utilities; using Xamarin.Tools.Zip; +using Mono.Cecil; #if MSBUILD using Microsoft.Build.Framework; @@ -286,6 +287,14 @@ public static bool IsFrameworkAssembly (string assembly, bool checkSdkPath) return TargetFrameworkDirectories == null || !checkSdkPath ? false : ExistsInFrameworkPath (assembly); } + public static bool IsReferenceAssembly (string assembly) + { + var a = AssemblyDefinition.ReadAssembly (assembly, new ReaderParameters() { InMemory = true, ReadSymbols = false, }); + if (!a.HasCustomAttributes) + return false; + return a.CustomAttributes.Any (t => t.AttributeType.FullName == "System.Runtime.CompilerServices.ReferenceAssemblyAttribute"); + } + public static bool ExistsInFrameworkPath (string assembly) { return TargetFrameworkDirectories diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index c3127c71ea7..ce3a3894107 100755 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -1417,7 +1417,11 @@ because xbuild doesn't support framework reference assemblies. - + + +