Тут задают вопрос "откуда ад заборов и коровников"
А давайте я вам расскажу, откуда берутся ебанутые требования к разработчикам и вообще черви и жабы в ИТ. На примере одного простейшего use-case.
Есть, значит, проект на дотнете. Как положено, его исходники лежат под контролем версий (меркуриал). И я, всего лишь, желаю следующего:
1) Проект собирается на машине, где стоит только вижуал студия (а в идеале - только .NET фреймворк)
2) При сборке получающиеся либы имеют версию вида major.minor.номер-релиза.vcsrevision. Т.е. проставить версии исходя из номера ревизии в меркуриале.
Вполне себе нормальное желание - пришел к клиенту, глянул на свойства файла и видишь что за версия, итд.
Так вот, реализация этого дела с уверенностью заводит в один из следующих тупиков:
1) cmd-файлы, вызывающие комманд-лайн меркуриал и генерирующие файлы AssemblyInfo.cs. При дальнейшем развитии получается фреймворк для билда из cmd-файлов, безальтернативно. Ад кромешнейший.
2) вижуал студия с доставленными 100500 расширениями выполняющими именно это, но каждое из которых не умеет чего-нибудь.
3) NAnt с 100500 вручную написанными скриптами сборки, которые нужно синхронизировать с csproj
4) NAnt, который вызывает MSBuild для сборки, т.к. csproj - это на самом деле скрипты MSBuild
5) то, что я пытался сейчас сделать: только MSBuild. Из соображений "не разводить зоопарк". Ага, да.
Значит последовательность действий с MSBuild:
1) Ищем интеграцию MSBuild с меркуриалом, в гугле. Находим: http://msbuildhg.codeplex.com/
2) Качаем. MSBuild.Mercurial-1.1.2.msi. Хер знает что и куда это ставит, поэтому ставим в виртуальной машине. Смотрим, что реально это два файлика MSBuild.Mercurial.dll, MSBuild.Mercurial.tasks и примеры с документацией.
3) Начинаем разбираться в примере, как установить версию. 125 строк, 4 кб xml-файл HgVersion.targets.
4) Файл зависит от MSBuild Community Tasks. Оттуда используется _ОДНО_ описание таска - AssemblyInfo, которое используется для генерации файла AssemblyInfo
5) Ищем MSBuild Community Tasks в гугле: http://msbuildtasks.tigris.org/. Оказывается, проект переехал на гитхаб: https://github.com/loresoft/msbuildtasks
6) Идем туда. Оказывается, чтобы поставить - нужен Package Manager Console. Являющийся частью NuGet. Скачать просто dll и tasks - нельзя.
7) Думаю - попытаюсь собрать самостоятельно. Качаю исходники, распаковываю, запускаю:
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe Master.proj
Хрен там. Для сборки ТОЖЕ нужен NuGet: loresoft-msbuildtasks-37dae23\Source\.nuget\nuget.targets(51,9): error : Unable to locate ', ".nuget"))\nuget.exe'
На этом я заябываюсь и иду писать пост в ЖЖ. При этом самодельная реализация того же на бат-файлах - 3 строки бат файла и 10 строк утилитка на дотнете(которую можно заменить awk из GNUWin32, по идее).
Короче, я не знаю, какие сделать из этого выводы. Наверно, проще в корне сборочных скриптов положить файл readme.txt и написать, в какой последовательности что исправлять и что должно стоять на машине, чтобы собрать проекты, потому что попытка сделать "как положено" (системы сборки, общепринятые инструменты) уводит в дебри с первого же шага.
Есть, значит, проект на дотнете. Как положено, его исходники лежат под контролем версий (меркуриал). И я, всего лишь, желаю следующего:
1) Проект собирается на машине, где стоит только вижуал студия (а в идеале - только .NET фреймворк)
2) При сборке получающиеся либы имеют версию вида major.minor.номер-релиза.vcsrevision. Т.е. проставить версии исходя из номера ревизии в меркуриале.
Вполне себе нормальное желание - пришел к клиенту, глянул на свойства файла и видишь что за версия, итд.
Так вот, реализация этого дела с уверенностью заводит в один из следующих тупиков:
1) cmd-файлы, вызывающие комманд-лайн меркуриал и генерирующие файлы AssemblyInfo.cs. При дальнейшем развитии получается фреймворк для билда из cmd-файлов, безальтернативно. Ад кромешнейший.
2) вижуал студия с доставленными 100500 расширениями выполняющими именно это, но каждое из которых не умеет чего-нибудь.
3) NAnt с 100500 вручную написанными скриптами сборки, которые нужно синхронизировать с csproj
4) NAnt, который вызывает MSBuild для сборки, т.к. csproj - это на самом деле скрипты MSBuild
5) то, что я пытался сейчас сделать: только MSBuild. Из соображений "не разводить зоопарк". Ага, да.
Значит последовательность действий с MSBuild:
1) Ищем интеграцию MSBuild с меркуриалом, в гугле. Находим: http://msbuildhg.codeplex.com/
2) Качаем. MSBuild.Mercurial-1.1.2.msi. Хер знает что и куда это ставит, поэтому ставим в виртуальной машине. Смотрим, что реально это два файлика MSBuild.Mercurial.dll, MSBuild.Mercurial.tasks и примеры с документацией.
3) Начинаем разбираться в примере, как установить версию. 125 строк, 4 кб xml-файл HgVersion.targets.
4) Файл зависит от MSBuild Community Tasks. Оттуда используется _ОДНО_ описание таска - AssemblyInfo, которое используется для генерации файла AssemblyInfo
5) Ищем MSBuild Community Tasks в гугле: http://msbuildtasks.tigris.org/. Оказывается, проект переехал на гитхаб: https://github.com/loresoft/msbuildtasks
6) Идем туда. Оказывается, чтобы поставить - нужен Package Manager Console. Являющийся частью NuGet. Скачать просто dll и tasks - нельзя.
7) Думаю - попытаюсь собрать самостоятельно. Качаю исходники, распаковываю, запускаю:
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe Master.proj
Хрен там. Для сборки ТОЖЕ нужен NuGet: loresoft-msbuildtasks-37dae23\Source\.nuget\nuget.targets(51,9): error : Unable to locate ', ".nuget"))\nuget.exe'
На этом я заябываюсь и иду писать пост в ЖЖ. При этом самодельная реализация того же на бат-файлах - 3 строки бат файла и 10 строк утилитка на дотнете(которую можно заменить awk из GNUWin32, по идее).
Короче, я не знаю, какие сделать из этого выводы. Наверно, проще в корне сборочных скриптов положить файл readme.txt и написать, в какой последовательности что исправлять и что должно стоять на машине, чтобы собрать проекты, потому что попытка сделать "как положено" (системы сборки, общепринятые инструменты) уводит в дебри с первого же шага.
(no subject)
(no subject)
no subject
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
Был бы на 90% тачек нормальный язык для всякого скриптования. На C#, как по мне, всякие "считай-запиши текст/xml" делаются весьма неплохо. Плюс, в отличии от awk и прочих bat-файлов оно нормально потом усложняется при необходимости.
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
no subject
"Любовь некоторых людей к кактусам иногда поражает всякое воображение. Ведь стоит один раз признать очевидную вещь, - сиришотка не язык, а венда не операционка, - и всё становится просто, ясно и красиво, но нет, мыши будут плакать и колоться."
Так вот, что я хотел сказать: оно так и есть, но блин, клиенты хотят винду и C#.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(Anonymous) - 2012-05-17 21:01 (UTC) - Expand(no subject)
(no subject)
no subject
1) cmd-файлы, вызывающие комманд-лайн меркуриал и генерирующие файлы AssemblyInfo.cs. При дальнейшем развитии получается фреймворк для билда из cmd-файлов, безальтернативно. Ад кромешнейший.
2) вижуал студия с доставленными 100500 расширениями выполняющими именно это, но каждое из которых не умеет чего-нибудь.
3) NAnt с 100500 вручную написанными скриптами сборки, которые нужно синхронизировать с csproj
4) NAnt, который вызывает MSBuild для сборки, т.к. csproj - это на самом деле скрипты MSBuild
5) то, что я пытался сейчас сделать: только MSBuild. Из соображений "не разводить зоопарк". Ага, да.
я в таких случаях давно и безнадёжно агитирую за JavaScript в ипостаси WSH. Есть на всех виндах включая забытые Богом 95-е, умеет дёргать почти все COM-компоненты, запускать exe-ники и прочая, прочая. При этом - читается куда легче чем все эти CMD. Ну и из всех билд-систем отлично запускается как внешний процесс (если в билд надо вклиниться посредине). При небольшой сноровке весьма удобно. А если захотеть странного - так на нём можно ещё и UI писать, в виде MS HTA. Короче, эдакий некросплатформенный питон.
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
no subject
Майкрософт такой майкрософт...
(no subject)
no subject
(no subject)
(no subject)
no subject
(no subject)
no subject
(no subject)
no subject
no subject