Версия развертывания файловой системы для командной строки VS2010 Web Publish - PullRequest
45 голосов
/ 27 октября 2010

Люди,

В двух словах, я хочу повторить этот диалог: alt text

Это проект Visual Studio 2010 ASP.Net MVC. Если я выполню эту команду, я получу все нужные мне файлы, включая преобразованные файлы web.configs в каталоге «C: \ ToDeploy».

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

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

Я знаю, что мог бы воспроизвести эту функцию, используя задачи nAnt или сценарии rake, но я хочу сделать это с помощью этого механизма, чтобы не повторяться.

Я исследовал это еще немного, и я нашел эти ссылки, но ни одна из них не решает это чисто:

Заранее спасибо!

Ответы [ 6 ]

46 голосов
/ 28 октября 2010

Хорошо, наконец-то понял это.

Командная строка, которая вам нужна:

msbuild path/to/your/webdirectory/YourWeb.csproj /p:Configuration=Debug;DeployOnBuild=True;PackageAsSingleFile=False

Вы можете изменить, куда выводится проект, добавив свойство outdir=c:\wherever\ в раздел / p:.

Это создаст вывод в:

path/to/your/webdirectory/obj/Debug/Package/PackageTmp/

Затем вы можете скопировать эти файлы из вышеуказанного каталога любым удобным для вас способом.

У меня все это работает как задание на рубиновом рейке, используя Альбакор . Я пытаюсь сделать все это, чтобы я мог внести это как вклад в проект. Но если кому-то понадобится код до этого, дайте мне знать.

Еще одна морщина, которую я обнаружил, заключалась в том, что она помещала токенизированные параметры в файл Web.config. Если вам не нужна эта функция, обязательно добавьте:

/p:AutoParameterizationWebConfigConnectionStrings=false
11 голосов
/ 20 декабря 2011

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

Это похоже на Публикация веб-приложения из командной строки , но только что почистил и добавил лог-файл.также проверьте исходный код http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

Создайте MSBuild_publish_site.bat (назовите его как угодно) в корне проекта веб-приложения

set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v4.0.30319
set destPath=C:\Publish\MyWebBasedApp\

:: clear existing publish folder
RD /S /Q "%destPath%"

call %msBuildDir%\msbuild.exe  MyWebBasedApp.csproj "/p:Configuration=Debug;PublishDestination=%destPath%;AutoParameterizationWebConfigConnectionStrings=False" /t:PublishToFileSystem /l:FileLogger,Microsoft.Build.Engine;logfile=Manual_MSBuild_Publish_LOG.log

set msBuildDir=
set destPath=

Обновите файл проекта веб-приложения MyWebBasedApp.csproj, добавив следующий xml под тегом <Import Project=

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder">
<Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." />
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" />

    <ItemGroup>
        <PublishFiles Include="$(_PackageTempDir)\**\*.*" />
    </ItemGroup>

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" />
</Target>

, для меня это работает лучше, чем для других решений.

Проверьтедля получения дополнительной информации:

1) http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

2) Публикация веб-приложения из командной строки

3) СборкаПроект Visual Studio через командную строку

1 голос
/ 26 сентября 2014

На VS2012 и выше вы можете ссылаться на существующие профили публикации в вашем проекте с msbuild 12.0, это будет эквивалентно щелчку правой кнопкой мыши и публикации ... выбор профиля публикации ("MyProfile" на этот пример):

msbuild C:\myproject\myproject.csproj "/P:DeployOnBuild=True;PublishProfile=MyProfile"
1 голос
/ 08 мая 2013

Мое решение для CCNET с преобразованием Web.config :

<tasks>
    <msbuild>
        <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <workingDirectory>E:\VersionesCC\Trunk_4\SBatz\Gertakariak_Orokorrak\GertakariakMS\Web</workingDirectory>
        <projectFile>GertakariakMSWeb2.vbproj</projectFile>
        <targets>Build</targets>
        <timeout>600</timeout>
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
        <buildArgs>
            /noconsolelogger /p:Configuration=Release /v:diag
            /p:DeployOnBuild=true
            /p:AutoParameterizationWebConfigConnectionStrings=false
            /p:DeployTarget=Package
            /p:_PackageTempDir=E:\Aplicaciones\GertakariakMS2\Web
        </buildArgs>
        </msbuild>
</tasks>
0 голосов
/ 15 марта 2013

У меня есть решение для Visual Studio 2012: https://stackoverflow.com/a/15387814/2164198

Однако оно работает без установленной Visual Studio!(см. ОБНОВЛЕНИЕ ).Я еще не проверял, можно ли получить все необходимое из Visual Studio Express 2012 для установки через Интернет.

0 голосов
/ 12 сентября 2012

Полный файл msbuild с вдохновением от CubanX

    <Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Publish">
        <RemoveDir Directories="..\build\Release\Web\"
                     ContinueOnError="true" />        
       <MSBuild Projects="TheWebSite.csproj"
                Targets="ResolveReferences;_CopyWebApplication"
                Properties="Configuration=Release;WebProjectOutputDir=..\build\Release\Web;OutDir=..\build\Release\Web\bin\"
        />  
    </Target>
    <Target
        Name="Build"
        DependsOnTargets="Publish;">
    </Target>   
</Project>

Помещает опубликованный веб-сайт в папку .. \ build \ Release

...