Works around: http://connect.microsoft.com/VisualStudio/feedback/details/635365
The problem is that 64-bit .NET has a bug:
RuntimeHelpers.InitializeArray() throws ArgumentException for certain
array creation constructs that mcs likes to emit. Cecil uses
RuntimeHelpers.InitializeArray() to get the data, which throws, and
everyone becomes very sad:
Running mdoc "update" "--debug" ...
mdoc: System.TypeInitializationException: The type initializer for 'Mono.Cecil.Metadata.TableHeap' threw an exception. ---> 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()
--- End of inner exception stack trace ---
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.AssemblyDefinition.ReadAssembly(String fileName, ReaderParameters parameters)
at Mono.Documentation.MDocUpdater.LoadAssembly(String name)
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Mono.Documentation.MDocUpdater.Run(IEnumerable`1 args)
at Mono.Documentation.MDoc.Run(String[] args)
at Mono.Documentation.MDoc.Main(String[] args)
The "fix" is to not use the 64-bit runtime, and instead explicitly
require the 32-bit runtime by using -platform:x86.
$(PROGRAM) : $(MDOC_RESOURCES) $(MONODOC_RESOURCES) $(PROGRAM_DEPS)
+PROGRAM_COMPILE = $(CSCOMPILE) -platform:x86
+
include ../../build/executable.make
$(PROGRAM) : $(build_lib)