Dictionary<string, object> Assemblies = new Dictionary<string, object>(); static Assembly AssemblyResolve ass.FullName, null); //绑定程序集加载失败事件(这里我测试了,就算重复绑也是没关系的) AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve; //获取所有资源文件文件名 var res = ass.GetManifestResourceNames();
, New ResolveEventHandler(AddressOf CurrentDomain_AssemblyResolve) InitializeComponent() param> ''' <param name="args"></param> ''' <returns></returns> Private Function CurrentDomain_AssemblyResolve Class Form1 Public Sub New() ''加载DLL到exe的事件 AddHandler AppDomain.CurrentDomain.AssemblyResolve , New ResolveEventHandler(AddressOf CurrentDomain_AssemblyResolve) InitializeComponent() ''' <param name="args"></param> ''' <returns></returns> Private Function CurrentDomain_AssemblyResolve
summary> [STAThread] static void Main() { AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault Application.Run(new Form1()); } private static System.Reflection.Assembly CurrentDomain_AssemblyResolve
summary> [STAThread] static void Main() { AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; //Application.EnableVisualStyles(); // Application.SetCompatibleTextRenderingDefault Application.Run(new Form1()); } private static Assembly CurrentDomain_AssemblyResolve
方法二:订阅程序集解析事件 AssemblyResolve 在代码中解析 应用程序集域中支持在程序集解析时的处理: AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; 通过这个事件,我们可以在程序集解析时,根据不同的程序集做不用的处理,比如加载x86的程序集还是64位的程序集,当然也就可以指定程序集目录了, Application.SetCompatibleTextRenderingDefault(false); 18 19 AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; 20 21 Application.Run(new Form1()); 22 } 23 "args"></param> 29 /// <returns></returns> 30 private static Assembly CurrentDomain_AssemblyResolve
var files = db.GetCollection<FileAssembly>("files"); // 接管未找到的程序集处理 AppDomain.CurrentDomain.AssemblyResolve 然后在AppDomain.CurrentDomain.AssemblyResolve中会将启动程序集缺少的程序集加载到域中。 AppDomain.CurrentDomain.AssemblyResolve会在未找到依赖的时候触发的一个事件。 在存储到LiteDB的时候可以对于存储的内容进行加密,然后在AppDomain.CurrentDomain.AssemblyResolve触发的时候将读取LiteDB的文件的内容的时候进行解密。
Dictionary<string, object> Assemblies = new Dictionary<string, object>(); static Assembly AssemblyResolve ass.FullName, null); //绑定程序集加载失败事件(这里我测试了,就算重复绑也是没关系的) AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve; //获取所有资源文件文件名 var res = ass.GetManifestResourceNames();
方法中第1个dll文本是我的文件夹,assemblyName 是不含文件后缀,所以要补上后面的是“.dll” AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve ; private System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs
不过没关系,我们可以给CurrentDomain注册一个AssemblyResolve事件处理程序,这样vs就能加载我们的RootDesigner了: public sealed class WinFormDesignerPackage //解决无法加载MyRootControl的设计器的问题 AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve ; } private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
我们知道,当Assembly.LoadWithPartialName失败时,会触发AppDomain.AssemblyResolve事件(当然不仅仅是LoadWithPartialName失败时会触发, 还要很多情况下会触发这个事件),那我们是否可以通过AppDomain.AssemblyResolve事件来返回我们需要的程序集呢? 通过试验,这种方式也是不可以的,因为一旦Assembly.LoadWithPartialName利用AppDomain.AssemblyResolve事件得到了程序集之后,第二次再调用这个方法时,就不会再去触发 AppDomain.AssemblyResolve事件了,因为.net framework认为这个程序集它是可以识别的,不需要再触发这个事件了。
AssemblyResolver() { System::AppDomain^ currentDomain = System::AppDomain::CurrentDomain; currentDomain->AssemblyResolve += gcnew System::ResolveEventHandler( this, &AssemblyResolver::AssemblyResolve); } System::Reflection ::Assembly^ AssemblyResolver::AssemblyResolve(System::Object^ sender, System::ResolveEventArgs^ args)
ChromiumWebBrowser webBrowser = null; public Form1() { //AppDomain.CurrentDomain.AssemblyResolve
summary> [STAThread] static void Main() { AppDomain.CurrentDomain.AssemblyResolve
在没有上下文的情况下加载程序集具有以下缺点,以下摘抄自 Best Practices for Assembly Loading: 无法将其他程序集绑定到在没有上下文的情况下加载的程序集,除非处理 AppDomain.AssemblyResolve 可以在没有上下文的情况下预加载依赖项、将依赖项预加载到默认加载上下文中或通过处理 AppDomain.AssemblyResolve 事件来加载依赖项。
public App() { // Add Custom assembly resolver AppDomain.CurrentDomain.AssemblyResolve
当然,我们还可以在代码中通过AppDomain类中的几个成员来改变搜索规则,如AssemblyResolve事件、AppDomainSetup类等。
dependentAssembly> </assemblyBinding> </runtime> 当然,我们还可以在代码中通过AppDomain类中的几个成员来改变搜索规则,如AssemblyResolve