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)
: base(universe)
{
module = new MissingModule(this);
module = new MissingModule(this, -1);
this.fullName = name;
}
@ -237,11 +237,13 @@ namespace IKVM.Reflection
sealed class MissingModule : NonPEModule
{
private readonly Assembly assembly;
private readonly int index;
internal MissingModule(Assembly assembly)
internal MissingModule(Assembly assembly, int index)
: base(assembly.universe)
{
this.assembly = assembly;
this.index = index;
}
public override int MDStreamVersion
@ -261,7 +263,14 @@ namespace IKVM.Reflection
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
@ -343,6 +352,23 @@ namespace IKVM.Reflection
{
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

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

@ -264,7 +264,7 @@ namespace IKVM.Reflection.Reader
}
if (universe.MissingMemberResolution)
{
return externalModules[index] = new MissingModule(this);
return externalModules[index] = new MissingModule(this, index);
}
throw;
}