Browse Source

Fix BAML tests

pull/2642/head
Siegfried Pammer 4 years ago
parent
commit
3a04963191
  1. 2
      ILSpy.BamlDecompiler.Tests/Cases/EscapeSequence.xaml
  2. 24
      ILSpy.BamlDecompiler/Baml/BamlContext.cs

2
ILSpy.BamlDecompiler.Tests/Cases/EscapeSequence.xaml

@ -1,4 +1,4 @@
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=System.Private.CoreLib">
<StackPanel> <StackPanel>
<FrameworkElement.Resources> <FrameworkElement.Resources>
<ResourceDictionary> <ResourceDictionary>

24
ILSpy.BamlDecompiler/Baml/BamlContext.cs

@ -25,6 +25,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem;
using Metadata = ICSharpCode.Decompiler.Metadata; using Metadata = ICSharpCode.Decompiler.Metadata;
@ -97,9 +98,13 @@ namespace ILSpy.BamlDecompiler.Baml
var assemblyName = Metadata.AssemblyNameReference.Parse(assemblyRec.AssemblyFullName); var assemblyName = Metadata.AssemblyNameReference.Parse(assemblyRec.AssemblyFullName);
if (assemblyName.Name == TypeSystem.MainModule.AssemblyName) if (assemblyName.Name == TypeSystem.MainModule.AssemblyName)
{
assembly = (assemblyRec.AssemblyFullName, TypeSystem.MainModule); assembly = (assemblyRec.AssemblyFullName, TypeSystem.MainModule);
}
else else
assembly = (assemblyRec.AssemblyFullName, TypeSystem.ReferencedModules.FirstOrDefault(m => m.FullAssemblyName == assemblyName.FullName)); {
assembly = (assemblyRec.AssemblyFullName, FindMatchingReference(assemblyName));
}
} }
else else
assembly = (null, null); assembly = (null, null);
@ -108,5 +113,22 @@ namespace ILSpy.BamlDecompiler.Baml
} }
return assembly; return assembly;
} }
private IModule FindMatchingReference(AssemblyNameReference name)
{
IModule bestMatch = null;
foreach (var module in TypeSystem.ReferencedModules)
{
if (module.AssemblyName == name.Name)
{
// using highest version as criterion
if (bestMatch == null || bestMatch.AssemblyVersion <= module.AssemblyVersion)
{
bestMatch = module;
}
}
}
return bestMatch;
}
} }
} }
Loading…
Cancel
Save