“Bin Deploy”Sql CE 3.5 SP2 & 已安装时出错

Posted

技术标签:

【中文标题】“Bin Deploy”Sql CE 3.5 SP2 & 已安装时出错【英文标题】:"Bin Deploy" Sql CE 3.5 SP2 & Error when it's already installed 【发布时间】:2011-05-20 13:29:56 【问题描述】:

我有一个使用 Sql CE 3.5 SP2 的应用程序。我已经包含了 Sql CE 所需的 DLL - 这里有 7 个(C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5),我只是将它们作为应用程序文件添加到我的部署包中。

我还使用 EF 访问数据库,因此我在 app.config 文件中添加了一个条目以提供数据提供程序:

<system.data>
 <DbProviderFactories>
  <add name="Microsoft SQL Server Compact Data Provider"
             invariant="System.Data.SqlServerCe.3.5"
             description=".NET Framework Data Provider for Microsoft SQL Server Compact"
             type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
 </DbProviderFactories>
</system.data>

对我部署的应用执行上述操作;但是,当我从 VS2010 以调试模式运行我的应用程序时,任何通过 EF 运行的数据库调用都会出现此错误:

The specified store provider cannot be found in the configuration, or is not valid.

如果我从我的 app.config 中删除该条目,它可以正常工作,但对于已部署的应用程序将停止工作。

有快乐的媒介吗?我假设错误的原因是因为我在我的开发机器上安装了一个合法的 Sql CE 副本,无论出于何种原因,在我的 app.config 中注册它会导致它崩溃,尽管我不完全明白为什么.

提示?有什么建议吗?

提前致谢。

【问题讨论】:

【参考方案1】:

我应该做更多的搜索。我发现了问题,看来我需要在添加之前删除提供程序。当实际安装 Sql CE 时,它会在 machine.config 中注册自己,因此将其添加到 app.config 会导致它被注册两次。

这就是 app.config 中应该包含的内容

<system.data>
<DbProviderFactories>
  <remove invariant="System.Data.SqlServerCe.3.5" />
  <add name="Microsoft SQL Server Compact Data Provider"
             invariant="System.Data.SqlServerCe.3.5"
             description=".NET Framework Data Provider for Microsoft SQL Server Compact"
             type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>

【讨论】:

以上是关于“Bin Deploy”Sql CE 3.5 SP2 & 已安装时出错的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server CE 3.5 和 .NET Compact Framework 2.0 SP2

Sql Server Ce 3.5 检查约束

SQL CE Compact 3.5 表的标识列

TableDirect 表访问的 SQL CE 3.5 问题

将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0

SQL Server CE 数据库升级 3.5 到 4.0 C#