web-dev-qa-db-ja.com

コマンドラインからWebアプリケーションを公開する

同じソリューション内に一連の.NET4ベースのWebアプリケーション(WCFおよびWeb)がありますが、コマンドラインから選択的に公開する必要があります。

これまで、MSBuild、aspnet_compilerなど、さまざまなことを試しましたが、これまでのところ何も機能していません。

ソリューションではなくプロジェクトを指定し、変換を実行し、出力をフォルダーにリダイレクトできるようにする必要があります...基本的に、ファイルシステムを使用して、マウスの右クリックで[公開]オプションを模倣します。

これらすべてに加えて、プロジェクトはそのままにしておきたいと思います。これは特定のビルドであり、必ずしもプロジェクトに関連しているわけではないため、msbuildファイルをあちこちに追加しないでください。

私が試したもの:

16
Kieron

次のスクリプトを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
15
Cheburek

これは古い質問ですが、何かを学んだばかりなので、共有することにしました。「_ CopyWebApplication」ターゲットが存在し、機能することは100%真実ですが、.NET 4.0の時点では、「 Microsoft.Web.Publishing.targetsの_WPPCopyWebApplication "ターゲット。web.config変換構文などの新機能をサポートします。

4
JerKimball

Web.config変換を使用した[〜#〜] ccnet [〜#〜]のソリューション:

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

チェックアウトしましたか WebDeploy

これにより、必要なすべての手順を実行できます。Webアプリをデプロイ可能なファイル(基本的にはZip)にバンドルでき、サーバー上にそのデプロイ可能なパッケージを解釈してすべての面倒な作業を実行できる「エンジン」があります。あなたのために。

Scott Hanselmanの Web展開が素晴らしい:XCopyを使用している場合は、間違っている ブログ投稿-非常に啓発的です!も参照してください。

0
marc_s