Тут задают вопрос "откуда ад заборов и коровников"
А давайте я вам расскажу, откуда берутся ебанутые требования к разработчикам и вообще черви и жабы в ИТ. На примере одного простейшего 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
Обычная задача (версионирование из VCS), обычные граничные условия (чистая сборка, минимум зависимостей, минимизация использования различных скриптовых языков).
Результат: с большой вероятностью ебаный ад. С причинами пока не разобрался.
no subject
no subject
no subject
no subject
Был бы на 90% тачек нормальный язык для всякого скриптования. На C#, как по мне, всякие "считай-запиши текст/xml" делаются весьма неплохо. Плюс, в отличии от awk и прочих bat-файлов оно нормально потом усложняется при необходимости.
no subject
Там в принципе, иерархии задач типа как в make, не особо опишешь, но мелкие императивные задачи вполне нормально решать.
no subject
Я тоже как-то занимался MSBuild-ом и CCNet-ом. В принципе оно все так и делается, главный паттерн - все что нужно сваливать прям в VSC (включая бинарники утилит, все нужные сборки, конфиги CCNet-ов и т.п.). Вроде жить можно.
no subject
no subject
no subject
no subject
no subject
public class MyTask : Task
{
[Required] public string Param1 { get; set; } // параметр из билдскрипта
public override bool Execute()
{
// кормим жаб
}
}
no subject
no subject
no subject
"Любовь некоторых людей к кактусам иногда поражает всякое воображение. Ведь стоит один раз признать очевидную вещь, - сиришотка не язык, а венда не операционка, - и всё становится просто, ясно и красиво, но нет, мыши будут плакать и колоться."
Так вот, что я хотел сказать: оно так и есть, но блин, клиенты хотят винду и C#.
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
> в WCF до .NET 4.0 надо указывать strong name
это касалось extensions и custom behavior, которые лежали в отдельной длл
no subject
Майкрософт такой майкрософт...
no subject
- не даст никакой разницы в том что происходит (т.к. msbuild понимает .sln, а csproj - это родной ее формат)
- может быть в разы медленнее (т.к. надо загружать эту слонятину)
no subject
В .net другое посасывает, с языком все ок.
no subject
- насколько совместим с браузерным яваскриптом?
- как дергать, какой командой?
no subject
no subject
no subject
(Anonymous) 2012-05-17 09:01 pm (UTC)(link)Сочувствую.
no subject
Впрочем, я их победил таки - исключил наиболее дебильные варианты (cmd-файлы, ручные утилиты) - оставил msbuild и кастомное расширение к нему тут же в репозитории. Все работает, как перфекционизм предписывает.
no subject
no subject
no subject
MSBuild ведет себя как положено, деплоймент результата его же средствами, пока все ок.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
powershell script? :)
no subject
Вплоть до IE9 (а может и в нём тоже, просто они там чего-то наменяли а у меня ещё не дошли руки смотреть) реализация собственно языка JavaScript одна и та же что в IE что в WSH (используется одна и та же jscript.dll). Но естессно что DOM-овских обьектов (document и т.п.) в нём нет, зато есть глобальный обьект WScript который и позволяет дёргать всё что угодно в системе.
> - как дергать, какой командой?
cscript.exe <имяфайла>
no subject
no subject
no subject
no subject
С романтической точки зрения, наука говорит что динамические языки - от бедности.