不是的, c#提供了AppDomain的概念。

解决方案 »

  1.   

    The following sample demonstrates, in general, how to create a domain using one of the CreateDomain overloads.[Visual Basic, C#] Note   This example shows how to use one of the overloaded versions of CreateDomain. For other examples that might be available, see the individual overload topics.
    [Visual Basic] 
    ' Set up the AppDomainSetup
    Dim setup As New AppDomainSetup()
    setup.ApplicationBase = "(some directory)"
    setup.ConfigurationFile = "(some file)"' Set up the Evidence
    Dim baseEvidence As Evidence = AppDomain.CurrentDomain.Evidence
    Dim evidence As New Evidence(baseEvidence)
    evidence.AddAssembly("(some assembly)")
    evidence.AddHost("(some host)")' Create the AppDomain
    Dim newDomain As AppDomain = AppDomain.CreateDomain("newDomain", evidence, setup)
    [C#] 
    // Set up the AppDomainSetup
    AppDomainSetup setup = new AppDomainSetup();
    setup.ApplicationBase = "(some directory)";
    setup.ConfigurationFile = "(some file)";// Set up the Evidence
    Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
    Evidence evidence = new Evidence(baseEvidence);
    evidence.AddAssembly("(some assembly)");
    evidence.AddHost("(some host)");// Create the AppDomain      
    AppDomain newDomain = AppDomain.CreateDomain("newDomain", evidence, setup);摘自msdn文档。
    CreateDomain有多个重载方法,根据需要选用。
      

  2.   

    前面 niwalker()的代码是创建AppDomain的部分,如果需要Load一个Assembly,更具体地说,一个类,到新的AppDomain里的话,可以参考AppDomain.CreateInstance方法。
    另外,可以参考MSDN里ObjectHandle的一段实例代码。
      

  3.   

    怎么我试了还是不行,测试代码如下:
    System.AppDomain myDomain = System.AppDomain.CreateDomain("MyAppDomain");
    System.Runtime.Remoting.ObjectHandle formObjectHandle = 
    myDomain.CreateInstance("WindowsApplication3", 
    "WindowsApplication3.Form1");
    WindowsApplication3.Form1 myDomainForm = (WindowsApplication3.Form1)
    formObjectHandle.Unwrap();
    myDomainForm.ShowDialog(this);
    myDomainForm.Dispose();
    System.AppDomain.Unload(myDomain);
      

  4.   

    我试了也不行,可以在指定域中绑定执行类,但好像程序域unload不掉。
    比如我建立了一个名为dom的程序域
    这时我MessageBox.show(AppDomain.CurrentDomain.GetHashCode().ToString()) ;显示为1(主程序域为0)。
    之后我绑定并执行类,然后执行AppDomain.Unload(dom);
    之后再运行MessageBox.show(AppDomain.CurrentDomain.GetHashCode().ToString()) ;显示仍然为1
    不知道是怎么回事
      

  5.   

    >> 怎么我试了还是不行,测试代码如下:
    出了什么错?
    写一个比较简单的测试程序试试看吧。
      

  6.   

    可能他说的也是程序域unload不掉吧
      

  7.   

    程序运行时也没出错,并且在两个AddDomain中也得到了两个不同的HashCode和FriendlyName,在Unload AppDomain时也没引发任何异常,说明Unload应该成功了,但dll还是删除不了(在Unload函数返回之后删除)。
      

  8.   

    修改代码后删除成功了:)
    先前删除不了是因为在调用CreateInstanceFrom后我调用了该函数生成的Ojbect的方法,是不是该调用导致了dll的代码仍然在主程序域中执行?
    但我怎样调用才能确保dll的代码是在自己生成的AppDomain中运行?
      

  9.   

    我只调用了CreateInstanceFrom,然后什么事没干就Unload了:P
      

  10.   

    请白痴说具体点,我还是一头雾水:(
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  11.   

    代码如下:
    System.AppDomain myDomain = System.AppDomain.CreateDomain("idiot");
    System.Runtime.Remoting.ObjectHandle formObjectHandle = 
    myDomain.CreateInstanceFrom(Application.StartupPath + "\\WindowsApplication3.dll", 
    System.Object o = formObjectHandle.Unwrap();
    System.AppDomain.Unload(myDomain);
    现在可以删除WindowsApplication3.dll了,删除是可以删除,但没达到我的目的。我只得到了一个System.Object按照MSDN中的DoCallBack函数三个例子中的第二个,确实可以在另一个AppDomain中执行代码,但我将例子中的类PingPong改未System.Windows.Forms.Form的派生类就不行,谁告诉我为什么?
      

  12.   

    暂时的解决方法:
    专门为需要调用的DLL创建一个类DllRunClass
    [Serializable]
    public class DllRunClass
    {
    public DllRunClass(){}
    public void RunDll()
    {
    //Dll执行代码
    WindowsApplication3.Form1 form1 = new WindowsApplication3.Form1();
    form1.ShowDialog();
    form1.Dispose();
    }
    }
    在主程序需要调用Dll时添加以下代码:
    System.AppDomain myDomain = System.AppDomain.CreateDomain("idiot");
    DllRunClass dllRunClass = new DllRunClass();
    myDomain.DoCallBack(new System.CrossAppDomainDelegate(DllRunClass.RunDll));
    System.AppDomain.Unload(myDomain);
      

  13.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp05162002.asphttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp03122002.asp