2010-11-19 31 views
3

İlgili soru dosyası eklerken: Running my application on another machine gives me an errorHata App.config için bir yapılandırma

Bu gibi benim App.config dosya görünür:,

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

benim dev makine işlerin bu Koşu ama ne zaman başka bir bilgisayara dağıtmak, bir Veri Sağlayıcı hatası alıyorum. (yukarıdaki ilgili soruya bakınız).

önerilen çözüm App.config dosyasında bu eklemek oldu:

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

Ben App.config dosyası, Visual Studio 2010 uygulamayı başlatırken bu hatayı almak eklediğinizde:

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)

Bu hatanın ne olduğuna ilişkin herhangi bir öneriniz var mı? Ayrıca, .sqlite dosyasının konumu, kurulduğu yere göre olduğundan, AppConfig dosyasındaki connectionString öğesini daha dinamik bir şekilde değiştirmek zorunda mıyım?

Yardımlarınız için teşekkürler.

DÜZENLEME: Burada birileri tarafından önerildiği gibi zaman config bu eklediğinizde

, bir hata alıyorum:

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

cevap

2

sorun büyük olasılıkla olduğunu sabit kod Bağlantı dizenizdeki dizininiz yolu:

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

Çünkü: bu dosya diğer makinede aynı konumu ile mevcut olmadığı sürece, büyük ihtimalle SQLLite yüklediğinizde o ile machine.config günceller çünkü budur

+0

Evet, düşündüğüm bu. Dinamik bir şeyin yolunu nasıl değiştirebilirim? –

+0

@Serge: Bu size hata veren şey değil, yapmanız gereken bir şey. Veri kaynağınızdaki veri kaynağınızı, veri kaynağı = " gibi göreceli bir yol olarak değiştirin. \ DocumentsDB.sqlite " ve sqllite veritabanını uygulama kökünüze yerleştirin. Ya da kullanıcı klasöründe olması gerekiyorsa, kaynak = " olabilirsiniz. DataDirectory | \ DocumentsDB.sqlite " – Bronumski

+0

Çalışma zamanında değiştirmek isterseniz, [bu blog yayını] 'ndan 'RedirectedEntityFrameworkConnectionString' yöntemini kullanabilirsiniz. : //nitoprograms.blogspot.com/2010/06/sqlite-and-entity-framework-4.html). –

11

çalışmayacak İare SqlLite'ın kurulu olduğu bir makinede çalışmıyorsunuz, DbProviderFactories SqlLite hakkında bilmiyor.

Ya hedef makinede SQLLite yüklemek veya yapılandırma için bu ekleyin:

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

Bu machine.config çatışan sizi durduracak ve bu hedef makinede çalışmak izin verir. Başka bir Sql veri sağlayıcısı kullanıyorsanız, bunu da eklemeniz gerekir.

DÜZENLEME

açık ise çalışmıyor deneyin: Ben

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

var Yukarıdaki solüsyon ilave ama ne çözdüğünde

<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

Bunu, yapılandırmamma eklediğimde, şu hatayı alıyorum: "Kayıtlı .Net Framework Veri Sağlayıcısı bulunamadı veya yüklendi." Bunu çıkarırsam, uygulama hedef makinemde iyi çalışır. –

+0

@Serg – Bronumski

+0

'dan önce 'u farkettiniz mi? Gönderdiğiniz tam konfigürasyonda yapıştırdım :(Net ne yapar? –

3

Aynı kesin problem vardı, öyleydi "Yerel Kopyala", System.Data.SQLite ve System.Data.SQLite.Linq için Referanslar'da true olarak ayarlanmıştır.

Umarım size de yardımcı olur.

İlgili konular