【问题标题】:Microsoft Sync Framework COM class errorMicrosoft 同步框架 COM 类错误
【发布时间】:2013-01-09 06:51:11
【问题描述】:

我一直在玩“Microsoft Sync Framework 2.1”来将两个本地 sql server 2008 数据库与一个 asp.net 项目同步。

我的代码:

SqlConnection clientConn = new SqlConnection(@"Server=XXXXXX;User ID=sa; Password=xxxx;Database=ZzzClient");

SqlConnection serverConn = new SqlConnection("Server=XXXXXX;User ID=sa; Password=xxxx;Database=ZzzServer");

SyncOrchestrator syncOrchestrator = new SyncOrchestrator();

syncOrchestrator.LocalProvider = new SqlSyncProvider("InventoryScope", clientConn);
syncOrchestrator.RemoteProvider = new SqlSyncProvider("InventoryScope", serverConn);

syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload;

SyncOperationStatistics syncStats = syncOrchestrator.Synchronize();

但执行 Synchronize() 调用时出现以下错误;

检索具有 CLSID 的组件的 COM 类工厂 {EC413D66-6221-4EBB-AC55-4900FB321011} 由于以下原因而失败 错误:80040154 类未注册(HRESULT 异常: 0x80040154 (REGDB_E_CLASSNOTREG))。

开发环境 VS 2012,C# asp.net 项目,框架 4.5 操作系统:Windows 7 Home Prem。 (x64)

已安装 SyncSDK-v2.1-x64-ENU。

Microsoft.同步

Microsoft.Synchronization.Data

Microsoft.Synchronization.Data.SqlServer

从“C:\Program Files\Microsoft Sync Framework\2.1\Runtime”向项目添加了引用。

由 SqlSyncScopeProvisioning 提供的两个数据库。

我已经尝试过 x64 和 x86 的 Project Platform Target

任何想法将不胜感激......

我已将所有引用从“C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework”更改为“C:\Program Files\Microsoft Sync Framework\2.1\Runtime”

并将平台目标设置为 x64

已选择“使用本地 IIS Web 服务器”

更新: 我用控制台应用程序尝试了相同的过程,它工作正常并同步了所有数据。

我添加了以下四个对控制台应用程序的引用;

"c:\Program Files\Microsoft Sync Framework\2.1\Runtime\x64\Microsoft.Synchronization.dll"

c:\Program Files\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x64\Microsoft.Synchronization.Data.dll"

"c:\Program Files\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x64\Microsoft.Synchronization.Data.Server.dll"

"c:\Program Files\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x64\Microsoft.Synchronization.Data.SqlServer.dll"

并设置应用程序的调试属性如下

相同的引用、相同的构建属性(目标为 x64)和相同的代码在 Asp.Net 项目中不起作用。

无法加载文件或程序集“WebApplication2”或其其中之一 依赖关系。试图加载一个不正确的程序 格式。

我猜,Web 应用程序无法加载正确的程序集并尝试加载 x86 版本

【问题讨论】:

  • 引用程序集不应该在 Program Files 而不是 Program Files (x86) 中吗?你是在 IIS 还是 VS Web 服务器上运行它?
  • 我都试过了。如果我通过 VS add-reference 添加这些引用,它来自 Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime。我手动删除了“Program Files (x86)”之一,并通过从 C:\Program Files\Microsoft Sync Framework\2.1\Runtime\x64 浏览添加了一个新的。同样的结果......
  • VS 2012 显示并从“Program Files (x86)”添加了“Microsoft.Synchronization”程序集,但如果我从“C:\Program Files\Microsoft Sync Framework\2.1\ Runtime\x64" ,我得到“无法加载文件或程序集 'DataAccess' 或其依赖项之一。试图加载格式不正确的程序。”错误。
  • 您的 IIS 是否在 64 位运行?
  • 是的,它在同一操作系统上,即“Windows 7 Home Prem. (x64)”。程序集在 WindowsForms 应用程序上工作。和控制台应用程序。正确但 asp.net.

标签: c# .net microsoft-sync-framework


【解决方案1】:

我讨厌回答自己的问题:

如果您启动一个具有 x64 同步框架的 asp.net 项目 程序集,但您在 管理员帐户,VS 无法加载 Snyc Framework 程序集。在 至少,这是我的问题..

如果您不是管理员 VS 无法正确管理“本地 IIS Web 服务器”。

另外,如果我没记错的话,即使你的操作系统是 x64,“IIS Express”也无法加载 x64 同步框架程序集。

不要费心使用“IIS express”,只需使用“本地 IIS Web 服务器” 在 VS 上具有管理员权限并为您的项目设置平台目标 x64。

【讨论】:

    【解决方案2】:

    我使用 64 位同步框架 DLL,并且必须在项目属性构建页面中将我的 C# 应用程序属性从为 Any CPU 构建更改为 x64
    但随后 GUI 设计器不再显示对话框。

    替代方法是使用 32 位同步框架并在项目的构建设置中设置 首选 32 位

    【讨论】:

      【解决方案3】:

      如果它发生在与您的开发计算机不同的计算机上,请确保您已安装 Microsoft Sync Framework - Redistributable Package。 https://www.microsoft.com/en-us/download/details.aspx?id=19502

      并在下载选项中选择合适的平台(x86-x64)

      【讨论】:

        【解决方案4】:

        如果您不想更改目标平台并希望将其保持为“任何”。为您的应用程序使用新的应用程序池,进入高级设置并将启用 32 位应用程序更改为 True。它对我有用,它可能对你有用。

        【讨论】:

          猜你喜欢
          • 2014-02-06
          • 1970-01-01
          • 2010-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-09
          • 1970-01-01
          相关资源
          最近更新 更多