2010-11-19 17 views
3

Verbundene Anfrage file: Running my application on another machine gives me an errorFehler beim Hinzufügen einer Konfiguration App.config

Dies ist, wie mein App.config-Datei wie folgt aussieht:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
    <add name="DocumentsDBEntities" connectionString="metadata=res://*/Documents.csdl|res://*/Documents.ssdl|res://*/Documents.msl;provider=System.Data.SQLite;provider connection string=&quot;data source=C:\Users\Sergio.Tapia\Desktop\DocumentScannerDanyly\DocumentScannerDanyly\DocumentsDB.sqlite&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
    <appSettings> 
    <add key="Username" value="administrador"/> 
    <add key="Password" value="123456"/> 
    </appSettings> 
</configuration> 

das Lauf auf meinem dev Maschine funktioniert, aber wenn Bei der Bereitstellung auf einem anderen Computer erhalte ich einen Datenanbieterfehler. (siehe verwandte Frage oben).

Die vorgeschlagene Lösung war dies die App.config-Datei hinzuzufügen:

<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"/> 
     </DbProviderFactories> 
</system.data> 

Wenn ich hinzufügen, dass in die Datei App.config ich diese Fehlermeldung erhalten, wenn Sie die Anwendung in Visual Studio 2010 starten:

An error occurred creating the configuration section handler for system.data: Column 'InvariantName' is constrained to be unique. Value 'System.Data.SQLite' is already present. (C:\Users\Sergio.Tapia\Desktop\DocumentScannerDanyly\DocumentScannerDanyly\bin\Debug\DocumentScannerDanyly.vshost.exe.Config line 13)

Irgendwelche Vorschläge, was dieser Fehler ist? Da der Speicherort der .sqlite-Datei relativ zum Installationsort ist, muss ich den connectionString in der AppConfig-Datei auf etwas dynamischeres ändern?

Danke für die Hilfe.

EDIT:

Wenn ich dies auf die Config hinzufügen, wie hier von jemand vorgeschlagen, bekomme ich einen Fehler:

<system.data> 
     <DbProviderFactories> 
       <clear /> 
       <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/> 
     </DbProviderFactories> 
</system.data> 

Failed to find or load the registered .Net Framework Data Provider.

Antwort

2

Das Problem ist sehr wahrscheinlich, dass Sie hart Code ein Pfad zu Ihrem Desktop in der Verbindungszeichenfolge:

C:\Users\Sergio.Tapia\Desktop\DocumentScannerDanyly\DocumentScannerDanyly\DocumentsDB.sql 

Es sei denn, diese Datei mit genau der gleichen Stelle auf der anderen Maschine vorhanden ist, stehen die Chancen iare es nicht

+0

Ja, das ist, was ich denke. Wie kann ich den Pfad zu etwas Dynamischem ändern? –

+0

@Serge: Dies ist nicht das, was Ihnen den Fehler gibt, sondern etwas, das Sie in Betracht ziehen sollten. Ändern Sie Ihre Datenquelle in Ihrer Verbindungszeichenfolge in einen relativen Pfad wie Datenquelle = ". \ DocumentsDB.sqlite " und platzieren Sie die SQLITE-Datenbank in Ihrem Anwendungsstammverzeichnis. Oder wenn es im Benutzerordner sein müsste, könnte quelle = " | DataDirectory | \ DocumentsDB.sqlite " – Bronumski

+0

Wenn Sie es zur Laufzeit ändern möchten, können Sie die Methode 'RedirectedEntityFrameworkConnectionString' aus [diesem Blogpost] (http: // : //nitoprograms.blogspot.com/2010/06/sqlite-and-entity-framework-4.html). –

11

Dies ist funktioniert, denn wenn man SqlLite installieren Ihr machine.config aktualisiert mit:

<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/> 

Weil Sie laufen nicht auf einer Maschine, auf der SqlLite installiert wurde, die DbProviderFactories kennt SqlLite nicht.

Entweder SqlLite auf dem Zielrechner installieren oder diese zu Ihrer Konfigurations hinzu:

<system.data> 
     <DbProviderFactories> 
       <clear /> 
       <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/> 
     </DbProviderFactories> 
</system.data> 

Diese Sie mit Ihrem machine.config clashing stoppt, und lassen Sie es auf Ihrem Zielcomputer arbeiten. Wenn Sie einen anderen SQL-Datenprovider verwenden, müssen Sie diesen ebenfalls hinzufügen.

EDIT

Wenn klar nicht funktioniert Versuch:

<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"/> 
     </DbProviderFactories> 
</system.data> 
+0

Wenn ich das zu meiner Konfiguration hinzufüge, bekomme ich diesen Fehler: "Konnte den registrierten .Net Framework Data Provider nicht finden oder laden.". Wenn ich das herausnehme, funktioniert die Anwendung auf meinem Zielrechner gut. –

+0

@Serg Haben Sie bemerkt, vor dem Hinzufügen – Bronumski

+0

Was ist damit? Ich habe in der genauen Konfiguration eingefügt, die Sie gepostet :(Was macht das Löschen? –

3

ich exakt das gleiche Problem hatte, wenn die obige Lösung Zugabe bekam ich

Failed to find or load the registered .Net Framework Data Provider.

aber was es gelöst war um "Copy Local" für System.Data.SQLite und für System.Data.SQLite.Linq in den Referenzen zu setzen.

Ich hoffe, es wird dir auch helfen.

Verwandte Themen