зеркало из https://github.com/mono/ikvm-fork.git
Expose the Name and __ModuleHash for missing external Modules.
This commit is contained in:
Родитель
71230e8bd1
Коммит
bab8010805
|
@ -144,7 +144,7 @@ namespace IKVM.Reflection
|
||||||
internal MissingAssembly(Universe universe, string name)
|
internal MissingAssembly(Universe universe, string name)
|
||||||
: base(universe)
|
: base(universe)
|
||||||
{
|
{
|
||||||
module = new MissingModule(this);
|
module = new MissingModule(this, -1);
|
||||||
this.fullName = name;
|
this.fullName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,11 +237,13 @@ namespace IKVM.Reflection
|
||||||
sealed class MissingModule : NonPEModule
|
sealed class MissingModule : NonPEModule
|
||||||
{
|
{
|
||||||
private readonly Assembly assembly;
|
private readonly Assembly assembly;
|
||||||
|
private readonly int index;
|
||||||
|
|
||||||
internal MissingModule(Assembly assembly)
|
internal MissingModule(Assembly assembly, int index)
|
||||||
: base(assembly.universe)
|
: base(assembly.universe)
|
||||||
{
|
{
|
||||||
this.assembly = assembly;
|
this.assembly = assembly;
|
||||||
|
this.index = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int MDStreamVersion
|
public override int MDStreamVersion
|
||||||
|
@ -261,7 +263,14 @@ namespace IKVM.Reflection
|
||||||
|
|
||||||
public override string Name
|
public override string Name
|
||||||
{
|
{
|
||||||
get { throw new MissingModuleException(this); }
|
get
|
||||||
|
{
|
||||||
|
if (index == -1)
|
||||||
|
{
|
||||||
|
throw new MissingModuleException(this);
|
||||||
|
}
|
||||||
|
return assembly.ManifestModule.GetString(assembly.ManifestModule.File.records[index].Name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Guid ModuleVersionId
|
public override Guid ModuleVersionId
|
||||||
|
@ -343,6 +352,23 @@ namespace IKVM.Reflection
|
||||||
{
|
{
|
||||||
return new MissingModuleException(this);
|
return new MissingModuleException(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override byte[] __ModuleHash
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (index == -1)
|
||||||
|
{
|
||||||
|
throw new MissingModuleException(this);
|
||||||
|
}
|
||||||
|
if (assembly.ManifestModule.File.records[index].HashValue == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
IKVM.Reflection.Reader.ByteReader br = assembly.ManifestModule.GetBlob(assembly.ManifestModule.File.records[index].HashValue);
|
||||||
|
return br.ReadBytes(br.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class MissingType : Type
|
sealed class MissingType : Type
|
||||||
|
|
|
@ -264,7 +264,7 @@ namespace IKVM.Reflection.Reader
|
||||||
}
|
}
|
||||||
if (universe.MissingMemberResolution)
|
if (universe.MissingMemberResolution)
|
||||||
{
|
{
|
||||||
return externalModules[index] = new MissingModule(this);
|
return externalModules[index] = new MissingModule(this, index);
|
||||||
}
|
}
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче