[Python.NET] Do assemblies need to be placed into the GAC
Folkert Boonstra
F.Boonstra at inter.nl.net
Thu Oct 30 02:33:34 EST 2003
Brian Lloyd wrote:
>>Thanks for that. We don't currently put our assemblies into the
>>GAC because
>>our ASP.NET app can (theoretically) support multiple versions on the one
>>server machine. Each version lives in a separate sub-directory that then
>>contains a 'bin' directory for the assembly DLLs.
>>
>>Although you *can* put multiple versions of the same component
>>into the GAC
>>(as long as the AssemblyVersion number is different), how would
>>Python.NET
>>distinguish these?
>>
>>
>
>Right now it uses Assembly.LoadWithPartialName, which seems (the
>docs are vague on this) to load the most recent version of an
>assembly that it can find.
>
>The ability to side-by-side load different versions of assemblies
>is one of the (relatively few) places where the matching of meta-models
>between Python and the CLR breaks down.
>
>Because Python import is name-based and unaware of any concept of
>versioned modules, my goal has been for 'implicit assembly loading'
>(loading as a result of import) to do something consistent and
>reasonable (i.e. load most recent available based on name).
>
>It is possible to load a specific version of an assembly - you would
>do something like:
>
> from CLR.System.Reflection import Assembly, AssemblyName
>
> name = AssemblyName(...) # set required version, etc.
> assembly = Assembly.Load(name)
>
> # now import namespaces from the loaded assembly
>
>
>Things get a lot more complicated if you need to load more than one
>version of a particular assembly (or more likely, you have a dependency
>on some library the does so). In this case, the names you access via
>the CLR modules will always come from the first version of the
>assembly loaded (which will always win in the internals of the runtime).
>
>That doesn't mean that you're hosed though - you just have to do
>more work to get the right versions of objects, a la:
>
> from CLR.System.Reflection import Assembly, AssemblyName
> from System import Activator
>
> name = AssemblyName(...) # get the right version
> assembly = Assembly.Load(name)
> type = assembly.GetType("QualifiedNameOf.TheTypeINeed")
> obj = Activator.CreateInstance(type)
>
>
>Hope that helps somewhat. BTW, these are all great questions and
>I'm making notes to put these things in the faq / docs :^)
>
>
>Brian Lloyd brian at zope.com
>V.P. Engineering 540.361.1716
>Zope Corporation http://www.zope.com
>
>
>_________________________________________________
>Python.NET mailing list - PythonDotNet at python.org
>http://mail.python.org/mailman/listinfo/pythondotnet
>
>
Hi,
Without knowing too much about the PythonDotNet environment (yet) I have
just a general observation.
Shouldn't the versioning knowledge be kept out of the source code? Totally!?
When the containers/assemblies are instantiated the actual binding to a
specific version should take place.
Isn't there functionality in the assemblies to deal with that?
regards,
Folkert
More information about the PythonDotNet
mailing list