AppDomain a = AppDomain.CreateDomain("test");
            a.ExecuteAssembly("test.exe");
 AppDomain  下的  ExecuteAssembly***,CreateInstance*** 几个函数必须要指定  assemblyFile 或 assemblyName 才能成功运行,,而且 assemblyFile  必须要放到程序当前目录下,或者AppDomainSetup中设置的目录,,不然就会提示找不到文件或其他错误。。
我不想有  assemblyFile  文件在磁盘上的存在。。直接在内存中加载 Assembly 并在应用程序域中执行。。我想实现这样
            AppDomainSetup setup = new AppDomainSetup();
            setup.ApplicationBase = @"E:\";
            setup.ConfigurationFile = @"E:\config.xml";
            setup.ApplicationName = "test";
            setup.PrivateBinPath = @"E:\libs";
            AppDomain a = AppDomain.CreateDomain("test", null, setup);
            Assembly assembly = Assembly.Load(assembly字节数组);//字节数组到 assembly
            让 assembly  不在磁盘上生成文件,并在 AppDomain 里面执行。

注:不是说反射的执行,反射我知道直接Invoke就可以呢,,关键是要在 应用程序域中执行。。

解决方案 »

  1.   

    反编译看了下  ExecuteAssembly 的代码 public ObjectHandle CreateInstance(string assemblyName, string typeName)
    {
        if (this == null)
        {
            throw new NullReferenceException();
        }
        if (assemblyName == null)
        {
            throw new ArgumentNullException("assemblyName");
        }
        return Activator.CreateInstance(assemblyName, typeName);
    }不知道有没其他方法实现:不要有  assemblyFile  文件在磁盘上的存在。。直接在内存中加载 Assembly 并在应用程序域中执行。。
    其实就是反射呢,,只不过要在反射外面加一个应用程序域,,加应用程序域 是为了给应用程序指定目录。            setup.ApplicationBase = @"E:\";
                setup.ConfigurationFile = @"E:\config.xml";
                setup.ApplicationName = "test";
                setup.PrivateBinPath = @"E:\libs";