在C#中使用app域

时间:2012-04-29 08:58:36

标签: .net

我得出结论,为我的项目使用app域将是最好的方法。我必须将不同的dll文件加载到我的项目中,以便使用不同开发人员编写的文件。我不知道从哪里开始寻找,并不完全确定它是如何工作的。我看了几个例子,但是他们没有让我清楚地了解该怎么做。 我想知道的是,如果我有一个dll并将其加载到app域中,我是否可以使用该dll中的公共方法,或者这个app域是如何使用的?我也希望有人可以为我提供有关如何使用它,加载我的dll以及访问/使用它的教程链接。

提前致谢

1 个答案:

答案 0 :(得分:3)

如果你想在运行时在新appdomain中加载一个urefrenced dll项目,那么你需要混合反射和app域概念。这意味着在不同的appdomain中使用反射加载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;
}