Как скомпилировать .il-файлы из MSBuild ?
От: Arsen.Shnurkov  
Дата: 15.02.17 09:09
Оценка:
Есть такая утилита командной строки — ilasm.exe

Правильно ли я понимаю, что если для утилиты csc.exe сделали отдельный вид проектов, то и для ilasm тоже надо будет делать свой вид проектов (например .ilproj) ?
Это связано с тем, что в .csproj используется вполне конкретный тип MSBuildItem — <Compile>
А если хочется иметь другой тип (например <Assemble>), то надо описывать другой формат проекта, правильно?

Говорят, что когда-то утилита xbuild умела, а потом её поменяли на msbuild и всё перестало работать. Я пробовал поискать пункт создания такого проекта, но сейчас его нет в списке шаблонов проектов (у меня на машине).

В утилите NAnt есть таск ilasm, но NAnt — это вовсе не msbuild.

В MSDN есть пример базового таска для вообще утилит командной строки:
https://msdn.microsoft.com/en-us/library/microsoft.build.utilities.tooltask.aspx
When overridden in a derived form, provides functionality for a task that wraps a command line tool.
и пример производного таска для msbuild, отнаследованный от ToolTask конкретно для ILAsm:
https://msdn.microsoft.com/ru-ru/library/microsoft.build.utilities.commandlinebuilder.appendfilenameifnotnull.aspx

Однако мне не ясно, какие действия надо осуществить, чтобы его использовать
Ну, то есть, что надо делать, чтобы передать сразу несколько .il-файлов в этот таск? (судя по тому, что там свойство не коллекция — сделать это нельзя)

И примеров нет. Как, например, будет выглядеть файл проекта целиком? Где аддин для monodevelop (вроде бы есть ILAsmBinding, в Add-in Manager этот аддин включен, но почему-то визарда для создания таких проектов нет)?
Отредактировано 15.02.2017 9:11 Arsen.Shnurkov . Предыдущая версия . Еще …
Отредактировано 15.02.2017 9:10 Arsen.Shnurkov . Предыдущая версия .
Re: Как скомпилировать .il-файлы из MSBuild ?
От: Sinix  
Дата: 15.02.17 09:54
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>Правильно ли я понимаю, что если для утилиты csc.exe сделали отдельный вид проектов, то и для ilasm тоже надо будет делать свой вид проектов (например .ilproj) ?


http://stackoverflow.com/a/4076917 ?

Ну, или emit в рантайме. Задача-то какая?
Re[2]: Как скомпилировать .il-файлы из MSBuild ?
От: Arsen.Shnurkov  
Дата: 15.02.17 10:00
Оценка: 24 (1)
S>http://stackoverflow.com/a/4076917 ?
видел, не нравится

И, кстати, в обоих репозиториях
https://github.com/scottdorman/MSBuildContrib
https://github.com/loresoft/msbuildtasks
упомянутого таска не нашел.

S> Ну, или emit в рантайме. Задача-то какая?


нужно сформировать сборку, в которую сбилдовать код, который невозможно создать компилятором C#.
emit — это более непрозрачный и трудоёмкий способ, чем скормить исходники утилите ilasm
Re[3]: Как скомпилировать .il-файлы из MSBuild ?
От: Sinix  
Дата: 15.02.17 10:09
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>emit — это более непрозрачный и трудоёмкий способ, чем скормить исходники утилите ilasm


Ну, тогда ещё варианты:
* fody + свой реврайтер,
* http://www.glennslayden.com/code/c-sharp/inline-il
* http://stackoverflow.com/questions/3328901/how-to-insert-cil-code-to-c-sharp
Re[4]: Как скомпилировать .il-файлы из MSBuild ?
От: Arsen.Shnurkov  
Дата: 15.02.17 10:20
Оценка:
S>Ну, тогда ещё варианты:
S>* fody + свой реврайтер,

Fody — это что-то страшное. Мне кажется, что посмотреть на таск для CSC и написать такой же для ilasm всё-таки проще.

