Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ static bool HasResourceDesignerAssemblyReference (ITaskItem assembly)
return false;
}
using var pe = new PEReader (File.OpenRead (assembly.ItemSpec));
if (!pe.HasMetadata) {
return false;
}
var reader = pe.GetMetadataReader ();
return HasResourceDesignerAssemblyReference (reader);
}
Expand Down
4 changes: 4 additions & 0 deletions src/Xamarin.Android.Build.Tasks/Tasks/FilterAssemblies.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ public override bool RunTask ()
void ProcessAssembly(ITaskItem assemblyItem, List<ITaskItem> output)
{
using var pe = new PEReader (File.OpenRead (assemblyItem.ItemSpec));
if (!pe.HasMetadata) {
Log.LogDebugMessage ($"Skipping non-.NET assembly: {assemblyItem.ItemSpec}");
return;
}
var reader = pe.GetMetadataReader ();
// Check in-memory cache
var module = reader.GetModuleDefinition ();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,10 @@ void Extract (
Log.LogDebugMessage ($"Refreshing {fileName}");

using (var pe = new PEReader (File.OpenRead (assemblyPath))) {
if (!pe.HasMetadata) {
Log.LogDebugMessage ($"Skipping non-.NET assembly: {assemblyPath}");
continue;
}
var reader = pe.GetMetadataReader ();
foreach (var handle in reader.ManifestResources) {
var resource = reader.GetManifestResource (handle);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@ public MetadataReader GetAssemblyReader (string assemblyName)
{
var assemblyPath = Resolve (assemblyName);
if (!cache.TryGetValue (assemblyPath, out PEReader reader)) {
cache.Add (assemblyPath, reader = new PEReader (File.OpenRead (assemblyPath)));
reader = new PEReader (File.OpenRead (assemblyPath));
if (!reader.HasMetadata) {
reader.Dispose ();
throw new InvalidOperationException ($"Assembly '{assemblyPath}' is not a .NET assembly.");
}
cache.Add (assemblyPath, reader);
}
return reader.GetMetadataReader ();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,9 @@ public static bool HasMonoAndroidReference (ITaskItem assembly)
return true;

using var pe = new PEReader (File.OpenRead (assembly.ItemSpec));
if (!pe.HasMetadata) {
return false; // this is a native Windows .dll, not a .NET assembly
}
var reader = pe.GetMetadataReader ();
return HasMonoAndroidReference (reader);
}
Expand All @@ -374,6 +377,10 @@ public static bool IsReferenceAssembly (string assembly, TaskLoggingHelper log)
{
using (var stream = File.OpenRead (assembly))
using (var pe = new PEReader (stream)) {
if (!pe.HasMetadata) {
log.LogDebugMessage ($"Skipping non-.NET assembly: {assembly}");
return false;
}
var reader = pe.GetMetadataReader ();
var assemblyDefinition = reader.GetAssemblyDefinition ();
foreach (var handle in assemblyDefinition.GetCustomAttributes ()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ public void CreateImportMethods (IEnumerable<ITaskItem> libraries)
primary.Members.Add (method);
foreach (var assemblyPath in libraries) {
using (var pe = new PEReader (File.OpenRead (assemblyPath.ItemSpec))) {
if (!pe.HasMetadata) {
Log.LogDebugMessage ($"Skipping non-.NET assembly: {assemblyPath.ItemSpec}");
continue;
}
var reader = pe.GetMetadataReader ();
var resourceDesignerName = GetResourceDesignerClass (reader);
if (string.IsNullOrEmpty (resourceDesignerName)) {
Expand Down
Loading