2009-06-01 20 views
10

Sto lavorando su un sistema per utilizzare uno SqlServerCe con NHibernate. Dal mio programma driver, se aggiungo l'assembly System.Data.SqlServerCe come riferimento, posso creare ed eseguire query su un database bene. Quando si cerca di utilizzare NHibernate, però, ottengo la seguente eccezione:Impossibile caricare il file o il montaggio

Una prima eccezione di possibilità di tipo 'System.IO.FileNotFoundException' in mscorlib.dll Ulteriori informazioni: Impossibile caricare il file o l'assembly 'del sistema. Data.SqlServerCe 'o una delle sue dipendenze. Il sistema non trova il file specificato.

ho tracciato l'eccezione a una chiamata a Assembly.Load ("System.Data.SqlServerCe"), che sembra che dovrebbe funzionare. L'assembly System.Data.SqlServerCe è nel GAC (ho anche provato ad aggiungerlo come riferimento locale con CopyLocal = true, senza alcun risultato), e posso usare i suoi membri bene, quindi perché non posso caricare esplicitamente vero? Quando apro l'assieme in Reflector, ha problemi a caricare il riferimento System.Transactions (ho anche provato ad aggiungerlo come riferimento locale, ma inutilmente), quindi caricare quell'assembly potrebbe essere il problema, piuttosto che il sistema. Assemblaggio Data.SqlServerCe.

E 'questo un problema comune? Errore di configurazione del sistema, forse?

+0

Sembra che tu non abbia mai sentito parlare di Fusion: http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx – zvolkov

+0

Ooh, strumento accurato. Il feedback che mi dà è: LOG: Lo stesso bind è stato visto prima e non è riuscito con hr = 0x80070002. ERR: errore irreversibile verificatosi durante il controllo pre-download (hr = 0x80070002). Quale non sembra tutto ciò che è utile - è fallito prima, quindi falliamo ancora? Ho bisogno di leggere i documenti di fusione per sperare di capirlo un po 'meglio. Sono stato indirizzato a una soluzione al mio problema, tuttavia - dettagli di seguito. – Dathan

risposta

8

Apparentemente questo può essere risolto aggiungendo un elementoqualifyAssembly > al file app.config. L'aggiunta di quanto segue ha la mia app senza intoppi:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <qualifyAssembly partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
    </assemblyBinding> 
</runtime> 

Grazie!

+0

sì il nome completo di cui sopra è in effetti il ​​nome completo per l'assemblea. Fornisce al CLR le informazioni necessarie per trovare e caricare l'assembly specifico. Puoi anche sostituire quel fullName in una stringa di connessione in un file .config (al posto del partialName) – nocache

1

Ho avuto un problema simile. L'errore che stavo facendo era che stavo cercando di eseguire il file .exe presente in ../obj/x86/Release, mentre dovrei eseguire il file .exe presente in ../bin/Release. (Sono assolutamente newbie a C#).

(Ho anche notato che in questa directory ../bin/Release, il file dll di riferimento viene copiato localmente.)

2

Questo è molto probabilmente collegato ad alcuni (mis) la configurazione del sistema.

Tuttavia, in base alla progettazione di SQL Server CE è solo una singola DLL, che può essere fornito con il prodotto.
Questo significa che si può solo impostare Copy local-True nelle proprietà di riferimento di System.Data.SqlServerCe, e si è fatto.

+0

Ha funzionato perfettamente per me! Grazie. –

Problemi correlati