Как автоматизировать повторяющиеся задачи после сборки? - PullRequest
4 голосов
/ 19 августа 2008

Я запускаю решение для веб-сайта ASP.NET с несколькими другими проектами. Я знал, что проекты MSBuild способны на это, но так ли это лучше? Их легко создать? NAnt, CruiseControl.NET или любое другое решение лучше?

Когда я создаю сайт (используя Проекты веб-развертывания ), могу ли я автоматизировать часть сборки, чтобы она не копировала определенные папки из проекта в папку Release? Например, у меня есть папки с локальными поисковыми индексами, изображениями и другой частью содержимого папки, но я никогда не нуждаюсь и не загружаю их при развертывании проекта.

Я также ищу этот тип решения для автоматического увеличения номеров сборки и версий.

Ответы [ 7 ]

8 голосов
/ 01 октября 2008

Вот пример сценария проекта веб-развертывания такого рода задачи в файле .wdproj:

  <Target Name="AfterBuild">
    <!-- ============================ Script Compression============================ -->
    <MakeDir Directories="$(OutputPath)\compressed" />
    <Exec Command="java -jar c:\yuicompressor-2.2.5\build\yuicompressor-2.2.5.jar --charset UTF-8 styles.css -o compressed/styles.css" WorkingDirectory="$(OutputPath)" />
    <Exec Command="move /Y .\compressed\* .\" WorkingDirectory="$(OutputPath)" />
    <RemoveDir Directories="$(OutputPath)\sql" />
    <Exec Command="c:\7zip-4.4.2\7za.exe a $(ZipName).zip $(OutputPath)\*" />
  </Target>

Это позволит вам удалить папку.

(Я подозреваю, что если вы хотите, чтобы копия папки не превышала на всех , файл решения был бы местом для указания этого, хотя мне не приходилось это использовать.)

4 голосов
/ 28 августа 2008

MaseBase, вы можете использовать Проекты веб-развертывания для создания и упаковки веб-сайтов. Мы делаем это все время для проектов с аспектом веб-приложения. После назначения WDP веб-сайту вы можете открыть файл .wdproj в виде простого текстового XML-файла. В конце - закомментированный раздел целей MSBuild, представляющий последовательность событий, которые запускаются в процессе сборки.

<!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
Other similar extension points exist, see Microsoft.WebDeployment.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="BeforeMerge">
</Target>
<Target Name="AfterMerge">
</Target>
<Target Name="AfterBuild">
</Target>
-->

Вы можете раскомментировать нужные цели (например, «AfterBuild») и вставить туда необходимые задачи для выполнения ваших повторных действий после сборки.

2 голосов
/ 19 августа 2008

Вы можете установить свойство Build Action / Copy to Output Directory для отдельных файлов (выберите файл и нажмите F4, чтобы открыть окно свойств), чтобы контролировать, что происходит с ними во время сборки, но не для папок. Вероятно, это можно автоматизировать с помощью (предварительной) задачи сборки, если вы не хотите делать это вручную.

Кроме того, вы можете исключить эти папки из проекта (щелкните правой кнопкой мыши и «исключить из проекта»); они все еще будут там («показать все файлы» в обозревателе решений), но они не будут включены при сборке проекта.

1 голос
/ 19 августа 2008

Не можете ли вы отредактировать файл MSBuild проекта Web Deployment, чтобы он делал то, что вы хотите?

1 голос
/ 19 августа 2008

Мы используем FinalBuilder для автоматизации нескольких задач после сборки / предварительной сборки. Также имеется веб-интерфейс, позволяющий запускать сборки (или продвигать веб-сайты), войдя на веб-сайт и нажав кнопку.

http://www.finalbuilder.com/

1 голос
/ 19 августа 2008

В дополнение к подсказке @ Fredrik о настройке элементов проекта для «Копировать в выходной каталог» вы также можете указать действие после сборки в свойствах проекта на вкладке «Сборка» и включить команды CMD, такие как copy.exe и move.exe. .

1 голос
/ 19 августа 2008

CruiseControl.NET решает другую проблему (непрерывная интеграция) ... однако, я имел большой успех с NAnt именно для того, что вы спрашиваете. Есть кривая обучения, но как только вы станете опытным, вы удивитесь, как вы справились с этим безуспешно.

...