2014-02-25 44 views
0

我只是每次都得到一個錯誤,我運行此代碼:誤差CreateInstanceAndUnwrap

 AppDomain newDomain = AppDomain.CreateDomain("newDomain"); 
     AssemblyName assemblyName = AssemblyName.GetAssemblyName(path); 

     Command cmd = (Command)newDomain.CreateInstanceAndUnwrap(assemblyName.FullName, typename); 
     cmd.Execute(); 

哪裏path是DLL的路徑和typename是「NWT_Projekt.TestClass」

我的命令類:

using System; 

namespace NWT_Projekt 
{ 
    public interface Command 
    { 
     void Execute(); 
    } 
} 

,這是該DLL的源代碼

using System; 
using System.Collections; 
using System.Xml; 
using System.IO; 
using System.Windows.Forms; 


namespace NWT_Projekt 
{ 
    public class TestClass : NWT_Projekt.Command 
    { 
     public MainForm f; 

     public TestClass() 
     { 
      f = Form.ActiveForm as MainForm; 
     } 
     public void Execute() 
     { 
      //do something 
     } 
    } 
} 

ERROR(谷歌譯者:d)

一種類型「System.Runtime.Serialization.SerializationException的異常「發生在NWT PRojekt.exe。

其他信息:彙編 '腳本的類型「NWT_Projekt.TestClass,版本= 0.0.0.0,文化=中性公鑰=空' 未標記爲可序列

EDIT2:

隨着[Serializable]它現在有效,但是在我運行代碼一次後,我想創建第二個dll,它給了我一個IO錯誤,因爲這個文件正在使用中! 我該如何解決這個問題?

+1

你能後你得到確切的錯誤? –

+0

好吧,我把它添加到帖子! – coolerfarmer

+1

'TestClass'需要是'[Serializable]'以跨越應用程序邊界。見[這個答案](http://stackoverflow.com/a/7047153/464709)。 –

回答

0

如果你想讓你的命令在自己的appDomain上運行,你應該使用MarshalByRefObject

using System; 
using System.Collections; 
using System.Xml; 
using System.IO; 
using System.Windows.Forms; 


namespace NWT_Projekt 
{ 
    public class TestClass : MarshalByRefObject, NWT_Projekt.Command 
    { 
     public MainForm f; 

     public TestClass() 
     { 
      f = Form.ActiveForm as MainForm; 
     } 
     public void Execute() 
     { 
      //do something 
     } 
    } 
} 

我建議你到你的前綴接口:ICommand