1

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);
    }
}

どのような状況で例外が発生する可能性がありますか?

4

1 に答える 1

1

CreateInstanceFromAndUnwrapメソッドを確認する必要があります。これは、あなたのようなサンドボックス化されたアドイン シナリオに使用するものです。System.AddIn (MAF) は、このメソッドを使用してアドイン パイプライン セグメントを読み込みます。

于 2012-09-25T15:07:06.710 に答える