Erreur lors de l'ajout d'une configuration au fichier App.config

c# dbproviderfactories entity-framework sqlite

Question

Question associée: L' exécution de mon application sur une autre machine me donne une erreur

Voici à quoi ressemble mon fichier App.config:

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

Exécuter ceci sur ma machine dev fonctionne, mais lors du déploiement sur un autre ordinateur, j'obtiens une erreur du fournisseur de données. (voir question connexe ci-dessus).

La solution suggérée consistait à l'ajouter au fichier App.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"/>
        </DbProviderFactories>
</system.data>

Lorsque j'ajoute cela au fichier App.config, le message d'erreur suivant s'affiche lors du lancement de l'application dans Visual Studio 2010:

Une erreur s'est produite lors de la création du gestionnaire de section de configuration pour system.data: la colonne 'NomInvariant' doit obligatoirement être unique. La valeur 'System.Data.SQLite' est déjà présente. (C: \ Utilisateurs \ Sergio.Tapia \ Bureau \ DocumentScannerDanyly \ DocumentScannerDanyly \ bin \ Debug \ DocumentScannerDanyly.vshost.exe.Config ligne 13)

Toute suggestion sur ce que cette erreur est? De plus, étant donné que l'emplacement du fichier .sqlite est relatif à l'endroit où il est installé, dois-je modifier le connectionString du fichier AppConfig pour qu'il soit plus dynamique?

Merci pour l'aide.

MODIFIER:

Lorsque j'ajoute ceci à la configuration suggérée par quelqu'un ici, j'obtiens une erreur:

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

Échec de la recherche ou du chargement du fournisseur de données .Net Framework enregistré.

Réponse acceptée

Le problème est probablement que vous codez de manière stricte un chemin d'accès à votre bureau dans votre chaîne de connexion:

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

Sauf si ce fichier est présent avec exactement le même emplacement sur l'autre machine, il y a de fortes chances que cela ne fonctionne pas


Réponse populaire

En effet, lorsque vous installez SqlLite, votre machine.config est mis à jour avec:

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

Comme vous n’exécutez pas sur une machine sur laquelle SqlLite a été installé, DbProviderFactories ne connaît pas SqlLite.

Installez SqlLite sur votre machine de destination ou ajoutez ceci à votre configuration:

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

Cela vous évitera de vous heurter à votre machine.config et lui permettra de fonctionner sur votre ordinateur cible. Si vous utilisez un autre fournisseur de données SQL, vous devez également l'ajouter également.

MODIFIER

Si cela ne fonctionne pas, essayez:

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


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow