Erreur SQLite: la section ‘DbProviderFactories’ ne peut apparaître qu’une fois par fichier de configuration (IBM Client Access)

J’utilise pour mon application Entity Framework et System.Data.SQLite à l’aide de WPF et C # sur .NET 4.5 sur ma machine tout fonctionne bien, mais une machine de test a reçu cette erreur lorsque j’accède à la firebase database SQL via EntityFramework:

La section ‘DbProviderFactories’ ne peut apparaître qu’une fois par fichier de configuration.

J’ai trouvé que l’erreur était celle de la machine de test, dans le fichier machine.config:

       

Je supprime le dernier élément vide et maintenant tout fonctionne. Je pense que quelque chose a trait à la solution IBM.Data.DB2.iSeries (IBM Client Access).

Ma question est la suivante: comment supprimer l’élément vide sans modifier manuellement machine.config ? J’ai essayé d’insérer la balise dans le fichier app.config mais cela ne fonctionnait pas.

J’ai trouvé une autre question semblable à la mienne mais aucune ne suggère comment résoudre le problème sans modifier manuellement le fichier machine.config pour résoudre le problème.

Voici mon fichier app.config:

     

Le problème est dû à l’installation d’IBM iAccess pour Windows, en particulier du composant .NET Provider for DB2. Je l’ai vu personnellement dans la V7R1, mais d’autres ont fait référence au même problème avec la V6R1.

IBM est conscient du problème et propose une solution dans l’une des versions de service.

Dans la documentation de la version de service de la V7R1:

DESCRIPTION DU PROBLÈME FIXE POUR L’APAR SE45767:

Dans des circonstances inconnues, le fichier XML machine.config est corrompu lors de l’installation du fournisseur de données .Net (dans le cadre d’un type d’installation Complète ou Personnalisée). La corruption est isolée à des parties des données XML liées aux DbProviderFactories – et il a généralement été observé que la duplication de certaines lignes des données XML était dupliquée.

CORRECTION POUR APAR SE45767:

Un correctif préventif sera fourni pour éliminer la cause probable de la corruption de machine.config.

Un correctif correctif permettant de mettre à jour les fichiers machine.config déjà corrompus ne sera pas fourni. Utilisez le correctif local documenté ou le contournement si possible.

CIRCONVENTION POUR APAR SE45767:

Si le fournisseur de données .Net n’est pas nécessaire, vous pouvez éviter ce problème en effectuant une installation personnalisée et en veillant à ce que le fournisseur de données .Net ne soit pas installé. Si le fournisseur .Net est requirejs, aucun contournement n’est connu. Utilisez le correctif local pour résoudre le problème.

En ce qui concerne la résolution du problème une fois qu’il s’est produit, vous devez corriger le fichier machine.config (32 bits et 64 bits), car il n’est pas conforme au schéma défini pour system.data. C’est simple: écrivez simplement une application .NET qui utilise XmlDocument pour charger le fichier machine.config, localisez l’élément DbProviderFactories dupliqué, supprimez-le et enregistrez le fichier. Ou utilisez un script PowerShell ou tout autre outil pouvant manipuler des documents XML.

Voici un APAR IBM traitant de ce problème dans la V6R1.

J’ai connu ce problème aujourd’hui.

Les fichiers machine.config sont situés dans:

  • C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
  • C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

La version corrompue de machine.config contient:

       

L’installation des pilotes iSeries a corrompu les fichiers machine.config suivants:

 | Framework | Platform | Factory Added? | Corrupted Machine.config? | |-----------|----------|----------------|---------------------------| |v4.0.30319 | x64 | Yes | Yes | |v4.0.30319 | x86 | Yes | Yes | |v2.0.50727 | x86 | No | No | |v2.0.50727 | x64 | No | No | 

C’est bien que vous n’ayez à vous préoccuper que de la corruption par IBM de la moitié de vos fichiers machine.config ; et de ces seules applications qui utilisent .NET 4.

Fichiers à réparer

  • C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config (ok)
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config (ok)
  • C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config (endommagé)
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config (corrompu)

À partir d’un bloc-notes surélevé, ouvrez les deux fichiers et supprimez l’élément vide et , en vous laissant avec:

      

Et tu es fixe.