Problemi riferimenti DLL

venerdì 27 novembre 2009 - 19.58

sg Profilo | Newbie

Salve,
vorrei dei chiarimenti sulla gestione dei riferimenti aggiunti in un progetto.
In pratica ho creato una DLL (Class Library) che contiene una classe da utilizzare in diversi progetti.
In ogni progetto ho aggiunto il suo riferimento in una cartella dove risiede solo il compilato cioè la DLL.
Ho creato una cartella dove risiedono solo i campilati dei progetti i .EXE ma quando lancio un programma mi dà una eccezione perchè non trova la DLL mentre se sposto quest'ultima nella cartella dove stanno tutti i compilati dei progetti essi partono normalmente.
Non capisco perchè non considera il percorso del riferimento aggiunto nel progetto ma cerca la DLL nella stessa cartella dove risiede il compilato.
Ho notato anche che quando crea un compilato in DEBUG o in generazione normale si riporta nella cartella bin (sottocartelle release o debug) anche i compilati dei riferimenti (gli imports) del progetto. Perchè?

luigidibiasi Profilo | Guru

>Ho creato una cartella dove risiedono solo i campilati dei progetti
>i .EXE ma quando lancio un programma mi dà una eccezione perchè
>non trova la DLL mentre se sposto quest'ultima nella cartella
>dove stanno tutti i compilati dei progetti essi partono normalmente.

Perchè le DLL vengono ricercate nella path del programma (.exe) oppure nelle path di sistema (C:\windows\system32 etc.. se le sposti nelle path di sistema non ti dà eccezzione)

Non le và a cercare in altre cartelle perchè altrimenti su ogni pc dove installi il programma dovresti ricreare la stessa struttura del pc di sviluppo ... (pensa a cosa accadrebbe se le dll le tieni compilate in c:\programmi\mieiprogetti\progetto1\bin\release\miadll.dll .. su ogni pc dovresti ricreare c:\programmi\mieiprogetti\...bin\release\)


>Non capisco perchè non considera il percorso del riferimento
>aggiunto nel progetto ma cerca la DLL nella stessa cartella dove
>risiede il compilato.

Perchè quel percorso viene usato esclusivamente per risolvere i riferimenti e poter compilare il programma.

>Ho notato anche che quando crea un compilato in DEBUG o in generazione
>normale si riporta nella cartella bin (sottocartelle release
>o debug) anche i compilati dei riferimenti (gli imports) del
>progetto. Perchè?

Stesso motivo di prima... visual studio fà in automatico il lavoro di copia e incolla.. prende le DLL dai percorsi che hai specificato e se le porta nelle cartelle bin\release o debug x poter avviare il programma ed eseguirne il debug...


>
>

Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

sg Profilo | Newbie

Salve,
così dovrei creare un'unica cartella con tutti i compilati e mettere dentro anche le DLL tranne che decido per quest'ultime di metterle in system32.
Non c'è quindi la possibilità di creare una cartella con gli oggetti in comune per l'applicazione con un path di riferimento in aggiunta a quella di sistema tanto per avere qualcosa meglio organizzata anche se a livello funzionale va bene tutto in un'unica cartella-

luigidibiasi Profilo | Guru

credo esistano 3 strade..


1) caricare manualmente le DLL dalla path che desideri senza usare aggiungi riferimenti
2) modificare le impostazioni di compilazione (xò non so dirti da dove cominciare )
3) mettere le dll dove vuoi ed andare a modificare le variabili di sistema

aspettiamo qualche risposta da qualcuno che ha già affrontato il problema

Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

Teech Profilo | Expert

Premetto che non sono ceto un esperto di questo tipo di problematiche...

Ci sono 2 strade da seguire: se la DLL è relativa al singolo programma deve risiedere dove è presente il programma, mentre se è comune a più programmi puoi installarla nella GAC (Global Assembly Cache).

Qui trovi un articolo che spiega come fare...
http://www.visual-basic.it/articoli/fbGAC.htm
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5