我有同样的问题。就我而言,这是由添加optional argument 引起的。
所以首先你会:
引用程序集:
referencedAssembly.DoStuff(firstArgument, secondArgument)
引用程序集:
public void DoStuff(string firstArgument, string secondArgument)
{
//stuff to do
}
然后你给方法添加一个可选参数,但是你在调用它时没有提供那个参数。
引用程序集:
referencedAssembly.DoStuff(firstArgument, secondArgument)//unchanged
引用程序集:
public void DoStuff(string firstArgument, string secondArgument, string thirdArgument = "default value")
{
//stuff to do
}
在本地,这将构建并运行良好,因为新构建的引用Assembly.dll 将引用 DoStuff(string, string, string) 方法。但是,当您只部署更改后的 referencedAssembly 时(考虑:添加的参数是可选的,并且 referncingAssembly 仍然有效),旧版本的 referencingAssembly 将抛出 MethodNotFound,因为它会寻找带有签名 DoStuff(string, string) 的方法,即由于我们添加了额外的(可选)参数,因此不再出现在 referencedAssembly 中。
一个可能的解决方案可能是过载:
引用程序集:
public void DoStuff(string firstArgument, string secondArgument)//original method
{
DoStuff(firstArgument, secondArgument, "default value")
}
public void DoStuff(string firstArgument, string secondArgument, string thirdArgument)//new overload of the method
{
//stuff to do
}
或者部署新构建的引用Assembly(它将引用带有签名DoStuff(string, string, string)的方法)。