Я хочу, чтобы иметь возможность автоматически публиковать в локальной папке каждый раз, когда создается веб-проект asp.net mvc 2.
Я использую Visual Studio 2008.
Я хочу, чтобы иметь возможность автоматически публиковать в локальной папке каждый раз, когда создается веб-проект asp.net mvc 2.
Я использую Visual Studio 2008.
Самый простой способ автоматизировать функции, включенные в Visual Studio, "публиковать" действие, доступное в меню "Построение", - это использовать проект веб-развертывания. Там тоже для VS2005. В основном это дополнительный проект, который вы добавляете в свое решение, которое будет нацелено на ваш веб-проект, и когда оно будет построено, опубликует ваш веб-проект как часть процесса сборки. Это упрощает автоматическую сборку сайта как часть сборки без сбрасывания с MSBuild (хотя MSBuild не так уж сложно).
Хорошо, вы могли бы сделать это с MSBuild в событии после сборки.
Но вы уверены, что хотите это сделать? Это замедлит вас, и вам, вероятно, не нужно публиковать для каждой сборки? Почему бы просто не запустить сайт в IIS вместо Cassini.
Шаг 1. Убедитесь, что у вас есть веб-проект.
Шаг 2. Перейдите в меню "Просмотр" → "Панели инструментов" → "Публикация веб-сайтов".
Кнопка публикации кнопки публикации на панели инструментов будет делать то, что вы хотите... создать и опубликовать за один шаг.
Вот как я это делаю в своем проекте веб-сайта. Обратите внимание, что это скопирует в папку; если вы хотите публиковать через FTB, WebDav или SSH, вам нужно использовать задачу Exec
вместо задачи Copy
и указать инструмент командной строки, который может развернуть файлы по нужному протоколу.
Кроме того, вы не можете редактировать задачу AfterBuild
из параметров проекта в VS IDE. Вам нужно открыть его в "Блокноте" или в вашем любимом текстовом/XML-редакторе. (Вы даже можете использовать VS, если вы закроете решение и принудительно его запустите, чтобы открыть файл с помощью редактора XML: -))
Также есть цель сборки, которая вызывает AspNetCompiler
, которую я сейчас отключил, но вы можете легко включить свойство свойства MvcBuildViews
.
<PropertyGroup>
<MvcBuildViews>false</MvcBuildViews>
<DropPath>..\..\drop\</DropPath>
</PropertyGroup>
<Target Name="AfterBuildCompiler" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
</Target>
<Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
<ConvertToAbsolutePath Paths="$(DropPath)">
<Output TaskParameter="AbsolutePaths" ItemName="FullDropPath" />
</ConvertToAbsolutePath>
<Message Importance="High" Text="Binplacing -> @(FullDropPath)" />
<ItemGroup>
<Binaries Include="$(OutputPath)**\*.*" />
</ItemGroup>
<Copy SkipUnchangedFiles="True" SourceFiles="@(Compile)" DestinationFiles="@(Compile->'$(DropPath)%(Identity)')" />
<Copy SkipUnchangedFiles="True" SourceFiles="@(Content)" DestinationFiles="@(Content->'$(DropPath)%(Identity)')" />
<Copy SkipUnchangedFiles="True" SourceFiles="@(EntityDeploy)" DestinationFiles="@(EntityDeploy->'$(DropPath)%(Identity)')" />
<Copy SkipUnchangedFiles="True" SourceFiles="@(Binaries)" DestinationFiles="@(Binaries->'$(DropPath)%(Identity)')" />
</Target>
Вариант 1: Переключитесь с Cruise Control на JetBrains TeamCity (вы не пожалеете!). В TeamCity есть опция Artifacts, которая...
"Артефакты - это файлы, созданные сборкой. После завершения сборки TeamCity ищет артефакты в каталоге проверки сборки в соответствии с указанными шаблонами артефакта. Затем файлы сопоставления загружаются на сервер, где они становятся доступными для загрузки".
Вариант 2. Создайте задачу в Cruise Control, чтобы выполнить XCOPY после завершения сборки.
<tasks>
<msbuild>
... here your main build ...
</msbuild>
<exec>
... define your XCOPY or other executable task here ...
<buildTimeoutSeconds>900</buildTimeoutSeconds>
</exec>
Вариант 3. Создайте проект пост-сборки в своем решении и попросите его скопировать файлы, добавьте условие для этой задачи, которое будет запускаться только при запуске в режиме круиз-контроля (это позволяют различные переменные среды).