当前位置: 首页 > 编程语言 > C#

System.MissingMethodExceptionAfterAddingOptionalParametersShare

时间:2023-04-10 16:03:36 C#

System.MissingMethodExceptionAfterAddingOptionalParametersAfteracomponenthadanoptionalparameter,IreceivedSystem.MissingMethodExceptionerrorandcalledits另一个组件没有构建,因为它调用了它使用旧参数。只有添加了参数的组件才会构建为已部署的补丁。调用组件是旧的,因为它没有改变。当调用组件运行时,它给出错误:ExceptionInformationExceptionType:System.MissingMethodExceptionMessage:Methodnotfound:'LabelURLsIPSD.BnB.Transaction.Postage.GetLabelURLs(System.String)'。数据:System.Collections.ListDictionaryInternalTargetSite:VoidGenerateScanForm(Int32,Int32)HelpLink:NULL来源:BnBDispenseQueueProcess据我所知,它不应该抛出错误,因为新参数是可选的。另一个调用组件(EXE)作为Windows服务运行的东西。我们找到了一个非常有线的解决方法来让它运行。通过一次删除更改的组件并运行调用组件,它会说找不到DLL。再次放置相同的DLL并调用该组件工作正常:)。我认为我缺少.net的一些内部结构。让我知道是否需要更多信息。只有添加了参数的组件才会构建为已部署的补丁。调用组件是旧的,因为它没有改变。应该有一个变化,因为旧代码调用了一个不再存在的方法!据我所知,它不应该引发错误,因为新参数是可选的。这不是执行时的决定——这是编译时的决定。如果你有这样的方法:voidFoo(intx,inty=5)并且你这样称呼它:Foo(10);然后编译器有效地将其转换为以下调用:Foo(10,5);二进制文件中有完整的参数列表。如果您想以不影响二进制兼容性的方式从单参数版本转到多参数版本,则必须添加重载,例如voidFoo(intx){Foo(x,5);}voidFoo(intx,inty){...}或者,您可以重建调用代码并重新部署它。我对你的解决方法有严重的怀疑。您确定当您将DLL放回原处时,您将其替换为新版本(带有可选参数)而不是旧版本吗?以上就是C#学习教程的全部内容:System.MissingMethodException添加可选参数后。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