1

正如标题所述,我遇到了 C# 中的 MergeSynchronizationAgent 类的问题。当我尝试使用以下调用创建我的 syncAgent 时:

syncAgent = 订阅。同步代理;

在哪里

订阅 = 新的 MergePullSubscription();

我收到一条错误消息,指出 Microsoft.SqlServer.Replication.ComErrorException,“类未注册”。现在,我已经阅读了这个问题的解决方案,最常见的是将我的项目平台设置为“任何 CPU”。这将修复该工具的检出功能,但不幸的是,程序中还有其他查找 64 位数据库的功能,并且将项目的平台设置为“任何 CPU”会破坏此查找功能。此功能比结帐功能更严格,因此我们必须将项目的平台设置为“x86”并让结帐功能解决此问题。我的问题是我们的项目平台必须是“x86”的这个 ComErrorException 问题是否有任何其他修复?我正在使用 Sql Server 2008 R2。

4

1 回答 1

1

我假设您运行的是 64 位版本的 Microsoft SQL Server 2008。

64 位安装程序包不安装/注册 32 位 ActiveX 组件。当您尝试访问 SynchronizationAgent 属性时,复制管理对象 (RMO) 程序集会使用这些组件。

缺少注册是您收到 ComErrorException 的原因:您的 32 位应用程序正在寻找具有特定 GUID 的 ActiveX 组件,但此 GUID 仅存在于您的应用程序看不到的 64 位注册表中。如果您构建“Any CPU”版本,您的应用程序将以 64 位运行,因此也会看到 64 位注册表。

解决方法是让 32 位虚拟机运行并在那里安装 32 位版本的 Microsoft SQL Server 2008。然后,您需要手动将一组特定文件从虚拟机复制到您的开发环境,并将这些文件的注册集成为应用程序设置的一部分。

您可以从提交给Microsoft Connect的错误报告中找到解决方法的详细信息。错误报告针对的是针对 32 位 SQL Server 运行的 64 位应用程序,但情况相同。

于 2013-09-19T11:42:25.257 回答