Expose the Name and __ModuleHash for missing external Modules.

This commit is contained in:
jfrijters 2013-01-28 07:17:27 +00:00
Родитель 71230e8bd1
Коммит bab8010805
2 изменённых файлов: 30 добавлений и 4 удалений

Просмотреть файл

@ -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;
} }