@@ -30,7 +30,6 @@ internal class AssemblyManager {
30
30
static ResolveEventHandler rhandler ;
31
31
static Dictionary < string , int > probed ;
32
32
static List < Assembly > assemblies ;
33
- static Dictionary < string , Assembly > loadedAssemblies ;
34
33
internal static List < string > pypath ;
35
34
36
35
private AssemblyManager ( ) { }
@@ -47,7 +46,6 @@ internal static void Initialize() {
47
46
probed = new Dictionary < string , int > ( 32 ) ;
48
47
//generics = new Dictionary<string, Dictionary<string, string>>();
49
48
assemblies = new List < Assembly > ( 16 ) ;
50
- loadedAssemblies = new Dictionary < string , Assembly > ( ) ;
51
49
pypath = new List < string > ( 16 ) ;
52
50
53
51
AppDomain domain = AppDomain . CurrentDomain ;
@@ -204,24 +202,25 @@ public static Assembly LoadAssemblyPath(string name) {
204
202
string path = FindAssembly ( name ) ;
205
203
Assembly assembly = null ;
206
204
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 ) ; }
220
206
catch { }
221
207
}
222
208
return assembly ;
223
209
}
224
210
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
+ }
225
224
226
225
//===================================================================
227
226
// 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) {
247
246
if ( assemblies == null ) {
248
247
assemblies = new HashSet < Assembly > ( AppDomain . CurrentDomain . GetAssemblies ( ) ) ;
249
248
}
250
- Assembly a = LoadAssemblyPath ( s ) ;
249
+ Assembly a = FindLoadedAssembly ( s ) ;
250
+ if ( a == null ) {
251
+ a = LoadAssemblyPath ( s ) ;
252
+ }
251
253
if ( a == null ) {
252
254
a = LoadAssembly ( s ) ;
253
255
}
0 commit comments