Подтвердить что ты не робот

Добавить сборку спутника на предварительно скомпилированном развернутом веб-сайте

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

Тем не менее, я не могу добавить новые спутниковые сборки после того, как приложение было предварительно скомпилировано. Я сделал это:

  • Создан сборник спутников:

    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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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