1

我正在使用 Visual Studio 2010 Ultimate、C# WPF、MVVM、Sqlite。

我有这个项目运行没有问题(在 Windows 8 x64,.NET Framework 4 客户端配置文件上),但是在运行已安装的应用程序(在 Windows 7 x32,.NET Framework 4 客户端配置文件上)时,我得到了所有这些异常:

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=&quot;data source=C:\SQLITE\BD\GestorDocument.s3db&quot;" 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>

包括以下参考:(将安装应用程序的机器的版本。)

  • SQLite.Designer.dll
  • System.Data.SQLite.dll
  • System.Data.SQLite.Linq.dll

将“复制本地”属性设置为 True。

在 machine.config 中添加 system.data 和 DbProviderFactories 之间的这一行

<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(开发应用程序)安装在测试机器上。

4

1 回答 1

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 文件中,要么做其他事情,比如用竹子建造一架飞机。

于 2013-05-17T19:28:27.423 回答