リフレクション操作のために .NET アセンブリをロードし、その後アンロードする方法の 4 番目の回答と同様のコードを実装しました。
2 つのアセンブリ (1 つはデバッグ用、もう 1 つはリリース用) を読み込もうとすると、FileLoadException が発生し、「同じアプリケーション ドメイン内の新しい場所からは読み込めません」というメッセージが表示されます。
私が使用しているコードは次のとおりです。
private String rootAssembly;
private void button1_Click(object sender, EventArgs e)
{
rootAssembly = "{...path to release version...}\TestApp.exe";
TempLoadAssembly();
}
private void button2_Click(object sender, EventArgs e)
{
rootAssembly = "{...path to debug version...}\TestApp.exe";
TempLoadAssembly();
}
public void TempLoadAssembly()
{
AppDomain tempDomain = AppDomain.CreateDomain("TemporaryAppDomain");
tempDomain.DoCallBack(LoaderCallback);
AppDomain.Unload(tempDomain);
}
private void LoaderCallback()
{
Assembly assembly = Assembly.ReflectionOnlyLoadFrom(rootAssembly);
IList<CustomAttributeData> customAttributeDatas = CustomAttributeData.GetCustomAttributes(assembly);
// do other work here
}
私のコードにバグがありますか、それともアセンブリの 2 つのバージョンをロードできないのでしょうか? この問題を回避するために、新しい一時ドメインで AppDomain.Unload() を呼び出していますが、機能していないようです。