Недавно я столкнулся со следующей ошибкой на клиентской машине:
Раздел «DbProviderFactories» может отображаться только один раз для каждого файла конфигурации.
Похоже, что конфигурация машины содержит повторяющийся элемент DbProviderFactories.
<system.data>
<DbProviderFactories>
<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>
<DbProviderFactories />
</system.data>
Удаление этого дополнительного элемента вручную устраняет проблему, и наше программное обеспечение может работать. Однако нам было предложено попытаться обойти это, возможно, проигнорировав повторяющуюся запись в нашем собственном app.config. Это связано с тем, что у многих клиентов может быть одна и та же проблема, и мы не можем изменить файл конфигурации каждого.
Я попытался добавить элемент <clear/>
в раздел system.data, чтобы, надеюсь, переопределить то, что уже есть в machine.config. Однако это не работает.
Например
<system.data>
<clear />
<DbProviderFactories>
<add name="Microsoft SQL Server Compact Data Provider 4.0"
invariant="System.Data.SqlServerCe.4.0"
description=".NET Framework Data Provider for Microsoft SQL Server Compact"
type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
Есть ли способ программно игнорировать повторяющийся элемент DbProviderFactories?
Существует ли API, позволяющий изменять конфигурацию машины?
Кто-нибудь может помочь или порекомендовать решение?
С уважением