2010-05-05 17 views
9

Ho due progetti di Visual Basic 2008: uno è un progetto di libreria di classi e un altro è un progetto di Windows Form. Nel progetto della libreria di classi, ho definito alcune stringhe nelle risorse del progetto (proprietà del progetto> scheda Risorse).Leggere le risorse da un file DLL

Costruisco quel progetto di libreria di classi e ottengo il file DLL dalla cartella di debug e aggiunto come riferimento nel mio progetto Windows Form.

Come si leggono le stringhe dal file DLL di riferimento?

risposta

7

Penso che sia sufficiente utilizzare System.Reflection.Assembly.Load per caricare l'altro assieme, quindi utilizzare il costruttore di System.Resources.ResourceManager che accetta un assieme.

Ecco un link che mostra un esempio di come fare questo:

http://msdn.microsoft.com/en-us/library/aa984408%28VS.71%29.aspx

Nota, io non credo che ha bisogno di un punto di riferimento per questo lavoro.

+0

Il nome della classe di Resources.resx in Resources.resx.vb è My.Resources. A quale nome dovrei fare riferimento? Me.rm = Nuovo ResourceManager (("MyClassLibrary.Resources"), assembly) È corretto? –

+0

Non sicuro, ma sembra plausibile. Anche se suggerirei di usare la risposta di Donovan, sembra che potrebbe essere più adatto a te. –

12

Mentre è possibile caricare dinamicamente la DLL come suggerisce Ho, è bene utilizzare un riferimento come hai fatto. In effetti, consiglierei di usare un riferimento a meno che tu non abbia un particolare requisito per caricare dinamicamente l'assembly di risorse.

Per accedere alle risorse ci sono alcune cose che devi fare.

  • Nell'assembly di risorse è necessario assicurarsi che le risorse siano pubbliche. Per impostazione predefinita, le risorse sono impostate su interno, il che significa che non vedrai le risorse nell'app Winforms. Fare doppio clic su Properties \ Resources.resx per aprire la vista delle risorse. Nella barra degli strumenti in alto vedrai un'etichetta "Access Modifier" accanto a una casella combinata a discesa. Cambia la selezione in pubblico.

  • È necessario fare riferimento all'assieme dall'app moduli. Hai affermato di aver già fatto questo. Solo una nota che un modo migliore per farlo è quello di creare una soluzione che contenga entrambi i progetti. Quindi, nell'app moduli, scegli Aggiungi riferimento. Fare clic sulla scheda Progetti in alto. Fare doppio clic sul nome del progetto della risorsa DLL. Funziona meglio del riferimento diretto alla DLL di debug poiché significa che se si passa da una build di rilascio a una build di debug nell'app dei moduli, verrà automaticamente creata una versione di rilascio/debug corrispondente dell'assembly di risorse.

  • Una volta aggiunto il riferimento, è sufficiente fare riferimento al tipo di risorse DLL, ad es.

ResourceDLLNamespace.Properties.Resource.ResourceName

Solo una nota, è necessario essere consapevoli del tipo di nomi scontri se si utilizza lo stesso spazio dei nomi per il vostro forme app e DLL di risorse. In questa situazione, entrambe le app delle form avranno accesso alla propria proprietà Properties.Resources e a quella della DLL delle risorse. Si possono fare due cose per evitare questo:

  1. utilizzare un dominio differente tra i due gruppi di
  2. Nell'assemblea risorsa non includono un dizionario risorse Proprietà \ Resources.resx default. Eliminalo e aggiungi manualmente una nuova risorsa, ad esempio Aggiungi nuovo elemento e seleziona "File risorse". Dovresti trovare che non sarai in grado di aggiungere il nuovo dizionario delle risorse alla cartella Proprietà - aggiungilo alla root o ad un'altra cartella come richiesto.Questo gli darà automaticamente un nome diverso per il fatto di trovarsi in una cartella diversa. È comunque possibile che si desideri evitare di utilizzare il nome del file di risorse di "Risorse", tuttavia, come se si disponga di tutti gli spazi dei nomi rilevanti nell'ambito dell'utilizzo delle istruzioni, si otterrà lo stesso problema che il compilatore non conoscerà quale versione delle risorse utilizzare.

-Donovan

+0

Puoi dare un'occhiata alla mia domanda plz. Ho problemi con le risorse della DLL. http://stackoverflow.com/questions/24070892/resources-dont-load-current-culture – Marc

Problemi correlati