зеркало из https://github.com/mono/ikvm-fork.git
Bug fix. Changed AssemblyName.ProcessorArchitecture to match (weird) .NET behavior. When reading the property it returns the architecture of the PE file, not the field from the AssemblyDef record.
This commit is contained in:
Родитель
ce6eea67d0
Коммит
fb7cbe4bfd
|
@ -42,6 +42,7 @@ namespace IKVM.Reflection
|
|||
private AssemblyNameFlags flags;
|
||||
private AssemblyHashAlgorithm hashAlgorithm;
|
||||
private AssemblyVersionCompatibility versionCompatibility = AssemblyVersionCompatibility.SameMachine;
|
||||
private ProcessorArchitecture processorArchitecture;
|
||||
private string codeBase;
|
||||
internal byte[] hash;
|
||||
|
||||
|
@ -213,11 +214,12 @@ namespace IKVM.Reflection
|
|||
|
||||
public ProcessorArchitecture ProcessorArchitecture
|
||||
{
|
||||
get { return (ProcessorArchitecture)(((int)flags & 0x70) >> 4); }
|
||||
get { return processorArchitecture; }
|
||||
set
|
||||
{
|
||||
if (value >= ProcessorArchitecture.None && value <= ProcessorArchitecture.Arm)
|
||||
{
|
||||
processorArchitecture = value;
|
||||
flags = (flags & ~(AssemblyNameFlags)0x70) | (AssemblyNameFlags)((int)value << 4);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -222,7 +222,8 @@ namespace IKVM.Reflection
|
|||
IA64 = 3,
|
||||
Amd64 = 4,
|
||||
Arm = 5,
|
||||
// if an item is added here, make sure to update AssemblyName.ProcessorArchitecture and Fusion.ParseAssemblyName as well
|
||||
// if an item is added here, make sure to update AssemblyName.ProcessorArchitecture,
|
||||
// AssemblyReader.GetNameImpl() and Fusion.ParseAssemblyName as well
|
||||
}
|
||||
|
||||
[Flags]
|
||||
|
|
|
@ -77,6 +77,37 @@ namespace IKVM.Reflection.Reader
|
|||
}
|
||||
name.HashAlgorithm = (AssemblyHashAlgorithm)rec.HashAlgId;
|
||||
name.CodeBase = this.CodeBase;
|
||||
PortableExecutableKinds peKind;
|
||||
ImageFileMachine machine;
|
||||
manifestModule.GetPEKind(out peKind, out machine);
|
||||
switch (machine)
|
||||
{
|
||||
case ImageFileMachine.I386:
|
||||
// FXBUG we copy the .NET bug that Preferred32Bit implies x86
|
||||
if ((peKind & (PortableExecutableKinds.Required32Bit | PortableExecutableKinds.Preferred32Bit)) != 0)
|
||||
{
|
||||
name.ProcessorArchitecture = ProcessorArchitecture.X86;
|
||||
}
|
||||
else if ((rec.Flags & 0x70) == 0x70)
|
||||
{
|
||||
// it's a reference assembly
|
||||
name.ProcessorArchitecture = ProcessorArchitecture.None;
|
||||
}
|
||||
else
|
||||
{
|
||||
name.ProcessorArchitecture = ProcessorArchitecture.MSIL;
|
||||
}
|
||||
break;
|
||||
case ImageFileMachine.IA64:
|
||||
name.ProcessorArchitecture = ProcessorArchitecture.IA64;
|
||||
break;
|
||||
case ImageFileMachine.AMD64:
|
||||
name.ProcessorArchitecture = ProcessorArchitecture.Amd64;
|
||||
break;
|
||||
case ImageFileMachine.ARM:
|
||||
name.ProcessorArchitecture = ProcessorArchitecture.Arm;
|
||||
break;
|
||||
}
|
||||
name.RawFlags = (AssemblyNameFlags)rec.Flags;
|
||||
return name;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче