[Mono-dev] patch to make mcs "bundlable"

Teudimundo mynos_main at yahoo.it
Tue Oct 30 10:32:33 UTC 2012

I'm trying to bundle an application that uses the mcs, that's why I need to
bundle mcs as well. 
When I tried I've get the following exception: 

[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentOutOfRangeException:
Cannot be negative. 
  at System.String.Substring (Int32 startIndex, Int32 length) [0x00000] in
<filename unknown>:0 
  at Mono.CSharp.StaticLoader..ctor (Mono.CSharp.StaticImporter importer,
Mono.CSharp.CompilerContext compiler) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename

The code causing this is in ikvm.cs: 

   var corlib_path = Path.GetDirectoryName (typeof
   string fx_path = corlib_path.Substring (0, corlib_path.LastIndexOf
   if (compiler.Settings.StdLib) { ... 

When mcs is bundled corlib_path is empty and this cause the
corlib_path.LastIndexOf to return a -1, but 
both corlib_path and fx_path are used only inside the "if
(compiler.Setting.StdLib)" then branch. 

I then tried moving the two lines inside the if body. Passed -nostdlib to
the mcs during compilation and an explicit reference to a mscorlib.dll file.
In this way everything works. 

I thus propose to apply the patch that I'm attaching. 

Just out of curiosity, is there any reason for which fx_path is not computed
using Path.GetDirectoryName(corlib_path) (and for which corlib_path is not
checked to be not empty)?



View this message in context: http://mono.1490590.n4.nabble.com/patch-to-make-mcs-bundlable-tp4657173.html
Sent from the Mono - Dev mailing list archive at Nabble.com.

More information about the Mono-devel-list mailing list