2

私のプロジェクトにアプリドメインを使用することがそれを行うための最良の方法であるという結論に達しました。さまざまな開発者から作成されたものを使用するには、さまざまなdllファイルをプロジェクトにロードする必要があります。私はどこから探し始めるのか見当がつかず、すべてがどのように機能するのか完全にはわかりません。私はいくつかの例を見てきましたが、それらは私に何をすべきかについての明確な理解を与えてくれません。私が知りたいのは、dllがあり、それをアプリドメインにロードした場合、そのdll内でパブリックメソッドを使用できるか、またはこのアプリドメインはどのように使用されるかということです。また、これを使用する方法、dllをロードする方法、およびアクセス/使用する方法に関するチュートリアルリンクを提供してくれる人が欲しいです。

前もって感謝します

4

1 に答える 1

3

実行時に新しい appdomain にプロジェクトの urefrenced dll をロードする場合は、リフレクションと app domain の概念を組み合わせる必要があります。これは、異なるアプリドメインでリフレクションを使用して dll をロードすることを意味します。

問題のサンプル コード:

static void UsereflectionWithAppDomain()
{
    AppDomain mydomain = AppDomain.CreateDomain("MyDomain");
    MethodInfo mi = default(MethodInfo);

    // Once the files are generated, this call is
    // actually no longer necessary.

    byte[] rawAssembly = loadFile(@"d:\RelectionDLL.dll");

    // rawSymbolStore - debug point are optional.
    byte[] rawSymbolStore = loadFile(@"d:\RelectionDLL.pdb");
    Assembly assembly = mydomain.Load(rawAssembly, rawSymbolStore);

    Type reflectionClassType = assembly.GetType("ReflectionDLL.MyStaicClass");

    mi = reflectionClassType.GetMethod("PrintI");
    mi.Invoke(null, null);

    AppDomain.Unload(mydomain);
}


// Loads the content of a file to a byte array. 
static byte[] loadFile(string filename)
{
    FileStream fs = new FileStream(filename, FileMode.Open);
    byte[] buffer = new byte[(int)fs.Length];
    fs.Read(buffer, 0, buffer.Length);
    fs.Close();

    return buffer;
}
于 2012-04-29T09:29:02.697 に答える