Чтобы использовать GetGlobalResourceObject() в Visual Studio 2008, мне нужно скопировать файл .resx в папку App_GlobalResources Visual Studio. После предварительной компиляции приложения файлы ресурсов компилируются в соответствующие вспомогательные сборки и развертываются в папке \bin\ по именам культур. Все работает нормально.

Однако я не могу добавлять новые вспомогательные сборки после предварительной компиляции приложения. Я сделал следующее:

  1. Создал сателлитную сборку:

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

  2. Создал папку \bin\es-ES\ и развернул туда файл .dll.

К сожалению, недавно добавленная вспомогательная сборка не распознается GetGlobalResourceObject(), который возвращается к ресурсу по умолчанию (английский). Кажется, что с файлом ресурсов все в порядке, потому что если я скопирую тот же файл .resx в App_GlobalResources, а затем скомпилирую приложение, все будет работать нормально.

Что мне не хватает? Кстати, мой тип проекта - это веб-сайт, а не проект веб-приложения.

18
ksa 17 Ноя 2009 в 09:52
1
Вы когда-нибудь находили решение этой проблемы?
 – 
splattne
1 Июн 2010 в 12:53
1
В настоящее время я очень зациклен на этом.
 – 
Hux
20 Май 2011 в 14:05
1
В нашем случае проблема заключалась в том, что при создании вспомогательных сборок с помощью resgen путь к пространству имен был неверным. Мы скопировали сгенерированную вспомогательную dll с помощью ILDASM, поэтому исправили ее и развернули обратно сборку.
 – 
ksa
2 Июн 2011 в 12:32
3
Добавьте как ответ и отметьте как таковой
 – 
StingyJack
15 Июн 2011 в 21:40

2 ответа

Лучший ответ

(Из комментария @ksa)

Одна вещь, которая может пойти не так, - это неправильный путь к пространству имен в DLL, созданной resgen, вы можете использовать ILDASM или Reflector для сравнения пространств имен в рабочих библиотеках DLL и сгенерированных неработающих библиотеках DLL. Затем вы можете изменить командную строку resgen, чтобы сгенерировать с правильным пространством имен.

0
David Waters 30 Июн 2011 в 11:53
Вики сообщества, поскольку я просто перефразирую то, что сказал OP, исправил это для них в комментарии, чтобы убрать этот вопрос из списка без ответа.
 – 
David Waters
30 Июн 2011 в 11:55

Попробуйте подключиться к событию AssemblyResolve в AppDomain.CurrentDomain и посмотрите, действительно ли он ищет сборку. Если он действительно его ищет, все, что вам нужно сделать, это сохранить список динамически загружаемых сборок и их пути.

Одно замечание о AssemblyResolve: если у вас нет сборки, верните null. Это поведение по умолчанию.

0
gislikonrad 14 Авг 2011 в 02:06