Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

Сохраните следующий script файл 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

ИЗМЕНИТЬ: Код выше работает для большинства случаев, но не для всех. То есть мы используем другое приложение 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

Ответ 2

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

Ответ 3

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

Это должно сделать все, что вам нужно - это может объединить веб-приложение в развертываемый файл (в основном ZIP), и на сервере есть "движок", который может интерпретировать этот развертываемый пакет и делать все тяжелый подъем для вас.

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

Ответ 4

Мое решение для 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>