我正在使用Visual Studio 2010 Ultimate,C#WPF,MVVM,Sqlite。
我的这个项目运行没有问题(在Windows 8 x64,.NET Framework 4 Client Proile上),但是在运行已安装的应用程序时我得到了所有这些异常(在Windows 7 x32,.NET Framework 4 Client Proile上) :
Exception: System.Windows.Markup.XamlParseException: 'The invocation of the constructor of type' GestorDocument.UI.DeterminanteView 'that matches the specified binding constraints threw an exception.' (Line number: '3 ', line position '9'). ---> System.ArgumentException: The specified store provider can not be found in the configuration or is not valid. ---> System.ArgumentException: Could not find the data provider. NET Framework requested. It may not be installed.
这是我的连接字符串:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="GestorDocumentEntities" connectionString="metadata=res://*/GestorDocument.csdl|res://*/GestorDocument.ssdl|res://*/GestorDocument.msl;provider=System.Data.SQLite;provider connection string="data source=C:\SQLITE\BD\GestorDocument.s3db"" providerName="System.Data.EntityClient"/>
</connectionStrings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>
拜托,不知道吗?
现在可以了! 我的解决方案是:
项目中的App.config:
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.85.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
</configuration>
包括以下参考:(将安装应用程序的机器的版本。)
将“Copy local”属性设置为True。
在system.data和DbProviderFactories
之间添加machine.config这一行<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.85.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
确保版本。开发应用程序的.NET Framework安装在测试机器上。
答案 0 :(得分:3)
计算机上未安装System.Data.SQLite
提供程序。正确的安装不仅会丢弃机器上的二进制文件(可能是GAC),而且还会将一个条目放入machine.config中,看起来像这样(这不是真的):
<system.data>
<DbProviderFactories>
<add name="System.Data.SQLite"
invariant="System.Data.SQLite"
description="SQLite Framework Data Provider for SQLite databases lol"
type="SomeProviderFactory, System.Data.SQLite, Etcetera=etcetera"/>
<!--snip-->
</DbProviderFactories>
</system.data>
machine.config 中的配置设置(如此数据库提供程序配置)将由应用程序的derp.exe.config
文件继承。在.config文件中,您正在配置EF以使用SQLite提供程序(从EF连接字符串的中间):
provider=System.Data.SQLite;
如果查看假设条目,它的提供者名称与连接字符串中的名称相同。这就是EF知道使用SQLite工厂创建与数据库的连接的方式。看,它根本不是真正的魔术。它只是隐藏。
那么解决方案是什么?如果我知道的话,好吧。我的意思是,我使用的是真正的紧凑型数据库,而不是这个SQLite的东西。您将需要在目标计算机上安装SQLite,将工厂定义添加到.config文件中,或者执行其他操作,例如用竹子构建一个平面。