删除类型接口会中断exe';动态链接库(.NET)的使用
exe调用dll,但不显式使用已删除的接口。为什么用旧DLL编译的EXE不能在运行时用新DLL运行 编译器必须保留关于类型的额外信息,而不仅仅是使用什么 EXE 旧DLL:删除类型接口会中断exe';动态链接库(.NET)的使用,.net,dll,types,interface,compilation,.net,Dll,Types,Interface,Compilation,exe调用dll,但不显式使用已删除的接口。为什么用旧DLL编译的EXE不能在运行时用新DLL运行 编译器必须保留关于类型的额外信息,而不仅仅是使用什么 EXE 旧DLL: public class Foo : IOldInterface { public void PrintHello() { Console.WriteLine("Hello"); } public int Something { get { return 123; } } } pub
public class Foo : IOldInterface
{
public void PrintHello()
{
Console.WriteLine("Hello");
}
public int Something { get { return 123; } }
}
public interface IOldInterface
{
int Something { get; }
}
新DLL
public class Foo
{
public void PrintHello()
{
Console.WriteLine("Hello");
}
}
简而言之,简单地从类型中删除接口并不会使它与使用它的另一个库不兼容(只要方法原型没有改变,以及以下原因:)
我本以为这不是问题,但我自己没有做这个简单的测试就提出了这个问题。我更大的项目中的问题很可能是由于生成问题(不知何故,有一个较旧版本的exe,它实际上直接引用了IOldInterface——因此IOldInterface not found异常).我无法用您提供的代码重现问题-但事实上,我必须更改它,甚至使其编译,这表明您可能也没有使用此代码进行测试。请提供一个实际演示问题的示例。对此表示抱歉。你说得对。我是从一个更大的代码库中推断出来的,没有编译这个。在有效放弃此问题之前更新了帖子。
public class Foo
{
public void PrintHello()
{
Console.WriteLine("Hello");
}
}