Skip to content

Commit f5fa28a

Browse files
committed
1.2 修复依赖被占用的问题
1 parent 54a5ea8 commit f5fa28a

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

ScriptEngine/ReloadPlugins.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,11 @@ public void LoadMods(string path)
122122

123123
var defaultResolver = new DefaultAssemblyResolver();
124124
defaultResolver.AddSearchDirectory(scirptsPath);
125-
125+
126126
var dll = AssemblyDefinition.ReadAssembly(path, new ReaderParameters { AssemblyResolver = defaultResolver });
127127
dll.Name.Name = $"{dll.Name.Name}-{DateTime.Now.Ticks}";
128128

129-
Debug.Log($"dll.Name.Name : {dll.Name.Name}");
129+
//Debug.Log($"dll.Name.Name : {dll.Name.Name}");
130130

131131
var ms = new MemoryStream();
132132
dll.Write(ms);
@@ -149,22 +149,32 @@ public void LoadMods(string path)
149149
string file = Path.Combine(scirptsPath, $"{item.Name}.dll");
150150
if (File.Exists(file))
151151
{
152-
Assembly.LoadFile(file);
152+
var dllLibs = AssemblyDefinition.ReadAssembly(file, new ReaderParameters { AssemblyResolver = defaultResolver });
153+
dllLibs.Name.Name = $"{dllLibs.Name.Name}";
154+
var ms2 = new MemoryStream();
155+
dllLibs.Write(ms2);
156+
var ass2 = Assembly.Load(ms2.ToArray());
157+
153158
Debug.Log($"加载依赖 {item.Name} 成功");
159+
//var fas = Assembly.Load(path);
160+
161+
// 将依赖附加上原dll上
162+
dll.MainModule.AssemblyReferences.Add(dllLibs.MainModule.AssemblyReferences[0]);
163+
// 解除原dll的占用
164+
dllLibs.Dispose();
165+
154166
}
155-
167+
156168
}
157169
catch (Exception e)
158170
{
159171
Debug.Log($"加载依赖 {item.Name} 失败");
160-
}
161-
172+
}
162173
}
163-
164174
scriptManager.AddComponent(type);
165175
Debug.Log($"加载 {path} 成功");
166176
}
167-
}
177+
}
168178
}
169179
dll.Dispose();
170180
}

0 commit comments

Comments
 (0)