c# - Microsoft.SqlServer.Replication.ComErrorException;无法将属性更改为 "Any CPU"

标签 c# mysql database sql-server-2008

如标题所述,我在使用 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/

相关文章:

c# - "{{" "}}"之间的紫色文本是什么

c# - EntityFramework 与 WCF - 如何返回 EF 实体

php - 为什么数据不显示 php mysql

mysql - 如果我已经在 MySQL 中声明了多列唯一键,还需要添加多列索引吗?

database - 使用 scala/lift 创建一个数据库和一个简单的登录界面

mongodb - 如何设计我的 Mongo 数据库

database - MySql - 计算每天事件的时间戳数据集(时间戳、事件)

c# - 使用 Resharper 更改类中的所有属性以具有支持属性

c# - System.Net.Http.HttpClient 如何选择认证类型?

php - 使用 PHP、MySQL 和 HTML 的在线测验网站