実行時に新しい 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;
}