我有一个应用程序,它在分隔的dll中使用特定类型(由其他人开发)。 说它是InnerType:
namespace SeparatedAssembly
{
public class InnerType
{
}
}
到目前为止,我在Visual Studio中引用了这个dll的一个版本,我在我的应用程序中使用了InnerType。但是,由于InnerType中的代码可能会更改,因此程序集在运行时使用" AssemblyResolve"事件
但是现在,这个类的命名空间发生了变化:
namespace SeparatedAssembly.Inner
{
public class InnerType
{
}
}
所以,我有一个异常TypeLoadException,因为我的应用程序不能再找到这种类型了。我无法引用这个新版本并更改我使用的命名空间,因为它与此dll的旧版本兼容。
所以我的问题是:甚至可以在AssemblyResolve事件中指定要在程序集中查找的命名空间吗? 如果有办法捕获此异常并尝试使用不同的命名空间,那也可以。
感谢。
答案 0 :(得分:1)
不,要调用的方法的全名在调用程序集中指定,并且您不能以简单的方式“重写”它。命名空间是名称的一部分。我将参考我前一段时间给出的另一个回复:Is C# namespace compiled into IL files to be “complete” names?。
举例来说TryRoslyn:
^
被翻译为
$
(名称空间namespace Foo
{
public class Bar
{
public void Zoo()
{
Console.WriteLine("Hello");
}
}
}
直接是名称.class public auto ansi beforefieldinit Foo.Bar
extends [mscorlib]System.Object
{
)
然后调用Foo
的方法是:
Foo.Bar