Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除类型接口会中断exe';动态链接库(.NET)的使用_.net_Dll_Types_Interface_Compilation - Fatal编程技术网

删除类型接口会中断exe';动态链接库(.NET)的使用

删除类型接口会中断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

exe调用dll,但不显式使用已删除的接口。为什么用旧DLL编译的EXE不能在运行时用新DLL运行

编译器必须保留关于类型的额外信息,而不仅仅是使用什么

EXE

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

简而言之,简单地从类型中删除接口并不会使它与使用它的另一个库不兼容(只要方法原型没有改变,以及以下原因:)


我本以为这不是问题,但我自己没有做这个简单的测试就提出了这个问题。我更大的项目中的问题很可能是由于生成问题(不知何故,有一个较旧版本的exe,它实际上直接引用了IOldInterface——因此IOldInterface not found异常).

我无法用您提供的代码重现问题-但事实上,我必须更改它,甚至使其编译,这表明您可能也没有使用此代码进行测试。请提供一个实际演示问题的示例。对此表示抱歉。你说得对。我是从一个更大的代码库中推断出来的,没有编译这个。在有效放弃此问题之前更新了帖子。
public class Foo
{
   public void PrintHello()
   {
        Console.WriteLine("Hello");
   }
}