网站怎么制作 优帮云,网站模板 商标,宣化网站建设,网站流量作用程序集的加载#xff0c;默认是从当前目录下查找#xff0c;如果当前目录查找不到#xff0c;然后再去系统目录中查找#xff0c;依然查找不到就会从环境变量中查找#xff0c;如果依然找不到#xff0c;则会抛出一个异常 FileNotFoundException。
托管代码中#xff0…程序集的加载默认是从当前目录下查找如果当前目录查找不到然后再去系统目录中查找依然查找不到就会从环境变量中查找如果依然找不到则会抛出一个异常 FileNotFoundException。
托管代码中 AppDomain.CurrentDomain.AssemblyResolve 事件可以帮助我们去监听程序集加载失败并请求重新加载程序集我们可以在这里事件中去处理程序集的查找工作。
具体示例代码如下 /// summary/// 托管代码加载器/// /summarypublic class AssemblyLoader{/// summary/// 根据runtimes的文件动态加载程序集(C的设置方法Win32.SetDllDirectory(filename))/// /summarypublic static void ImportFromRuntimes(){AppDomain.CurrentDomain.AssemblyResolve - CurrentDomain_AssemblyResolve;AppDomain.CurrentDomain.AssemblyResolve CurrentDomain_AssemblyResolve;}private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args){var index args.Name.IndexOf(,);if (index ! -1){var assemblyName args.Name.Substring(0, index);return Load(${assemblyName}.dll);}return null;}private static Assembly Load(string assemblyName){string filename;if (Environment.Is64BitProcess){filename Path.Combine(AppDomain.CurrentDomain.BaseDirectory, runtimes\win-x64\native, assemblyName);}else{filename Path.Combine(AppDomain.CurrentDomain.BaseDirectory, runtimes\win-x86\native, assemblyName);}if (File.Exists(filename)){return Assembly.LoadFrom(filename);}else{return null;} }}//在应用程序启动的时候执行该方法即可。AssemblyLoader.ImportFromRuntimes();
但是这里需要注意的是程序集加载失败会触发该事件。如果是程序集本身可以加载但是因为目标平台不对则会引发异常并不会触发该事件。如System.BadImageFormatException。
.NET CORE 项目本身包含该机制可以自动查找。.NET Framework 需要手动添加。