<div dir="ltr"><div><div style>Hi,</div><div style><br></div><div style>I have found a mismatch in behaviour between mono and .NET</div><div style><br></div><div style>Mono version: Mono JIT compiler version 3.0.4 (master/e5fba9d Wed Jan 30 18:38:48 GMT 2013)</div>

<div style>.NET version: 4.5 from VS2012</div><div style><div><br></div><div style>Running the simple program below which reads mscorlib.dll into memory and then loads in with Assembly.Load causes Mono to afterwards return the location of mscorlib as the empty string. On .NET the original location of mscorlib is returned.</div>

<div><br></div><div><br></div><div style>Program:</div><div><br></div></div><div>open System.Reflection</div><div>open System</div><div><br></div><div>[<EntryPoint>]</div><div>let main args =</div><div>  let asmBytes = System.IO.File.ReadAllBytes("/home/scratch/local_mono/lib/mono/4.5/mscorlib.dll")</div>


<div>  printfn "Location of mscorlib: '%s'" (typeof<System.Object>.Assembly.Location)</div><div>  let assm = Assembly.Load(asmBytes)</div><div>  printfn "Location of mscorlib: '%s'" (typeof<System.Object>.Assembly.Location)</div>


<div>  0</div><div><br></div></div><div style>Output:</div><div style><br></div><div style><div>Location of mscorlib: '/home/scratch/local_mono/lib/mono/4.5/mscorlib.dll'</div><div>Location of mscorlib: ''</div>

<div><br></div><div style>On Windows I change ReadAllBytes to load from @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll", and the output is:</div><div style><br></div><div style><div>Location of mscorlib: 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.</div>

<div>dll'</div><div>Location of mscorlib: 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.</div><div>dll'</div></div></div><div><br></div><div><br></div><div style>This causes problems if you try to do this during xbuild because some tasks (in my case the Fsc task) try to find the mono location and call into MonoLocationHelper.cs:47 which is below:</div>

<div><br></div><div><div>assemblyLocation = Path.GetDirectoryName (typeof (object).Assembly.Location);</div><div><br></div><div style>This line then returns the empty string and everything goes wrong from there.</div><div style>

<br></div><div style><br></div><div><br></div>
</div><div><br></div></div>