正如标题所述,我在C#中遇到MergeSynchronizationAgent类的问题。当我尝试使用以下调用创建syncAgent时:
syncAgent = subscription.SynchronizationAgent;
,其中
subscription = new MergePullSubscription();
我收到一条错误,指出Microsoft.SqlServer.Replication.ComErrorException,“Class not registered”。现在,我已经阅读了这个问题的解决方案,最常见的是将我的项目平台设置为“任何CPU”。这将修复该工具的签出功能,但遗憾的是程序中还有其他功能可以查找64位数据库,并将项目的平台设置为“任何CPU”会破坏此查找功能。此功能比结帐功能更加严格,因此我们必须将项目的平台设置为“x86”并使结帐功能解决此问题。我的问题是,我们的项目平台必须是“x86”的ComErrorException问题还有其他修复吗?我正在使用Sql Server 2008 R2。
答案 0 :(得分:1)
我认为您运行的是64位版本的Microsoft SQL Server 2008。
64位安装程序包不会安装/注册32位ActiveX组件。当您尝试访问SynchronizationAgent属性时,复制管理对象(RMO)程序集会使用这些组件。
缺少注册是您收到ComErrorException的原因:您的32位应用程序正在查找具有特定GUID的ActiveX组件,但此GUID仅存在于64位注册表中,您的应用程序不会看到。如果您构建“任何CPU”版本,您的应用程序将以64位运行,因此也会看到64位注册表。
此解决方法是让32位虚拟机运行并在那里安装32位版本的Microsoft SQL Server 2008。然后,您需要手动将一组特定文件从虚拟机复制到开发环境,并在应用程序设置过程中集成这些文件的注册。
您可以从提交到Microsoft Connect的错误报告中找到变通方法的细节。错误报告针对的是针对32位SQL Server运行的64位应用程序,但方案是相同的。