[Mono-devel-list] GAC (design) issues

Joshua Tauberer tauberer at for.net
Mon May 3 09:36:30 EDT 2004

Ian MacLean wrote:
>  From my understanding of things .net compiler references should 
> *always* be file paths. The assembly probing mechanism is intended for 
> *runtime* resolution of assemblies not compile time references.

Great point.

I don't usually speak up on these issues, but is there any reason not to 
do it both ways (actually all four ways)?

It's obviously important (now obvious to me thanks to Ian) to be able to 
reference an assembly by path name.  If a /r is an absolute path, look 
for the assembly at that location.  This would be compatibile with MS. 
(e.g. /r:/usr/lib/whatever/System.dll)

Next, if the assembly is exactly the name of one of the core framework 
assemblies that MS places in the same directory as csc, load the 
appropriate version of the assembly from the GAC.  (The one that 
corresponds to the version of the invoked mcs, or something.)  This 
maintains compatibility with MS (and is a nice feature to boot).  (e.g. 

Next, if the /r is a relative path, look for the assembly relative to 
the current directory.  (e.g. /r:./System.dll or /r:YourAssembly.dll)

Finally, if the /r specifies an assembly name, load it from the GAC with 
the normal GAC rules.  (e.g. /r:System[, Version=blah])

In the few minutes I've thought about it, it seems to me it would work 
well and not break anything, and also not require multiple copies of 
anything (provided absolute paths into the GAC work).  Apologies if I've 
missed something obvious, of course.

- Joshua Tauberer


** Nothing Unreal Exists **

More information about the Mono-devel-list mailing list