【发布时间】:2012-04-10 16:43:14
【问题描述】:
当我在一个组件中有一个可选参数并且调用它的另一个组件没有构建时,我收到 System.MissingMethodException 错误,因为它使用旧数量的参数调用它。
只有添加了参数的组件才会构建为补丁部署。调用组件是旧的,因为它没有任何变化。
调用组件运行时报错:
异常信息
异常类型:System.MissingMethodException 消息:方法不是 找到:'标签网址 IPSD.BnB.Transaction.Postage.GetLabelURLs(System.String)'。数据: System.Collections.ListDictionaryInternal TargetSite:无效 GenerateScanForm(Int32, Int32) HelpLink: NULL Source: BnBDispenseQueueProcess
据我所知,它不应该引发错误,因为新参数是可选的。 另一件事调用组件(EXE)作为 Windows 服务运行。
我们找到了一个非常简单的解决方法来让它运行。通过删除更改的组件一次并运行调用组件,它会说找不到 DLL。再次放置相同的 DLL 并调用组件工作正常:)。
我认为我缺少 .net 的一些内部结构。
如果需要更多信息,请告诉我。
【问题讨论】:
-
我们将可选参数添加到我们的常用库之一。这破坏了所有正在运行的模块(我们很幸运,它正在测试环境中)。这些都是 .net 的花哨的开发时间特性,看来我们在使用它之前必须深入了解它们。感谢您提出这个问题。
-
@CreativeManix 请告诉我您的发现。因为无法完全理解它为什么会这样。可能是幕后发生的一些编译技巧
-
@Sanddep 正如 Jon Skeet 所提到的,可选参数是编译时特性。在调用程序程序集的编译时,可选参数值与默认值一起传递。因此,如果您向公共库添加了一个可选参数,请确保您也在编译调用程序程序集。如果您不想更好地编译所有调用程序程序集,请不要使用可选参数,请改用重载方法;
-
@CreativeManix 感谢分享信息 :)
标签: c# .net vb.net-2010 optional-parameters missingmethodexception