C# 获得;错误的参数数量“;用C编写ActiveX中DotNet更新后#

C# 获得;错误的参数数量“;用C编写ActiveX中DotNet更新后#,c#,com,activex,C#,Com,Activex,我用C#开发了两个ActiveX控件,两个都很好用。直到Windows安装对DotNet Framework的更新。每次发生这种情况,我们都必须再次运行regasm,一切都会恢复正常。起初,例外情况是“找不到成员”。然后我添加了一个定义所有公共方法和属性的接口。此后,异常更改为“错误的参数数”。甚至在没有参数的方法上 控件是使用以下属性定义的: [ProgId("MyCtrlNameSpace.MemoControl")] [ClassInterface(ClassInterfaceType.A

我用C#开发了两个ActiveX控件,两个都很好用。直到Windows安装对DotNet Framework的更新。每次发生这种情况,我们都必须再次运行regasm,一切都会恢复正常。起初,例外情况是“找不到成员”。然后我添加了一个定义所有公共方法和属性的接口。此后,异常更改为“错误的参数数”。甚至在没有参数的方法上

控件是使用以下属性定义的:

[ProgId("MyCtrlNameSpace.MemoControl")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComSourceInterfaces(typeof(IMemoControlEventSink),typeof(IMemoControl))]
[Guid("091085F7-DE1E-4E2C-8A1A-1AE975416281")]
[ComVisible(true)]
public partial class MemoControl : UserControl
{...}
第一个接口定义事件:

[Guid("36813D5C-295F-4222-A3FC-D0372BAA2893")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface IMemoControlEventSink: IMemoControl
{
[DispId(1)]
void ControlZoomed(object sender, object e);
}
第二个接口定义了方法和属性

[Guid("D119B336-DA87-47BA-B21D-306FB6037008")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface IMemoControl
{
[DispId(100)]
int CustomContextMenuItemCount { get; }
}
所有内容都编译为x86,因为使用我的控件的非托管应用程序是x86应用程序。起初是AnyCpu,直到我找到一个帖子,AnyCpu才是问题所在

我有一个虚拟机,在那里我可以复制它。安装我的控件=>一切正常=>安装DotNet框架更新=>异常=>regasm/codebase/tlb=>一切正常。我想要一个解决方案,我不必跟踪是否安装了更新,然后重新注册控件


问题出在哪里?

您是否记得进行干净的构建?“未找到成员”或“参数数量错误”通常是安装了两个版本的标志,无论谁选择了一个,都会选择错误的版本。例如,“类未注册”不同。@jdweng:是的,我们的构建脚本使所有组件都自动注册。谢谢。为了你的help@SimonMourier:不,两个控件都只安装在一个版本中。至少是我的。其中一个只是usercontrol中的一个普通按钮。所有控件都在1.0.0.0中进行版本控制,并且在生成中没有版本更新。谢谢。为了您的帮助,这些错误表明期望和结果之间存在差异。版本控制、tlb和二进制文件不同步等。