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

Are .NET DLLs linked statically or dynamically?

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

我的问题如下:

我有一个带有签名的class方法

public CommandInfo SetDns(String ipAdr1)

我更改它以添加一个可选参数

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

我刚刚重建了这个 DLL,并认为引用它的所有其他 DLL 都没有区别

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

System.MissingMethodException: Method not found: 'My.TestBeds.CommandInfo My.TestBeds.DDR.Net.SetDns(System.String)'.

我的查询:

  1. 这是预期的吗?我还必须重建所有 DLL 吗?

我遇到的麻烦是由于某些限制,我也必须签入 DLL。所以我只想重建和签入相关的:(

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

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

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

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