确定assembly的装载上下文

给定一个加载的Assembly有一种方法(在代码中)来确定它加载到的3个加载上下文中的哪一个(默认的LoadLoadFromNeither )?

在Suzanne Cook的“选择绑定上下文”一文中,将程序集加载到LoadFrom时会出现一些缺点。 特别是,我的库使用反序列化并在加载到LoadFrom上下文时遇到InvalidCastException

目前我的库失败很晚(它在执行有问题的反序列化代码时失败 – 请参阅我的示例 )。 我想通过检测它加载到的上下文并在未加载到默认Load上下文时抛出exception,使它在这些情况下更早失败。

您可以测试它的行为,而不是识别程序集的上下文。 例如,对于序列化,序列化程序将调用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; } }