exe调用dll,但没有显式使用已删除的接口。为什么用新DLL在运行时运行用旧DLL编译的EXE?
编译器必须保留有关类型的额外信息,而不仅仅是使用的内容。
EXE
void main()
{
new Foo().PrintHello();
}
旧DLL:
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");
}
}
答案 0 :(得分:0)
简而言之,只是删除某个类型的接口并不会使它与使用它的另一个库不兼容(只要方法原型没有改变,以及这些原因:https://stackoverflow.com/a/806510/578879 )
我原以为这不是问题,但是在没有自己做这个简单的测试的情况下提出问题。我的大项目中的问题很可能是由于构建问题(某种程度上有一个较旧版本的exe实际上直接引用了IOldInterface - 因此找不到IOldInterface异常)。