2010-11-19 2 views
3

Похожие вопросы: Running my application on another machine gives me an errorОшибка при добавлении конфигурации в файл App.config

Это как мой файл 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> 

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

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

An error occurred creating the configuration section handler for system.data: Column 'InvariantName' is constrained to be unique. Value 'System.Data.SQLite' is already present. (C:\Users\Sergio.Tapia\Desktop\DocumentScannerDanyly\DocumentScannerDanyly\bin\Debug\DocumentScannerDanyly.vshost.exe.Config line 13)

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

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

EDIT:

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

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

Failed to find or load the registered .Net Framework Data Provider.

ответ

2

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

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

Если этот файл не присутствует с точно таким же местом на другой машине, скорее iare он не будет работать

+0

Да, это то, о чем я думаю. Как я могу изменить путь к чему-то динамическому? – 2010-11-19 14:42:58

+0

@Serge: Это не то, что дает вам ошибку, а то, что вам следует делать. Измените источник данных в строке подключения как относительный путь, например источник данных = ". \ DocumentsDB.sqlite " и поместите базу данных sqllite в свой корень приложения. Или если это должно быть в папке пользователей, вы можете получить источник = " | DataDirectory | \ DocumentsDB.sqlite " – Bronumski

+0

Если вы хотите изменить его во время выполнения, вы можете использовать метод «RedirectedEntityFrameworkConnectionString» из [этого сообщения в блоге] (http : //nitoprograms.blogspot.com/2010/06/sqlite-and-entity-framework-4.html). –

11

Это происходит потому, что при установке 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, вам также необходимо добавить это.

EDIT

Если ясно не работает попытка:

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

Когда я добавляю это в свою конфигурацию, я получаю эту ошибку: «Не удалось найти или загрузить зарегистрированный поставщик данных .Net Framework». Если я это сделаю, приложение хорошо работает на моей целевой машине. – 2010-11-19 14:43:47

+0

@Serg Вы заметили перед добавлением – Bronumski

+0

Что с этим делать? Я вставил в точной конфигурации, которую вы опубликовали :(Что делает ясность? – 2010-11-19 15:59:20

3

Я имел точно такую ​​же проблему, при добавлении выше решение, которое я получил

Failed to find or load the registered .Net Framework Data Provider.

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

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

Смежные вопросы