删除类型接口会破坏exe对dll(.NET)的使用

时间:2017-01-10 18:56:35

标签: .net dll types interface compilation

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");
   }
}

1 个答案:

答案 0 :(得分:0)

简而言之,只是删除某个类型的接口并不会使它与使用它的另一个库不兼容(只要方法原型没有改变,以及这些原因:https://stackoverflow.com/a/806510/578879

我原以为这不是问题,但是在没有自己做这个简单的测试的情况下提出问题。我的大项目中的问题很可能是由于构建问题(某种程度上有一个较旧版本的exe实际上直接引用了IOldInterface - 因此找不到IOldInterface异常)。