Для создания сборок понадобятся следующие инструменты.
- resgen.exe
- al.exe
- ildasm.exe
al.exe - это программа, которая встраивает ресурсы в спутниковую сборку.Но al.exe будет принимать ресурсы только в двоичном формате .resources.Но наши входные данные, как правило, представляют собой либо простые текстовые файлы ресурсов, либо файлы ресурсов на основе XML в формате .resx.Resgen.exe используется для преобразования этих альтернативных форм ресурсов в двоичный формат .resources, приемлемый для al.exe.
ildasm.exe: Если вы помните, что делает Visual Studio IDE, вы увидите, что естьперевод имени между структурой каталогов вашего файла ресурсов и тем, как этот файл ресурсов известен внутри сборки.Поскольку мы используем IDE Visual Studio для генерации ресурсов по умолчанию и процесс расширения для генерации сателлитных сборок, оба механизма должны создавать сборки с одинаковой иерархией именования для файлов ресурсов.
Поэтому мы используем ildasmисследовать библиотеки DLL, которые генерирует Visual Studio IDE, чтобы выяснить, какова структура, и использовать тот же механизм для генерации сателлитных сборок.Вы также можете исследовать спутниковые сборки, используя ildasm, чтобы убедиться, что вы правильно поняли имена.Это будет полезно для отладки ошибок менеджера ресурсов, сообщающего вам, что он не может найти ресурс.
Теперь, когда обрисованы в общих чертах инструменты, как нам преобразовать файл внешнего ресурса в вспомогательную сборку?Как отмечено ниже, это три (на самом деле, два) шага процесса.
Шаг 0: Установите пути для resgen и al.exe:
@set path=%path%;
"C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Bin";
c:\winnt\microsoft.NET\framework\v1.0.3705
Шаг 1: Используйте resgen длясоздайте файл .resources из файла .resx.
Resgen MyText.resx
Приведенная выше команда создаст файл с именем:
MyText.resources
Шаг 2: Используйте al.exe для создания вспомогательной сборки:
Al.exe
/t:lib
/embed:MyText.en-gb.Resources,MyApplication.MyText.en-gb.Resources
/culture:hi-gb
/out:MyApplication.resources.dll
Здесь стоит отметить пару вещей:
/t:lib: Says you are interested in a .dll.
/embed:MyText.en-gb.Resources,MyApplication.MyText.en-gb.Resources : Embeds and renames the resource to a target name to match the Visual Studio IDE naming structure.
/culture:hi-gb : Identifies the culture in which you are interested.
/out:MyApplication.resources.dll : Name of the DLL in which you are interested.
Сгенерированный .dll должен иметь соглашение об именах, чтобы .NET мог его найти.Также обратите внимание, что вам нужно указать настройку культуры, хотя культура доступна в названии файлов ресурсов.Таким образом, это должно быть упомянуто в обоих местах.
Поместите сателлитную сборку в соответствующий каталог. После создания сателлитной сборки физически скопируйте DLL в следующий каталог:
\MyApplication\bin\en-gb\MyApplication.Resources.DLL
В случае нескольких файлов ресурсов:
\MyApplication\resources\files\CommonResources.resx
\MyApplication\resources\files\Module1Resources.resx
\MyApplication\resources\files\Module2Resources.resx
И вы можете определить ключи для этих ресурсов в отдельной иерархии следующим образом:
\MyApplication\resources\keys\CommonKeys.cs
\MyApplication\resources\keysModule1Keys.cs
\MyApplication\resources\keys\Module2Keys.cs
Для сценария пакетной программы:пожалуйста, обратитесь к моему блогу http://samithenerd.blogspot.com/2011/12/batch-program-for-creating-satellite.html