鉴于已加载Assembly
,有一种方法(在代码中)可以确定加载到的3个加载上下文中的哪一个(默认加载, LoadFrom,或都不)?
在Suzanne Cook's "Choosing a Binding Context"文章中,将程序集加载到 LoadFrom 时会出现一些缺点。特别是,我的库使用反序列化并在加载到 LoadFrom 上下文时遇到InvalidCastException
。
目前我的库失败很晚(它在执行有问题的反序列化代码时失败 - 请参阅my example)。在这些情况下,我想通过检测加载的上下文并在未加载到默认加载上下文中时抛出异常来使其失败。
答案 0 :(得分:3)
您可以测试它的行为,而不是识别程序集的上下文。例如,对于序列化,序列化程序将调用Assembly.Load,该程序集必须匹配正在序列化的对象的程序集。可以通过检查CodeBase来测试匹配。
private static bool DoesAssemblyMatchLoad(Assembly assemblyToTest)
{
try
{
var loadedAssembly = Assembly.Load(assemblyToTest.FullName);
return assemblyToTest.CodeBase == loadedAssembly.CodeBase;
}
catch (FileNotFoundException)
{
return false;
}
}
答案 1 :(得分:0)