diff --git a/src/Costura.Fody/ResourceEmbedder.cs b/src/Costura.Fody/ResourceEmbedder.cs index bc1ff527..ba2d6531 100644 --- a/src/Costura.Fody/ResourceEmbedder.cs +++ b/src/Costura.Fody/ResourceEmbedder.cs @@ -5,6 +5,7 @@ using System.IO.Compression; using System.Linq; using System.Reflection; +using System.Runtime.InteropServices; using System.Text; using Fody; using Mono.Cecil; @@ -268,8 +269,7 @@ private IEnumerable GetFilteredReferences(IEnumerable refe var assemblyName = Path.GetFileNameWithoutExtension(reference.FileName); if (includeList.Any(x => CompareAssemblyName(x, assemblyName)) && - config.UnmanagedWinX86Assemblies.All(x => !CompareAssemblyName(x, assemblyName)) && - config.UnmanagedWinX64Assemblies.All(x => !CompareAssemblyName(x, assemblyName))) + !IsUnmanagedAssemblyReference(reference, config)) { skippedAssemblies.Remove(includeList.First(x => CompareAssemblyName(x, assemblyName))); yield return reference; @@ -313,8 +313,7 @@ private IEnumerable GetFilteredReferences(IEnumerable refe var assemblyName = Path.GetFileNameWithoutExtension(reference.FileName); if (excludeList.Any(x => CompareAssemblyName(x, assemblyName)) || - config.UnmanagedWinX86Assemblies.Any(x => CompareAssemblyName(x, assemblyName)) || - config.UnmanagedWinX64Assemblies.Any(x => CompareAssemblyName(x, assemblyName))) + IsUnmanagedAssemblyReference(reference, config)) { continue; } @@ -331,8 +330,7 @@ private IEnumerable GetFilteredReferences(IEnumerable refe { var assemblyName = Path.GetFileNameWithoutExtension(reference.FileName); - if (config.UnmanagedWinX86Assemblies.All(x => !CompareAssemblyName(x, assemblyName)) && - config.UnmanagedWinX64Assemblies.All(x => !CompareAssemblyName(x, assemblyName))) + if (!IsUnmanagedAssemblyReference(reference, config)) { yield return reference; } @@ -340,6 +338,28 @@ private IEnumerable GetFilteredReferences(IEnumerable refe } } + private bool IsUnmanagedAssemblyReference(Reference reference, Configuration config) + { + var assemblyName = Path.GetFileNameWithoutExtension(reference.FileName); + + var listsToCheck = new[] + { + config.UnmanagedWinX86Assemblies, + config.UnmanagedWinX64Assemblies, + config.UnmanagedWinArm64Assemblies + }; + + foreach (var listToCheck in listsToCheck) + { + if (listToCheck.Any(x => CompareAssemblyName(x, assemblyName))) + { + return true; + } + } + + return false; + } + private IEnumerable GetFilteredRuntimeReferences(IEnumerable references, Configuration config) { references = references.Where(_ => _.IsRuntimeReference); @@ -413,8 +433,7 @@ private IEnumerable GetFilteredRuntimeReferences(IEnumerable !CompareAssemblyName(x, assemblyName)) && - config.UnmanagedWinX64Assemblies.All(x => !CompareAssemblyName(x, assemblyName))) + if (IsUnmanagedAssemblyReference(reference, config)) { yield return reference; }