我已经实现了与如何加载 .NET 程序集以进行反射操作并随后卸载它的第 4 个答案类似的代码?
当我尝试加载两个程序集,一个调试和另一个版本时,我收到 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
}
我的代码中是否存在错误,或者无法加载程序集的两个版本?我在新的临时域上调用 AppDomain.Unload() 来回避这个问题,但它似乎不起作用。