c#找不到数据提供程序.. NET框架请求

本文关键字:NET 框架 请求 程序 找不到 数据 | 更新日期: 2023-09-27 18:14:04

我使用Visual Studio 2010 Ultimate, c# WPF, MVVM, Sqlite。

我有这个项目是运行没有问题(在Windows 8 x64, .NET框架4客户端配置文件),但我得到所有这些例外时运行安装的应用程序(在Windows 7 x32, .NET框架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>

拜托,有什么主意吗?


现在它工作了!我的解决方案是:

应用程序。在项目中配置:

    <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

设置"Copy local"属性为True。

添加机器。配置系统之间的这条线。数据和dbprovider工厂

<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。

c#找不到数据提供程序.. NET框架请求

机器上没有安装System.Data.SQLite提供程序。正确的安装不仅会将二进制文件删除到机器上(可能是GAC),还会将一个条目删除到机器中。(这不是真的):

<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>

机器中的配置设置(类似于此数据库提供程序配置)。config由应用程序的derp.exe.config文件继承。在.config文件中,您将EF配置为使用SQLite提供程序(从EF连接字符串的中间):

provider=System.Data.SQLite;

如果您查看假设的条目,它的提供者名称与您的连接字符串中的名称相同。这就是EF如何知道使用SQLite工厂来创建到数据库的连接。看,这根本就不是魔法。它只是隐藏。

那么解决方案是什么呢?我怎么知道。我是说,我用的是真正的紧凑数据库,而不是SQLite这种东西。您必须在目标机器上安装SQLite,将工厂定义添加到.config文件中,或者执行其他操作,例如用竹子构造一个飞机。