ShdNx
unread,Mar 24, 2011, 2:33:09 PM3/24/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to mono-cecil
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!