zoukankan      html  css  js  c++  java
  • 动态加载和卸载 DLL

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ClassLibrary1
    {
        public class Class1
        {
            public static void DoStuff(string msg)
            {
                Console.WriteLine("Class1.DoStuff: " + msg);
                
            }
        }
    }

    上面是调用的DLL源码

    调用主程序源码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                AppDomain ad = AppDomain.CreateDomain("Test");
    
                // Loader lives in another AppDomain
                Loader loader = (Loader)ad.CreateInstanceAndUnwrap(
                    typeof(Loader).Assembly.FullName,
                    typeof(Loader).FullName);
    
                loader.LoadAssembly(@"......ClassLibrary1inDebugClassLibrary1.dll");
                loader.ExecuteStaticMethod(
                    "ClassLibrary1.Class1",
                    "DoStuff",
                    DateTime.Now.ToShortDateString());
                AppDomain.Unload(ad);
                Console.ReadLine();
                
            }
            class Loader : MarshalByRefObject 
            {
                private Assembly _assembly;
    
                public override object InitializeLifetimeService() {
                    return null;
                }
    
                public void LoadAssembly( string path ) {
                    _assembly = Assembly.Load( AssemblyName.GetAssemblyName( path ) );
                }
    
                public object ExecuteStaticMethod( string typeName, string methodName, params object[] parameters ) {
                    Type type = _assembly.GetType( typeName );
                    // TODO: this won't work if there are overloads available
                    MethodInfo method = type.GetMethod(
                        methodName,
                        BindingFlags.Static | BindingFlags.Public );
                    return method.Invoke( null, parameters );
                }
            }
        }
    }
  • 相关阅读:
    平分糖果——BZOJ 1045
    浙大月赛——ZOJ Problem Set 3574
    jsp 自定义标签的写法
    C#扩展方法(转贴)
    window mobile 防止系统休眠代码
    jbpm sql使用动态参数方法
    spring 多数据源配置实现
    原创jquery蒙版控件
    jbpm 错误解决方法
    cas server 配置
  • 原文地址:https://www.cnblogs.com/lhyqzx/p/6780109.html
Copyright © 2011-2022 走看看