Опубликовать веб-приложение из командной строки - PullRequest
16 голосов
/ 16 августа 2011

У меня есть серия веб-приложений на основе .NET 4 (WCF и Web) в одном и том же решении, но нужно выборочно публиковать их из командной строки.

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

Мне нужно иметь возможность указать проект, а не решение, выполнить любые преобразования и перенаправить вывод в папку ... в основномимитируйте правой кнопкой мыши опцию «Опубликовать», используя файловую систему.

В дополнение ко всему, я хотел бы оставить проекты в покое - не добавляя файлы msbuild повсюду, так как этоконкретная сборка, и не обязательно связанная с проектом.

Материал, который я пробовал:

Ответы [ 4 ]

15 голосов
/ 16 августа 2011

Сохранить следующий скрипт как publishProject.bat

rem publish passed project 
rem params: %configuration% %destDir% %srcDir% %proj%
@echo off
SET DestPath=d:\projects\Publish\%2
SET SrcPath=d:\projects\Src\%3\
SET ProjectName=%4
SET Configuration=%1

RD /S /Q "%DestPath%" rem clear existed directory
:: build project
MSBuild  "%SrcPath%%ProjectName%.vbproj" /p:Configuration=%Configuration%
:: deploy project
::/t:TransformWebConfig
MSBuild "%SrcPath%%ProjectName%.vbproj" /target:_CopyWebApplication /property:OutDir=%DestPath%\ /property:WebProjectOutputDir=%DestPath% /p:Configuration=%Configuration%
xcopy "%SrcPath%bin\*.*" "%DestPath%\bin\" /k /y

echo =========================================
echo %SrcPath%%3.vbproj is published
echo =========================================

Я звоню из другого пакетного файла

@echo off
rem VS2010. For VS2008 change %VS100COMNTOOLS% to %VS90COMNTOOLS%
call "%VS100COMNTOOLS%\vsvars32.bat" 
SET ex=.\publishProject.bat Release

call %ex% KillerWebApp1 KillerWebApp1\KillerWebApp1 KillerWebApp1
call %ex% KillerWebApp2 KillerWebApp2\KillerWebApp2 KillerWebApp2
call %ex% KillerWebApp3 KillerWebApp3\KillerWebApp3 KillerWebApp3
call %ex% KillerWebApp4 KillerWebApp4\KillerWebApp4 KillerWebApp4

EDIT : Код выше работает для большинства случаев, но не для всех. То есть мы используем другое приложение asp .net и связываем его как виртуальную папку в IIS. В этой ситуации VS2008 отлично работал с кодом выше, но VS2010 также копировал файлы из виртуального каталога при развертывании. Следующий код работает правильно и в VS2010 ( решение было найдено здесь )

Добавить в файл проекта (* .csproj, * .vbproj)

<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>

Изменить publishProject.bat на:

rem publish passed project 
rem params: %configuration% %destDir% %srcDir% %proj%
@echo off
SET DestPath=d:\projects\Publish\%2
SET SrcPath=d:\projects\Src\%3\
SET ProjectName=%4
SET Configuration=%1

:: clear existed directory
RD /S /Q "%DestPath%"

:: build and publish project
MSBuild "%SrcPath%%ProjectName%.vbproj" "/p:Configuration=%Configuration%;AutoParameterizationWebConfigConnectionStrings=False;PublishDestination=%DestPath%" /t:PublishToFileSystem
4 голосов
/ 03 апреля 2012

Я знаю, что это старый вопрос, но я кое-что узнал, поэтому я решил поделиться: хотя на 100% верно, что цель "_CopyWebApplication" существует и работает, в .NET 4.0 она была замененас помощью цели «_WPPCopyWebApplication» в Microsoft.Web.Publishing.targets, которая поддерживает новые функции, такие как синтаксис преобразования web.config и т. д.

0 голосов
/ 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 голосов
/ 16 августа 2011

Вы проверили WebDeploy ?

Это должно сделать все необходимые шаги - он может объединить веб-приложение в развертываемый файл (в основном ZIP), и на сервере есть «движок», который может интерпретировать этот развертываемый пакет и делать все тяжелая атлетика для вас.

Также см. веб-развертывание Скотта Хансельмана. Удивительно: если вы используете XCopy, вы делаете это неправильно сообщение в блоге - очень поучительно!

...