让我的 SQL Server CE 在我的 Web 主机上工作的所有步骤是啥

Posted

技术标签:

【中文标题】让我的 SQL Server CE 在我的 Web 主机上工作的所有步骤是啥【英文标题】:What are all the steps to take to get my SQL Server CE to work on my web host machine让我的 SQL Server CE 在我的 Web 主机上工作的所有步骤是什么 【发布时间】:2012-03-08 22:31:20 【问题描述】:

编辑:我的问题归结为,我需要采取哪些步骤来构建一个使用 SQL Server CE 中等信任度的 Web 应用程序?

在发布此内容之前,我已将桌面版本复制到我的 bin 目录中,但我确信还有更多步骤需要执行,因为这不起作用。

错误:在 ADO.NET 提供程序和 SQL Server Compact 的本机二进制文件之间检测到可能的文件版本不匹配,这可能导致功能不正确。这可能是由于存在多个不同版本的 SQL Server Compact 实例,或者由于与 SQL Server Compact 二进制文件同名的错误二进制文件。请安装匹配版本的 SQL Server Compact 二进制文件。

Web 应用:使用 VS 2010 构建的 MVC 3

在我的开发机器上一切正常。

看了this post之后,我摆脱了我的引用,将SqlServerCE.dll和SqlServerCe.Entity.dll复制到我的bin目录中。

这改变了

的错误

无法加载文件或程序集“System.Data.SqlServerCe,Version=4.0.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

到当前的。

我从桌面文件夹中复制了 SqlServerCE.dll,因此我可以在中等信任下运行。

来自我的 Web.config 文件:

  `       <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        <assemblyIdentity name="System.Data.SqlServerCe" 
                          publicKeyToken="89845dcd8080cc91" culture="neutral"/>
        <bindingRedirect oldVersion="4.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>

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

编辑:谢谢大家。

我的包目录中确实有 SqlServerCompact.4.0.8852.1。

我从我的 bin 目录中删除了 SqlServerCE.dll 和 SqlServerCe.Entity.dll,因为它们在我的包中。我将本机二进制文件复制到我的 bin 中(它们包含在项目中),但我仍然收到此消息:

在 ADO.NET Provider 和 ADO.NET Provider 之间检测到可能的文件版本不匹配 SQL Server Compact 的本机二进制文件,可能会导致 不正确的功能。这可能是由于存在多个 不同版本的 SQL Server Compact 实例或由于错误 与 SQL Server Compact 二进制文件同名的二进制文件。请安装 匹配版本的 SQL Server Compact 二进制文件。

我无法使用您建议的 nuget 包,因为我有更新版本的 Entity Framework 并且它回滚了安装。

如果有人能推荐一个可以在共享托管服务器上以中等信任运行的 SQL Server CE 设置,我已经准备好重新开始一个新项目。

这是我在创建项目时一直在做的事情(但现在没有用)。

一个。安装包 SqlServerCompact 湾。安装包 System.Web.Providers C。安装包EntityFramework d。安装包EntityFramework.SqlServerCompact

【问题讨论】:

4.0.0.1 程序集版本在中等信任下不起作用,如您指向的答案中所述。您必须使用 4.0.0.0 才能获得中等信任!使用名为 Desktop 的文件夹的一种形式。 感谢 Erik,这就是我在发布此内容之前所做的。我想我错过了几个步骤。我将 System.Data.SqlServerCe.dll 从我的 Desktop 文件夹复制到我的 bin 文件夹。没有效果。我还需要做什么才能完成这项工作?我应该把它放在我的包目录中吗? 【参考方案1】:

如果你的 SqlCompact 是这个版本,请检查你的包目录:SqlServerCompact.4.0.8852.1

如果是,则需要复制 packages\SqlServerCompact.4.0.8852.1\NativeBinaries 中的文件,因为它们不同。

但此版本不能以中等信任度运行,因为他们将 SqlCompact 版本更改为 4.0.0.1,并且在 .NET 4 配置文件中默认仅授权 4.0.0.0。如果您需要以中等信任度运行的版本,请试试这个https://nuget.org/packages/EntityFramework.SqlServerCompact/4.1.8482.2

【讨论】:

nuget.org/packages/SqlServerCompact 已更新,卸载旧包并获取此包。为我工作。 谢谢。这不是 ErikEJ 说我们不能在 Medium Trust 中运行的版本吗? 不,他们回滚了版本,并删除了所有历史记录。但是他们仍然没有为 SQLCE 回滚 EntityFramework,所以我仍然不能使用 SQL CE....

以上是关于让我的 SQL Server CE 在我的 Web 主机上工作的所有步骤是啥的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server Express 导入 SQL Server CE

无法使用 SQL Server CE 4.0

SQL Server CE 回滚不撤消删除

将架构从 SQL Server 数据库传输到 SQL Server CE 数据库的简单方法?

Visual Studio 2012 中的 Sql Server ce 问题

如何解决我的 SQL Server CE 错误?