我已经安装了 Entity Framework 6 和 SQL Server Compact 4.0 标准设置 WPF 项目。当我构建我的项目时,SQL Server CE 部署的所有必要文件都被正确复制到该Release
文件夹中,包括System.Data.SqlServerCe.dll
.
但是在没有安装 SQL Server Compact 的机器上运行项目会抛出System.IO.FileLoadException
.
在我的开发环境中是System.Data.SqlServerCe.dll
从 GAC 加载的。我找到了这个参考,其中解释了 dll 的版本号:http ://technet.microsoft.com/en-us/library/gg213826.aspx
我认为System.Data.SqlServerCe.dll
NuGet 的程序集版本是 4.0.0.0。
所以我手动将System.Data.SqlServerCe.dll
项目中的引用更改为 Private 文件夹中的 4.0.0.1 文件,并将System.Data.SqlServerCe.dll
4.0.0.1 复制到生产机器。
我是这样改变app.config
的:
<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.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
现在我在开发机器上得到这个异常:
给定的连接不是“SqlCeConnection”类型。
在生产机器上我得到System.Data.Entity.Core.EntityException
.
是否有机会使用 NuGet 和 EF 6 进行私有部署?或者是否需要手动复制 x86、amd64 文件夹中的所有文件?