Hey,
I'm trying to read a small test assembly using
AssemblyDefinition.ReadAssembly, and I get the following exception:
System.TypeInitializationException: The type initializer for
'Mono.Cecil.Metadata.TableHeap' threw an exception.
at Mono.Cecil.Metadata.TableHeap..ctor(Section section, UInt32
start, UInt32 size)
at Mono.Cecil.PE.ImageReader.ReadMetadataStream(Section section)
at Mono.Cecil.PE.ImageReader.ReadMetadata()
at Mono.Cecil.PE.ImageReader.ReadImage()
at Mono.Cecil.PE.ImageReader.ReadImageFrom(Stream stream)
at Mono.Cecil.ModuleDefinition.ReadModule(Stream stream,
ReaderParameters parameters)
at Mono.Cecil.ModuleDefinition.ReadModule(String fileName,
ReaderParameters parameters)
at Mono.Cecil.ModuleDefinition.ReadModule(String fileName)
at Mono.Cecil.AssemblyDefinition.ReadAssembly(String fileName)
at MyProgram.Main(String[] args) in C:\Dev\...\Program.cs:line 44
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,
String[] args)
at System.AppDomain.nExecuteAssembly(RuntimeAssembly assembly,
String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence
assemblySecurity, String[] args)
at
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state, Boolean
ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Here is the InnerException:
System.ArgumentException: Value does not fall within the expected
range.
at
System.Runtime.CompilerServices.RuntimeHelpers.InitializeArray(Array
array, RuntimeFieldHandle fldHandle)
at Mono.Cecil.Metadata.TableHeap..cctor()
The test assembly I'm trying to load is a tiny .NET 4 console
application, here is the complete source code:
class Program
{
[Cached]
private static string _SomeExpensiveMethod()
{
Console.WriteLine("Expensive operation...");
return "stuff";
}
[Cached]
private static StringBuilder _GetBuilder()
{
Console.WriteLine("Creating builder...");
return new StringBuilder();
}
static void Main(string[] args)
{
string r1 = _SomeExpensiveMethod();
Console.WriteLine("Res: " + r1);
string r2 = _SomeExpensiveMethod();
Console.WriteLine("Res: " + r2);
_GetBuilder();
_GetBuilder();
Console.ReadKey();
}
}
The only thing worth mentioning are the CachedAttributes: they are
custom attributes from a project-referenced assembly.
What is interesting is that when I try to run my application in the
post-build event of the test project above, it works fine - I get the
error when I start the application directly. At first I thought that
it was some issue with relative paths, but the paths are relative in
the post-build event as well.
I have also seen this exception earlier when trying to open an
obfuscated assembly (my test assembly is NOT obfuscated), but I
thought it was because of the obfuscation. Now I'm not so sure.
Mono.Cecil version 0.9.4.0, binaries only. I could download the source
code, but that would mean installing git, which I'd never use
afterwards, and I hate having programs lying around.
Any hints?
Thank you very much in advance! And thanks for this great library!
--
--
mono-cecil