.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)'.
我的查询:
- 这是预期的吗?我还必须重建所有 DLL 吗?
我遇到的麻烦是由于某些限制,我也必须签入 DLL。所以我只想重建和签入相关的:(
- 如果我还必须重建所有其他 dll,有没有办法知道哪些 DLL 有这个作为参考并且需要重建?
是的,添加参数是一项重大更改,即使它是可选的。 IL 包含编译器解析的确切签名,而不仅仅是名称。在不影响兼容性的情况下实现此更改的典型方法是添加重载 - 例如:
public CommandInfo SetDns(string ipAdr1) { return SetDns(ipAdr1, ""); }
public CommandInfo SetDns(string ipAdr1, string ipAdr2) {...}
否则:是的,这是一个重大变化,您需要重建所有消费者。
我完全不熟悉 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)'.
我的查询:
- 这是预期的吗?我还必须重建所有 DLL 吗?
我遇到的麻烦是由于某些限制,我也必须签入 DLL。所以我只想重建和签入相关的:(
- 如果我还必须重建所有其他 dll,有没有办法知道哪些 DLL 有这个作为参考并且需要重建?
是的,添加参数是一项重大更改,即使它是可选的。 IL 包含编译器解析的确切签名,而不仅仅是名称。在不影响兼容性的情况下实现此更改的典型方法是添加重载 - 例如:
public CommandInfo SetDns(string ipAdr1) { return SetDns(ipAdr1, ""); }
public CommandInfo SetDns(string ipAdr1, string ipAdr2) {...}
否则:是的,这是一个重大变化,您需要重建所有消费者。