2012-02-08 2 views
5

У меня есть .il-файл, который я могу скомпилировать без проблем. Я могу назвать его так и без каких-либо проблем. Но я не могу установить версию файла через атрибут, как я ожидал бы. Как установить FileVersion для сборки при использовании ilasm?ILASM не задает FileVersion

Если я совершаю поездку туда и обратно, я получаю всегда файл .res, который содержит только двоичные данные, которые невозможно прочитать. Что находится внутри этого файла res и я могу его отредактировать?

код не работает

.assembly myAssembly 
{ 
    .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = { string('1.2.3.4') } 

ответ

9

Проблема может быть решена с помощью файла .res. Недостаточно совершить круговую поездку с ildasm и ilasm. Файл IL не ссылается на файл .res. Я должен был добавить его к вызову ilasm вручную. Данные в файле res, казалось, содержали информацию, которая записывается в заголовок PE, который подходит для меня.

В последней командной строки нужна была

ilasm test.il /dll /res:test.res 

Я до сих пор не знаю, что именно находится внутри файла Рез, но я могу обменивайтесь его с мета-информацией данных любого другого assemlby, что я создаю вручную, а затем декомпилировать он заменит метаданные исходной сборки, как мне нужно.

Кажется, что не так много людей делают такие вещи.

+1

Каждый программист на C/C++ делает это. Самый простой способ создать файл .res - это фиктивный проект на C++. Вы редактируете файл .rc вручную или с помощью редактора ресурсов в C++ IDE. Инструмент rc.exe SDK переводит его на .res –

+0

Спасибо, я не думал, что VS может фактически редактировать ресурс Version в двоичном редакторе. Хорошо знать, что ilasm не использует какой-то тайный двоичный формат. –