2012-03-03 52 views
1

我有一個C#2.0類用下面的代碼:的AppDomain DoCallBack FileNotFoundException異常 - C#

public class MyClass : MarshalByRefObject, IDisposable 
    { 
     private string _appName; 
     private AppDomain _app; 

     public MyClass(string appName) 
     { 
      _appName = appName; 
      _app = AppDomain.CreateDomain("NewDomain" + _appName); 
      _app.DoCallBack(new CrossAppDomainDelegate(CallBackMethod)); 
     } 

     public void Dispose() 
     { 
      AppDomain.Unload(_app); 
     } 

     public static void CallBackMethod() 
     { 
      //some operations 
     } 
    } 

這個類是下一個類庫項目包含,然後從Web應用程序項目引用。

所以,在我的網頁我只是實例的對象,期待那類的構造函數創建一個新的AppDomain並執行指定的操作:

MyClass objMyClass = new MyClass("12022012213456"); 

但我不斷收到此錯誤:

Could not load file or assembly 'MyNamespace.MyClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

但這裏好奇的是,這個例外是在該行發生的事情:

_app.DoCallBack(new CrossAppDomainDelegate(CallBackMethod)); 

正如你所看到的,它發生在MyClass,所以我不明白它怎麼能告訴我,如果代碼已被執行,程序集無法找到?我只是不明白。

順便說一句,我是使用AppDomain的新手,也許我對一些概念感到困惑。

+1

您可以在_app = AppDomain.Create行之後找到__app.BaseDirectory和_app.RelativeSearchPath屬性嗎?每個應用程序域必須解析它自己的程序集。把它看作是一個過程中的一個過程。出於某種原因,新應用程序域無法找到程序集,RelativeSearchPath和BaseDirectory可能會提供一些線索。 – Adam 2012-03-03 22:51:03

+0

@Adam的值是:RelativeSearchPath = null; BaseDirectory =「c:\ WINNT \ Microsoft.NET \ Framework \ v2.0.50727 \」,它們是好的嗎? – lidermin 2012-03-03 23:03:40

回答

3

看起來您創建的AppDomain(_app)在您的MyClass類中找到它的程序集時遇到問題。您的CreateDomain尚未提供任何AppDomainSetup信息,因此它沒有當前應用程序域目錄或程序集的上下文。您有兩種選擇,提供一個配置爲AppDomainSetup的配置,或者在您的DoCallBack方法之前調用_app.Load(Assembly.GetExecutingAssembly.FullName)

0

我有這個問題,但解決方案是不同的。在我的情況下,我需要明確提供我自己的AppDomainSetup對象並指定ApplicationBase文件夾,以便它實際上可以找到我的程序集。

我的代碼被另一個應用程序加載,這就是爲什麼我的程序集無法使用默認設置找到的原因。

相關問題