Ошибка при добавлении конфигурации в файл App.config - PullRequest
3 голосов
/ 19 ноября 2010

Смежный вопрос: Запуск моего приложения на другом компьютере выдает ошибку

Вот так выглядит мой файл 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>

Запуск этогона моем компьютере разработчика работает, но при развертывании на другом компьютере я получаю ошибку поставщика данных.(см. связанный вопрос выше).

Предложенное решение состояло в том, чтобы добавить это в файл 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>

Когда я добавляю это в файл App.config, я получаю этоошибка при запуске приложения в Visual Studio 2010:

Произошла ошибка при создании обработчика раздела конфигурации для system.data: столбец InvariantName ограничен, чтобы быть уникальным.Значение 'System.Data.SQLite' уже присутствует.(C: \ Users \ Sergio.Tapia \ Desktop \ DocumentScannerDanyly \ DocumentScannerDanyly \ bin \ Debug \ DocumentScannerDanyly.vshost.exe.Config строка 13)

Есть ли какие-либо предложения относительно этой ошибки?Кроме того, поскольку расположение файла .sqlite зависит от того, где он установлен, нужно ли мне изменить в файле ConnectionString в файле AppConfig что-то более динамичное?

Спасибо за помощь.

РЕДАКТИРОВАТЬ:

Когда я добавляю это в конфигурацию, как это было предложено кем-то здесь, я получаю ошибку:

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

Не удалось найти или загрузитьзарегистрированный поставщик данных .Net Framework.

Ответы [ 3 ]

11 голосов
/ 19 ноября 2010

Это потому, что когда вы устанавливаете SqlLite, он обновляет ваш machine.config следующим образом:

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

Поскольку вы не работаете на машине, на которой установлен SqlLite, DbProviderFactories не знает о SqlLite.

Либо установите SqlLite на целевой машине, либо добавьте ее в конфигурацию:

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

Это остановит конфликт с вашим machine.config и позволит ему работать на вашей целевой машине.Если вы используете любой другой поставщик данных Sql, вам также необходимо добавить это.

РЕДАКТИРОВАТЬ

Если очистка не работает, попробуйте:

<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>
3 голосов
/ 16 марта 2013

У меня была точно такая же проблема, при добавлении вышеуказанного решения я получил

Не удалось найти или загрузить зарегистрированный поставщик данных .Net Framework.

но было решено установить для параметра «Копировать локальный» значение true для System.Data.SQLite и для System.Data.SQLite.Linq в списке литературы.

Надеюсь, это тебе тоже поможет.

2 голосов
/ 19 ноября 2010

Скорее всего, проблема заключается в том, что вы жестко запрограммировали путь к своему рабочему столу в строке подключения:

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

Если этот файл не находится в том же месте на другом компьютере, скорее всего он выигралне работает

...