Aggiungere assembly satellite in un pre-compilato sito schierato
-
20-09-2019 - |
Domanda
Al fine di fare uso di GetGlobalResourceObject()
in Visual Studio 2008 che devo copiare un file RESX nelle App_GlobalResources cartella di Visual Studio. Dopo l'applicazione è precompilata, i file di risorse vengono compilate in assemblee satellitari corrispondenti e distribuiti sotto la cartella \bin\
da nomi della cultura. Tutto questo funziona bene.
Tuttavia, sono in grado di aggiungere nuovi assembly satellite dopo l'applicazione è stata precompilata. Quello che ho fatto è stato:
-
Creato un assembly satellite:
resgen resources.applicationresources.es-ES.resx resources.applicationresources.es-ES.resources al / t: lib / cultura: es-ES /embed:resources.applicationresources.es-ES.resources /out:App_GlobalResources.resources.dll
-
Creata
\bin\es-ES\
cartella e distribuito il file dll lì.
Purtroppo, l'assembly satellite appena aggiunto è non essere riconosciuto dal GetGlobalResourceObject()
, che cade di nuovo nella risorsa predefinita (inglese). Sembra che ci sia niente di sbagliato con il file di risorse, perché se copio lo stesso file RESX in App_GlobalResources
e quindi compilare l'applicazione, tutto funziona bene.
Che cosa mi manca? BTW il mio tipo di progetto è il sito web e non progetto di applicazione web.
Soluzione
(Da Il commento di @ksa)
Una cosa che può andare male è un percorso dello spazio dei nomi non corretta nella DLL prodotto da resgen, è possibile utilizzare ILDASM o Reflector per confrontare gli spazi dei nomi nelle DLL di lavoro e le generati DLL non di lavoro. È quindi possibile modificare la riga di comando per generare resgen con lo spazio dei nomi corretto.
Altri suggerimenti
Prova agganciando alla manifestazione AssemblyResolve in AppDomain.CurrentDomain e vedere se è actualy cercando per il montaggio. Se non cercarlo, tutto quello che dovete fare è tenere un elenco di assembly caricati dinamicamente ed i loro percorsi.
Una nota circa AssemblyResolve, se non si ha l'assemblea, restituire null. Questo è il comportamento di default.