Erreur SQLite: la section 'DbProviderFactories' ne peut apparaître qu'une seule fois par fichier de configuration (IBM Client Access)
Que j'utilise pour mon application Entity Framework et du Système.Les données.SQLite en utilisant WPF et C# sur .NET 4.5
Sur ma machine al fonctionnent bien , mais sur une machine de test d'un reçu ce message d'erreur lorsque j'ai accès à la db sqlite via EntityFramework :
Le " DbProviderFactories section ne peut apparaître qu'une seule fois par config
fichier.
J'ai trouvé que l'erreur a été que dans la machine de test, dans la machine.config:
<DbProviderFactories>
<add name="IBM DB2 for i5/OS .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for i5/OS" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26"/>
<add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" />
</DbProviderFactories>
<!-- This is the line to remove - empty element --><DbProviderFactories/>
</system.data>
Je supprimer le dernier élément vide et maintenant tout fonctionne.
Je pense que j'ai quelque chose lié à IBM.Les données.DB2.iSeries istallation (IBM Client Access).
Ma question est:
Comment faire pour supprimer l'élément vide sans modifier manuellement la machine.config? J'ai essayé d'insérer la balise <clear />
dans l'application.fichier de config, mais pas le travail.
J'ai trouvé d'autres question similaire à la mienne mais qui n'est pas de proposer des moyens de résoudre le problème sans modifier manuellement la machine.config pour résoudre le problème.
c'est mon application.fichier de configuration:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<system.xml.serialization>
<xmlSerializer useLegacySerializerGeneration="true" />
</system.xml.serialization>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
<!--STAI MOLTO ATTENTO-->
<legacyUnhandledExceptionPolicy enabled="1"/>
</startup>
<connectionStrings>
<add name="db" connectionString="Data Source=clients.db;Version=3;New=False;Compress=True;" />
<add name="icmdbEntities" connectionString="metadata=res://*/MainModel.csdl|res://*/MainModel.ssdl|res://*/MainModel.msl;provider=System.Data.SQLite;provider connection string="data source=.\icmdb.db"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<system.data>
<DbProviderFactories>
<clear />
<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>
<appSettings>
<add key="ditta" value="default" />
<add key="demo" value="true"/>
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
</providers>
</membership>
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
<providers>
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
</providers>
</roleManager>
</system.web>
</configuration>
source d'informationauteur abrfra
Vous devez vous connecter pour publier un commentaire.
Le problème est causé par l'installation d'IBM iaccès pour Windows-plus précisément, de la .NET Fournisseur pour DB2 composant. Je l'ai vu de première main dans V7R1, mais d'autres ont référencé le même problème avec V6R1.
IBM est conscient du problème et a un correctif dans l'une des versions de service.
De la V7R1 service de presse de la documentation:
Pour résoudre le problème une fois qu'il a eu lieu, vous devez la machine de correction.config (32-bit et 64-bit), parce qu'il n'est pas conforme au schéma défini pour le système.les données. C'est facile: il suffit d'écrire un simple .NET application qui utilise XmlDocument à la charge de la machine.config, recherchez le double DbProviderFactories élément, supprimer et enregistrer le fichier. Ou utiliser un script PowerShell ou autre chose qui permet de manipuler des documents XML.
Voici un IBM APAR discuter de cette question en V6R1.
J'ai connu ce problème aujourd'hui.
La
machine.config
fichiers 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 de la plate-forme iSeries pilotes corrompus suivantes
machine.config
fichiers:C'est bien que vous avez seulement à vous soucier de IBM corrompre la moitié de votre
machine.config
fichiers; et de ceux-là seulement les applications qui l'utilisent .NET 4.Fichiers pour corriger
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
(corrompus)C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
(corrompus)À partir d'un taux élevé de bloc-notes, ouvrez les deux fichiers, et supprimer le superflu vide
<DbProviderFactories/>
élément, vous laissant avec:Et vous êtes fixés.