2009-11-17 8 views
18

Aby móc korzystać z GetGlobalResourceObject() w Visual Studio 2008, należy skopiować plik .resx do folderu App_GlobalResources of Visual Studio. Po wstępnej kompilacji aplikacji pliki zasobów są kompilowane do odpowiednich zestawów satelitów i rozmieszczone w folderze \bin\ według nazw kultur. Wszystko działa dobrze.Dodaj zestaw satelitarny w wstępnie skompilowanej wdrożonej witrynie internetowej

Nie mogę jednak dodawać nowych zestawów satelitarnych po wstępnej kompilacji aplikacji. Co zrobiłem było:

  1. Utworzono zespół satelita:

    resgen resources.applicationresources.es-ES.resx resources.applicationresources.es-ES.resources al/t: lib/kultura : es-ES /embed:resources.applicationresources.es-ES.resources /out:App_GlobalResources.resources.dll

  2. Utworzono folder \bin\es-ES\ i wdrożono tam plik .dll.

Niestety, nowo dodany montaż satelita nie jest rozpoznawany przez GetGlobalResourceObject(), który wraca do domyślnego (angielski) zasobu. Wygląda na to, że plik zasobów nie zawiera żadnych błędów, ponieważ po skopiowaniu tego samego pliku .resx do App_GlobalResources, a następnie skompilowaniu aplikacji, wszystko działa dobrze.

Czego mi brakuje? BTW moim typem projektu jest strona internetowa, a nie projekt aplikacji WWW.

+1

Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? – splattne

+1

Obecnie bardzo utknąłem z tym sam. – Mig

+1

Problem w naszym przypadku polegał na tym, że podczas generowania złożeń satelitarnych za pomocą funkcji resgen ścieżka obszaru nazw była niepoprawna. Dubugowaliśmy wygenerowany plik dll satelity przy użyciu ILDASM, więc poprawiliśmy go i ponownie zainstalowaliśmy. – ksa

Odpowiedz

0

(Z komentarz przez @ksa)

Jedno, co może pójść źle to błędna droga nazw w DLL produkowanego przez resgen, można użyć ILDASM lub reflektor porównać nazw w DLL roboczych i wygenerowany nie działa DLLS. Następnie możesz zmienić linię poleceń resgen, aby wygenerować z właściwą przestrzenią nazw.

+0

Społeczności wiki, jak jestem po prostu przeformułowanie tego, co OP powiedział naprawić dla nich w komentarzu, aby przenieść to pytanie z listy bez odpowiedzi. –

0

Spróbuj podłączyć się do zdarzenia AssemblyResolve w AppDomain.CurrentDomain i sprawdź, czy rzeczywiście szuka zespołu. Jeśli go szuka, wszystko, co musisz zrobić, to zachować listę dynamicznie ładowanych zestawów i ich ścieżek.

Jedna uwaga dotycząca AssemblyResolve, jeśli nie masz zespołu, zwróć wartość null. To jest domyślne zachowanie.

Powiązane problemy