.NET DLL是静态链接还是动态链接?

时间:2018-05-08 15:38:30

标签: c# dll optional-parameters

我对C#完全不熟悉,现在必须支持用C#编写的整个测试套件。 我在Windows 2008 Server上使用Visual Studio 2013。

我的问题如下:

我有一个带签名的类方法

public CommandInfo SetDns(String ipAdr1)

我将其更改为添加可选参数

public CommandInfo SetDns(String ipAdr1, String ipAdr2="")

我刚刚重建了这个DLL,并且认为引用它的所有其他DLL都没有看到差异

但似乎较旧的DLL现在因错误

而失败
  

System.MissingMethodException:找不到方法:' My.TestBeds.CommandInfo My.TestBeds.DDR.Net.SetDns(System.String)'。

我的查询:

  1. 这是预期的吗?我还必须重建所有的DLL?
  2. 我遇到的麻烦是由于某些限制我也必须登记DLL。所以我只想重建和签到相关的:(

    1. 如果我还要重建所有其他的dll,有没有办法知道哪个DLL有这个作为参考并且需要重建?

1 个答案:

答案 0 :(得分:3)

是的,添加参数是一个重大变化,即使它是可选的。 IL包含编译器解析的确切签名,而不仅仅是名称。在不影响兼容性的情况下实现此更改的典型方法是添加重载 - 例如:

public CommandInfo SetDns(string ipAdr1) { return SetDns(ipAdr1, ""); }
public CommandInfo SetDns(string ipAdr1, string ipAdr2) {...}

否则:是的,这是一个重大改变,您需要重建所有消费者。