2009-11-17 9 views
18

Per utilizzare GetGlobalResourceObject() in Visual Studio 2008 è necessario copiare un file .resx nella cartella App_GlobalResources di Visual Studio. Dopo che l'applicazione è stata precompilata, i file delle risorse vengono compilati negli assembly satellite corrispondenti e distribuiti nella cartella \bin\ in base ai nomi delle colture. Tutto funziona bene.Aggiunta dell'assieme satellite in un sito Web preinstallato

Tuttavia, non è possibile aggiungere nuovi gruppi satellite dopo che l'applicazione è stata precompilata. Quello che ho fatto è stato:

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

  2. Creata cartella \bin\es-ES\ e distribuito il file .dll lì.

Purtroppo, l'assembly satellite appena aggiunto non viene riconosciuto dal GetGlobalResourceObject(), che cade di nuovo nella risorsa predefinita (inglese). Non sembra esserci nulla di sbagliato nel file di risorse perché se copio lo stesso file .resx in App_GlobalResources e poi compilo l'applicazione, tutto funziona perfettamente.

Cosa mi manca? A proposito, il mio tipo di progetto è un sito Web e non un progetto di applicazione web.

+1

Hai mai trovato una soluzione a questo problema? – splattne

+1

Attualmente molto bloccato con questo me stesso. – Mig

+1

Il problema nel nostro caso era, durante la generazione degli assembly satellite attraverso resgen, il percorso del namespace non era corretto. Abbiamo duplicato la dll satellite generata usando ILDASM, quindi abbiamo corretto e distribuito l'assembly. – ksa

risposta

0

(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 generato non funziona DLL. È quindi possibile modificare la riga di comando resgen per generare con lo spazio dei nomi corretto.

+0

mentre sto riformulando ciò che l'OP ha detto aggiustandolo per un commento, per spostare questa domanda dalla lista senza risposta. –

0

Provare a collegarsi all'evento AssemblyResolve in AppDomain.CurrentDomain e verificare se è effettivamente in cerca dell'assembly. Se lo cerca, tutto ciò che devi fare è tenere un elenco di assiemi caricati dinamicamente e dei loro percorsi.

Una nota su AssemblyResolve, se non si dispone dell'assembly, restituire null. Questo è il comportamento predefinito.