我阅读了this帖子,这显然解决了具有SQL Server Compact依赖性的WPF应用发布问题。我完成了this帖子作者规定的所有步骤,但它对我不起作用。一旦我从SQL Server Compact" private"添加了所有DLL文件夹我的应用程序在启动时崩溃。不同之处在于我使用.NET 4.5,而示例处理4.0我不确定这是否是问题的核心,但它不适用于这些设置。
我的应用程序崩溃,出现以下异常:
System.Windows.Markup.XamlParseException
这是我的app.config
(包括文章中的补充):
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="TypeAppRelease.Properties.Settings.MyDatabase_1ConnectionString"
connectionString="Data Source=D:\XXXXXX\XXXXX\XXXXXXX\externals\MyDatabase#1.sdf;Password=XXXXXXX;Persist Security Info=True"
providerName="Microsoft.SqlServerCe.Client.4.0" />
</connectionStrings>
<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>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
</configuration>
还有一件事。我之所以这样做,是因为只做ClickOnce发布生成的安装文件,该文件没有工作抱怨
该应用程序缺少必需的文件....
因此,引导我找到上面链接的解决方案,这似乎也不起作用。
更新
我想延伸这个问题,因为直到我没有解决它。 我决定放弃ClickOnce部署,只测试2台机器上的Debug / Release版本:1)安装了SQL Compact Server; 2)只安装了.NET框架。
App在第一台机器上运行正常,在第二台机器上运行失败。这非常合乎逻辑,因为第一台机器已经安装并运行了Compact SQL。
接下来,我从第一台机器上删除了服务器安装并再次运行应用程序。它仍然有效,但不适用于第二台PC。我得到的错误是
System.IO.FileLoadException
我无法弄清楚为什么我会得到它以及为什么我在第一台机器上没有这样做。
也许它是64/32位操作系统的东西? PC1运行Windows 7 64位,而PC2运行x86。
答案 0 :(得分:1)
我使用ADO.NET对象(SqlCeCommand,DataSet)而不是Entity Framework(如我的博客文章中所述),您必须在项目文件夹(程序集版本4.0.0.1)中引用System.Data.SqlServerCe.dll而不是您的GAC中的DLL(程序集版本4.0.0.0)。我已经用这些信息更新了我的博文。