我对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)'。
我的查询:
我遇到的麻烦是由于某些限制我也必须登记DLL。所以我只想重建和签到相关的:(
答案 0 :(得分:3)
是的,添加参数是一个重大变化,即使它是可选的。 IL包含编译器解析的确切签名,而不仅仅是名称。在不影响兼容性的情况下实现此更改的典型方法是添加重载 - 例如:
public CommandInfo SetDns(string ipAdr1) { return SetDns(ipAdr1, ""); }
public CommandInfo SetDns(string ipAdr1, string ipAdr2) {...}
否则:是的,这是一个重大改变,您需要重建所有消费者。