1

我已经实现了与如何加载 .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() 来回避这个问题,但它似乎不起作用。

4

0 回答 0