Как это использовать? Если я пишу:
| Код | public class MyType { public MyType() { MessageBox.Show( "MyType instantiated!" ); } }
static class Program { /// <summary> /// Главная точка входа для приложения. /// </summary> [STAThread] static void Main() { AppDomain currentDomain = AppDomain.CurrentDomain; InstantiateMyTypeFail( currentDomain ); currentDomain.AssemblyResolve += new ResolveEventHandler( MyResolveEventHandler ); InstantiateMyTypeFail( currentDomain ); InstantiateMyTypeSucceed( currentDomain );
Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); }
private static void InstantiateMyTypeFail( AppDomain domain ) { // Calling InstantiateMyType will always fail since the assembly info // given to CreateInstance is invalid. try { // You must supply a valid fully qualified assembly name here. domain.CreateInstance( "Assembly text name, Version, Culture, PublicKeyToken", "MyType" ); } catch (Exception e) { MessageBox.Show( e.Message ); } }
private static void InstantiateMyTypeSucceed( AppDomain domain ) { try { string asmname = Assembly.GetCallingAssembly().FullName; domain.CreateInstance( asmname, "MyType" ); } catch (Exception e) { MessageBox.Show( e.Message ); } }
private static Assembly MyResolveEventHandler( object sender, ResolveEventArgs args ) { MessageBox.Show( "Resolving..." ); return typeof( MyType ).Assembly; } }
|
то все сообщения описанные тут в статических методах выводятся в любом случае, даже если dll находятся в папке с программой. Приложение все-равно падает в случае отсутствия dll. |