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 に設定します。

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がインストールされています。

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 ファイルで、SQLite プロバイダーを使用するように EF を構成しています (EF 接続文字列の途中から)。

provider=System.Data.SQLite;

架空のエントリを調べると、接続文字列と同じプロバイダー名が含まれています。これが、EF が SQLite ファクトリを使用してデータベースへの接続を作成することを認識している方法です。ほら、それは本当に魔法ではありません。隠されているだけです。

それで、解決策は何ですか?私が知っていれば地獄。つまり、私はこの SQLite のものではなく、REAL コンパクト データベースを使用しています。ターゲット マシンに SQLite をインストールするか、ファクトリ定義を .config ファイルに追加するか、竹から平面を構築するなど、何か他のことを行う必要があります。

于 2013-05-17T19:28:27.423 に答える