如标题所述,我在使用 C# 中的 MergeSynchronizationAgent 类时遇到问题。当我尝试使用以下调用创建我的 syncAgent 时:
syncAgent = subscription.SynchronizationAgent;
在哪里
subscription = new MergePullSubscription();
我收到一条错误消息,指出 Microsoft.SqlServer.Replication.ComErrorException,“类未注册”。现在,我已经阅读了这个问题的解决方案,最常见的是将我的项目平台设置为“任何 CPU”。这将修复该工具的 checkout 功能,但不幸的是,程序中还有其他功能可以查找 64 位数据库,将项目的平台设置为“任何 CPU”会破坏此查找功能。此功能比结帐功能严格得多,因此我们必须将项目的平台设置为“x86”并让结帐功能解决这个问题。我的问题是对于我们的项目平台必须是“x86”的这个 ComErrorException 问题是否有任何其他修复?我正在使用 SQL Server 2008 R2。
最佳答案
我假设您运行的是 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 位应用程序,但场景是相同的。
关于c# - Microsoft.SqlServer.Replication.ComErrorException;无法将属性更改为 "Any CPU",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702440/