[解決済み】msbuildでWeb公開する方法とは?
質問
Visual Studio 2010 には Publish コマンドがあり、Web アプリケーション プロジェクトをファイル システムの場所に公開することができます。TeamCityビルドサーバーでこれを行いたいので、ソリューションランナーまたはmsbuildで行う必要があります。Publish ターゲットを使ってみましたが、これはClickOnce用かもしれませんね。
msbuild Project.csproj /t:Publish /p:Configuration=Deploy
私は基本的に、ウェブ展開プロジェクトが行うことと全く同じことを、アドインなしで行いたいと思っています。WAPをコンパイルし、実行に不要なファイルを削除し、すべての web.configの変換 そして、その出力を指定された場所にコピーします。
私の解決策 ジェフ・シバー氏の回答に基づいています。
<Target Name="Deploy">
<MSBuild Projects="$(SolutionFile)"
Properties="Configuration=$(Configuration);DeployOnBuild=true;DeployTarget=Package"
ContinueOnError="false" />
<Exec Command=""$(ProjectPath)\obj\$(Configuration)\Package\$(ProjectName).deploy.cmd" /y /m:$(DeployServer) -enableRule:DoNotDeleteRule"
ContinueOnError="false" />
</Target>
解決方法は?
カスタムmsbuildスクリプトを使わずに、ほぼ動作するようになりました。以下は、関連するTeamCityのビルド構成設定です。
Artifact paths: %system.teamcity.build.workingDir%MyProject³obj³Debug³Package³PackageTmp ランナーの種類 MSBuild (MSBuildファイル用ランナー) ビルドファイルのパス MyProjectMyProject.csproj 作業ディレクトリ: チェックアウト ディレクトリと同じ MSBuildのバージョンです。マイクロソフト .NET フレームワーク 4.0 MSBuild ToolsVersion: 4.0 実行プラットフォーム: x86 ターゲット パッケージ MSBuild.exeへのコマンドラインパラメータ。/p:Configuration=Debug
これにより、コンパイル、パッケージング(web.config の変換を伴う)、および成果物としての保存が行われます。唯一足りないのは、出力を指定した場所にコピーすることですが、これはアーティファクトに依存する別の TeamCity ビルド設定か msbuild スクリプトで行うことができます。
アップデート
以下は、コンパイル、パッケージング(web.configの変換を含む)、そして出力をステージングサーバーにコピーするmsbuildスクリプトです。
<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<SolutionName>MySolution</SolutionName>
<SolutionFile>$(SolutionName).sln</SolutionFile>
<ProjectName>MyProject</ProjectName>
<ProjectFile>$(ProjectName)\$(ProjectName).csproj</ProjectFile>
</PropertyGroup>
<Target Name="Build" DependsOnTargets="BuildPackage;CopyOutput" />
<Target Name="BuildPackage">
<MSBuild Projects="$(SolutionFile)" ContinueOnError="false" Targets="Rebuild" Properties="Configuration=$(Configuration)" />
<MSBuild Projects="$(ProjectFile)" ContinueOnError="false" Targets="Package" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="CopyOutput">
<ItemGroup>
<PackagedFiles Include="$(ProjectName)\obj\$(Configuration)\Package\PackageTmp\**\*.*"/>
</ItemGroup>
<Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->'\\build02\wwwroot\$(ProjectName)\$(Configuration)\%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>
</Project>
また、PropertyGroup タグから SolutionName と ProjectName のプロパティを削除して、msbuild に渡すこともできます。
msbuild build.xml /p:Configuration=Deploy;SolutionName=MySolution;ProjectName=MyProject
アップデート2
この質問にはまだかなりのトラフィックがあるので、私の回答を更新する価値があると思い、現在使用しているスクリプトで ウェブデプロイ (MSDeployとしても知られています)。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<ProjectFile Condition=" '$(ProjectFile)' == '' ">$(ProjectName)\$(ProjectName).csproj</ProjectFile>
<DeployServiceUrl Condition=" '$(DeployServiceUrl)' == '' ">http://staging-server/MSDeployAgentService</DeployServiceUrl>
</PropertyGroup>
<Target Name="VerifyProperties">
<!-- Verify that we have values for all required properties -->
<Error Condition=" '$(ProjectName)' == '' " Text="ProjectName is required." />
</Target>
<Target Name="Build" DependsOnTargets="VerifyProperties">
<!-- Deploy using windows authentication -->
<MSBuild Projects="$(ProjectFile)"
Properties="Configuration=$(Configuration);
MvcBuildViews=False;
DeployOnBuild=true;
DeployTarget=MSDeployPublish;
CreatePackageOnPublish=True;
AllowUntrustedCertificate=True;
MSDeployPublishMethod=RemoteAgent;
MsDeployServiceUrl=$(DeployServiceUrl);
SkipExtraFilesOnServer=True;
UserName=;
Password=;"
ContinueOnError="false" />
</Target>
</Project>
TeamCityでは、パラメータに
env.Configuration
,
env.ProjectName
と
env.DeployServiceUrl
. MSBuildランナーはビルドファイルのパスを持ち、パラメータは自動で渡されます(Command line parametersで指定する必要はありません)。
また、コマンドラインから実行することも可能です。
msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService
関連
-
[解決済み] 指定されたCGIアプリケーションでエラーが発生し、サーバーがプロセスを終了した
-
[解決済み] エンティティフレームワーク defaultconnectionfactory
-
[解決済み] Response.Redirect()を呼び出すと「Cannot redirect after HTTP headers have been sent」と表示されるのですが、なぜでしょうか?
-
[解決済み] Visual Studio 2010 Professionalで、要求された.Net Frameworkデータプロバイダーが見つからない。
-
Bad Request - Invalid URL HTTP Error 400の対処方法について。
-
Asp.NET ラジオボタンの使用方法
-
[解決済み] ASP.net MVCのviewstateに相当するものは何か【終了しました
-
[解決済み] Temporary ASP.NET Files」フォルダは何のためにあるのですか?
-
[解決済み] IIS 7、HttpHandlerとHTTPエラー500.21
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ファイルまたはアセンブリ 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform' を読み込めませんでした。
-
[解決済み] ASP.NET Ajaxクライアントサイドフレームワークのロードに失敗しました。
-
[解決済み] RSAキーコンテナを開くことができませんでした。
-
Asp.NET ラジオボタンの使用方法
-
ASP.NETでRadioButtonコントロールを使用する
-
[解決済み] のSelectedValueは項目リストに存在しないため、無効です。どのようにデバッグするのですか?
-
[解決済み] リンクボタンでjQueryコール__doPostBack
-
[解決済み] cshtmlとaspxの違いは何ですか、なぜですか、どのようなときに選択するのが良いですか?
-
[解決済み] ASP.NET セッションがタイムアウトする理由、sessionstateのタイムアウト設定
-
[解決済み] MSBuildの実行でSDKToolsPathの読み込みに失敗する