0

私は次のことをしようとしています:

if(domain != null)
{
    AppDomain.Unload(domain);
}

domain = AppDomain.CreateDomain(appDomainName);

Assembly assembly = domain.Load(location);

コードは FileLoadException をスローします

しかし、私が次のことをするとき、例外はありません:

Assembly assembly = Assembly.LoadFrom(location);

何が問題なのか教えてください。

ありがとうございました。

編集:

クラスのインスタンスを作成したいのでアセンブリをロードしたい理由は、ファクトリメソッドを使用してその中にあります解決策を提案してください

4

2 に答える 2

4

Suzanne Cook の .NET CLR Notesから:

AppDomain.Load() は、AppDomain.CurrentDomain でのみ呼び出されることを意図しています。(相互運用呼び出し元のみを対象としています。非静的メソッドが必要で、Assembly.Load() は静的です。)別の AppDomain で呼び出した場合、アセンブリがターゲット appdomain に正常に読み込まれると、リモート処理は次のことを試みます。呼び出し元のアプリドメインにロードすると、FileNotFoundException/SerializationException が発生する可能性があります。

exe を実行する必要がある場合は、代わりに AppDomain.ExecuteAssembly() または (v2.0 以降) AppDomain.ExecuteAssemblyByName() を使用します。それ以外の場合は、ターゲット appdomain 内から Assembly.Load() を使用するように変更する必要があります。詳細については、別の AppDomainでのコードの実行を参照してください。

この SO questionも参照してください。

于 2011-06-09T11:05:08.350 に答える
0

ディレクトリが appdomain で正しく設定されていることを確認してください。そうでない場合は、AppDomainSetup を使用してください。

100%確信はありませんが、domain.Loadがパスを取るとは思いません.アセンブリ名が必要だと思います..

編集:

このページを見て

備考を見てください:

このメソッドは、アセンブリを現在のアプリケーション ドメインに読み込む場合にのみ使用してください。このメソッドは、静的な Assembly.Load メソッドを呼び出すことができない相互運用性の呼び出し元の便宜のために提供されています。アセンブリを他のアプリケーション ドメインに読み込むには、CreateInstanceAndUnwrap などのメソッドを使用します。

このメソッドのすべてのオーバーロードに共通する情報については、Load(AssemblyName) メソッドのオーバーロードを参照してください。

于 2011-06-09T11:04:53.517 に答える