AppDomain
ランタイムでアセンブリをロードおよびアンロードするために使用しようとしています。アセンブリの読み込みを実装する前に、MSDN の例をアプリケーションで動作させようとしていますが、問題が発生しています - DoCallback
-invokation は例外で失敗します
ファイルまたはアセンブリ '[MyPluginAssembly]、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
私のアセンブリ ( [MyPluginAssembly]
) は、ホスト アプリケーションによってロードされて実行されています (つまり、プラグインです)。プラグインAppDomain
はアプリケーション ドメインのようです (つまり、別のドメインにサンドボックス化されていません)。新しいドメインにエントリ/呼び出し元/実行アセンブリをロードして確実[MyPluginAssembly]
にロードしようとしましたが、これらの呼び出しが null 以外を返しても、上記の例外が発生します。
私が使用するコード ( MSDN の例+ 「親」アセンブリをロードするコード):
public class PingPong : MarshalByRefObject
{
private string greetings = "PING!";
public static void Main()
{
AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");
// All of these Load()-calls returns non-null
Assembly entryAssembly = otherDomain.Load(Assembly.GetEntryAssembly().GetName());
Assembly callingAssembly = otherDomain.Load(Assembly.GetCallingAssembly().GetName());
Assembly executingAssembly = otherDomain.Load(Assembly.GetExecutingAssembly().GetName());
PingPong pp = new PingPong();
pp.MyCallBack();
pp.greetings = "PONG!";
otherDomain.DoCallBack(new CrossAppDomainDelegate(pp.MyCallBack));
// Output:
// PING! from defaultDomain
// PONG! from defaultDomain
}
// Callback will always execute within defaultDomain due to inheritance from
// MarshalByRefObject
public void MyCallBack()
{
string name = AppDomain.CurrentDomain.FriendlyName;
if (name == AppDomain.CurrentDomain.SetupInformation.ApplicationName)
{
name = "defaultDomain";
}
Console.WriteLine(greetings + " from " + name);
}
}
どのような状況で例外が発生する可能性がありますか?