@@ -30,7 +30,6 @@ internal class AssemblyManager {
3030 static ResolveEventHandler rhandler ;
3131 static Dictionary < string , int > probed ;
3232 static List < Assembly > assemblies ;
33- static Dictionary < string , Assembly > loadedAssemblies ;
3433 internal static List < string > pypath ;
3534
3635 private AssemblyManager ( ) { }
@@ -47,7 +46,6 @@ internal static void Initialize() {
4746 probed = new Dictionary < string , int > ( 32 ) ;
4847 //generics = new Dictionary<string, Dictionary<string, string>>();
4948 assemblies = new List < Assembly > ( 16 ) ;
50- loadedAssemblies = new Dictionary < string , Assembly > ( ) ;
5149 pypath = new List < string > ( 16 ) ;
5250
5351 AppDomain domain = AppDomain . CurrentDomain ;
@@ -204,24 +202,25 @@ public static Assembly LoadAssemblyPath(string name) {
204202 string path = FindAssembly ( name ) ;
205203 Assembly assembly = null ;
206204 if ( path != null ) {
207- if ( loadedAssemblies . ContainsKey ( path ) ) {
208- return loadedAssemblies [ path ] ;
209- }
210- // Avoid using Assembly.LoadFrom as referenced assemblies that exist
211- // in the same path will be loaded directly from there, rather than
212- // using other versions already loaded. This is a problem if there
213- // is a Python.Runtime.dll in the same folder as the assembly being
214- // loaded, as that will result in two instances being loaded.
215- try {
216- byte [ ] bytes = System . IO . File . ReadAllBytes ( path ) ;
217- assembly = Assembly . Load ( bytes ) ;
218- loadedAssemblies [ path ] = assembly ;
219- }
205+ try { assembly = Assembly . LoadFrom ( path ) ; }
220206 catch { }
221207 }
222208 return assembly ;
223209 }
224210
211+ //===================================================================
212+ // Returns an assembly that's already been loaded
213+ //===================================================================
214+
215+ public static Assembly FindLoadedAssembly ( string name ) {
216+ for ( int i = 0 ; i < assemblies . Count ; i ++ ) {
217+ Assembly a = ( Assembly ) assemblies [ i ] ;
218+ if ( a . GetName ( ) . Name == name ) {
219+ return a ;
220+ }
221+ }
222+ return null ;
223+ }
225224
226225 //===================================================================
227226 // Given a qualified name of the form A.B.C.D, attempt to load
@@ -247,7 +246,10 @@ public static bool LoadImplicit(string name, bool warn=true) {
247246 if ( assemblies == null ) {
248247 assemblies = new HashSet < Assembly > ( AppDomain . CurrentDomain . GetAssemblies ( ) ) ;
249248 }
250- Assembly a = LoadAssemblyPath ( s ) ;
249+ Assembly a = FindLoadedAssembly ( s ) ;
250+ if ( a == null ) {
251+ a = LoadAssemblyPath ( s ) ;
252+ }
251253 if ( a == null ) {
252254 a = LoadAssembly ( s ) ;
253255 }
0 commit comments