S>* http://www.glennslayden.com/code/c-sharp/inline-il

S>* http://stackoverflow.com/questions/3328901/how-to-insert-cil-code-to-c-sharp

эти два не подойдут, потому что функции-то в них описываются синтаксисом C#, а мне как раз именно это надо обойти.
Re[5]: Как скомпилировать .il-файлы из MSBuild ?
От: Sinix  
Дата: 15.02.17 10:27
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>эти два не подойдут, потому что функции-то в них описываются синтаксисом C#, а мне как раз именно это надо обойти.


Ну, тогда первый мой ответ, IlAsmCommand там прям в тексте прописана. Или переспросить на SO.

Или ILSupport. Или ILProj.

Если не секрет, а что такого страшного понадобилось, что синтасиса шарпа не хватает?
Отредактировано 15.02.2017 10:30 Sinix . Предыдущая версия . Еще …
Отредактировано 15.02.2017 10:28 Sinix . Предыдущая версия .
Re[6]: Как скомпилировать .il-файлы из MSBuild ?
От: Arsen.Shnurkov  
Дата: 15.02.17 10:32
Оценка:
S>Ну, тогда первый мой ответ

Вот ты мне двойку поставил
Автор: Sinix
Дата: 01.05.16
за переворачивание списка, потому что там было некрасиво.
Тут то же самое! Это же грязный кривой костыль, а не решение которым можно гордиться.

S> ILProj


Вот это бы подошло. Одна проблема — не пользуюсь я VisualStudio. Мне бы такой же под MonoDevelop...
Отредактировано 15.02.2017 10:39 Arsen.Shnurkov . Предыдущая версия .
Re[7]: Как скомпилировать .il-файлы из MSBuild ?
От: Sinix  
Дата: 15.02.17 10:46
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>Вот ты мне двойку поставил
Автор: Sinix
Дата: 01.05.16
за переворачивание списка, потому что там было некрасиво.

Я злой и я записываю?

Если серьёзно, по ссылке вижу только стёб про "сделать, затем уточнить детали". Цитата:

первые 5 минут положено выносить мозг заказчику вопросом "ну допустим, я этот список разверну. И таки что вы будете с ним делать дальше?".

И мелкий баг — результат не сохранялся — подкинул. Что-то не припомню, чтоб я там за красиво/некрасиво агитировал.


AS>Тут то же самое! Это же грязный кривой костыль, а не решение которым можно гордиться.

Ну да, msbuild сам по себе сборник легаси и компромиссов, точно так же как и любой другой формат файлов сборки. Внутрь него лучше не смотреть (цитата про не смотри куда попало (с) Ницше).

Посмотри обновление прошлого ответа — варианты в виде extensions студии добавил.
Re[7]: Как скомпилировать .il-файлы из MSBuild ?
От: Sinix  
Дата: 15.02.17 10:48
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

S>> ILProj

AS>Вот это бы подошло. Одна проблема — не пользуюсь я VisualStudio. Мне бы такой же под MonoDevelop...
Там шаблоны. Открыть студию, получить шаблон проекта, использовать.

И таки да, по-прежнему интересно: что за задача, что синтаксиса шарпа не хватает?
Re[8]: Как скомпилировать .il-файлы из MSBuild ?
От: grigorash Россия www.geoserver.ru
Дата: 15.02.17 11:19
Оценка: 92 (2)
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Arsen.Shnurkov, Вы писали:


S>>> ILProj

AS>>Вот это бы подошло. Одна проблема — не пользуюсь я VisualStudio. Мне бы такой же под MonoDevelop...
S>Там шаблоны. Открыть студию, получить шаблон проекта, использовать.

S>И таки да, по-прежнему интересно: что за задача, что синтаксиса шарпа не хватает?

У меня, например, был случай, когда на C# нужно было реализовать COM-интерфейс, в котором был метод
HRESULT Item([in]VARIANT* a_varIndex, [out,retval]IDispatch** r_objItem);

что выливалось в
 public object this[ref object index]

Интерфейс с таким индексатором C# реализовать не может.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.