2012-03-03 14 views
1

私は、次のコードでC#2.0クラスを持っています。のAppDomain DoCallBackにFileNotFoundExceptionは、C#

だから、私のWebページで私はちょうど、インスタンスオブジェクト、クラスのコンストラクタは、新しいアプリケーションドメインを作成し、指定された操作を実行することを期待:

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.BaseDirectoryプロパティと_app.RelativeSearchPathプロパティは、_app = AppDomain.Create行の直後にありますか。各アプリケーションドメインは、それぞれのアセンブリを解決する必要があります。それをプロセス内のプロセスと考えてください。何らかの理由で、新しいアプリケーションドメインがアセンブリを見つけることができない場合、RelativeSearchPathとBaseDirectoryは手がかりを与えるかもしれません。 – Adam

+0

@Adam値は次のとおりです。RelativeSearchPath = null; BaseDirectory = "c:\ WINNT \ Microsoft.NET \ Framework \ v2.0.50727 \"、彼らは良いですか? – lidermin

答えて

3

あなたが作成したAppDomain(_app)は、アセンブリ内にMyClassクラスを配置する際に問題が発生しているようです。 CreateDomainにはAppDomainSetupという情報が提供されていないため、現在のアプリドメインのディレクトリやアセンブリのコンテキストがありません。 2つの方法があります。具体的にはAppDomainSetupを設定するか、DoCallBackの方法の前に_app.Load(Assembly.GetExecutingAssembly.FullName)に電話してください。

0

この問題はありましたが、解決策は異なりました。私の状況では、自分自身のAppDomainSetupオブジェクトを明示的に提供し、ApplicationBaseというフォルダを指定する必要があったため、実際に自分のアセンブリを見つけることができました。

私のコードは別のアプリケーションによって読み込まれています。そのため、私のアセンブリはデフォルトの設定では見つかりませんでした。

関連する問題