我有一个应用程序在分离的dll(由其他人开发)中使用特定类型。 说它是InnerType:在动态加载程序集上更改名称空间
namespace SeparatedAssembly
{
public class InnerType
{
}
}
到现在为止,我在Visual Studio中引用一个版本的这个dll的,我用的是InnerType在我的应用程序。但是,由于InnerType中的代码可能会更改,因此程序集将在运行时通过“AssemblyResolve”事件加载。
但现在,这个类的命名空间发生了变化:
namespace SeparatedAssembly.Inner
{
public class InnerType
{
}
}
所以,我有一个异常TypeLoadException,因为我的应用程序再也找不到这种类型。我不能只引用这个新版本并更改我使用的命名空间,因为它与此dll的旧版本兼容。
所以我的问题是:是否有可能在AssemblyResolve事件中指定要在程序集中查找的名称空间? 如果有办法捕获这个异常并尝试使用不同的命名空间,那也是可以的。
谢谢。
即使答案是否定的,这很有帮助。谢谢。 – Jonyjack
@Jonyjack我对你的问题给了一些想法,我看不到一个简单的解决方案,甚至不是一个简单的解决方案。你可以创建一些shim类(一个用于旧的.dll,一个用于新的.dll),并从一个通用接口派生出这两个Shim类(然后在你的代码中只使用这个通用接口),但取决于你做与dll的对象可能是非常困难的。 – xanatos