web-dev-qa-db-ja.com

MSBuild DeployOnBuild = trueは公開されません

Hudsonを使用してコマンドラインからビルドしているVisual Studio 2010 MVC2 Webアプリケーションがあります。 HudsonにWeb出力を公開させたいので、DeployOnBuild = trueおよびCreatePackageOnPublish = Trueタグをコマンドラインに追加しました。

私のコマンドは:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 
   /target:Clean,Build 
   /property:Configuration=Debug;DeployOnBuild=True;CreatePackageOnPublish=True; 
   [my project name.csproj]

開発マシン(Windows 7)でこのコマンドを実行すると、Web出力が\obj\Debug\Package\PackageTmp\に正常に公開されます。しかし、Hudsonサーバー(WS 2008)で実行すると正常にコンパイルされますが、公開されません。同じコマンド、同じバージョンのMSBuild、同じソースコード。

他のいくつかの人々の投稿で見たように、私は/t:Publishターゲットを試しましたが、これによりSkipping Unpublishable Project応答が得られます。

プロジェクトファイルにDeployOnBuild=TrueタグとCreatePackageOnPublish=Trueタグも追加してみましたが、変更はありません。

これが公開されない理由について何か考えはありますか?これらのタグを間違って使用していますか?ここには私が見ないだけの何かがあると確信しています。

39
Thomas

notと仮定すると、Visual Studio 2010がhudsonサーバーにインストールされている場合、パブリッシュする「ターゲット」ファイルが欠落している可能性があります。多くの頭から机への強打の後、私は最終的にこれを解決しました。

かなりの間、私はディレクトリをコピーする必要があることを知っていました

C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\WebApplications

プロジェクトをbuildにするために、VS2010がインストールされたローカルマシンからサーバーに移動します。しかし、プロジェクトもpublishにするには、ディレクトリもコピーする必要がありました

C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.0\Web

注:私の場合、実際にはこれらのフォルダーをソース管理にコミットし、csprojファイルの<MSBuildExtensionsPath32>値を変更して、これらのチェックアウトフォルダーを指すようにします(サーバーを準備するときの手順が1つ少なくなります)。これを機能させるためにこれは必須ではありませんが、問題を解決した後でこれを検討することをお勧めします。

更新:上記を実行した後、ビルドで "Microsoft.Web.Deployment.dll"が見つからないというメッセージが表示されました。これを解決するには、サーバーに Microsoft Web Deploy v2. をインストールする必要がありましたファイルシステムにのみ公開している場合でも。私はこれの論理を見ることができると思います。

更新:IIS Web Platform Installerを使用して「Visual Studio 2010 Shell(Integrated)」をインストールすると、必要なビルドターゲットがインストールされることを発見しました。これは、VisualサーバーにインストールされたStudioアプリケーション。一見すると任意のフォルダーを開発マシンからサーバーに手動でコピーしていません。

40
Brian Hinchey

公開ターゲットを実行するための条件が満たされていないようです。

1)異なるパブリケーションパスを持つことができます

2)公開ターゲットを実行するための条件がfalseです

両方を確認するには、フラグ/ v:diagを指定してコマンドを呼び出します。 Target "Publish"で検索し、実際に何が起こっているのかを理解してください。それは次のようになります

Target "ExecuteT4Templates: (TargetId:144)" in file "D:\App\App.csproj" from project "D:\App\App.csproj":
Skipping target "ExecuteT4Templates" because all output files are up-to-date with respect to the input files.
Input files: D:\App\App.exe\\App_Config\Configuration.tt;D:\App\App.exe\\App_Config\Debug.App.tt;obj\\Debug.t4lastbuild
Output files: D:\App\App.exe\\App.config
Done building target "ExecuteT4Templates" in project "App.csproj".: (TargetId:144)
3
Sergio Rykov

VS2012でこれに遭遇していました-ビルドサーバーにWeb開発者ツールをインストールすることになり、それが修正されました。

1
bryanjonker

Brian Hincheyの回答に加えて、ビルドエージェント(この場合はTeamCity)の正しいバージョンとパスがMicrosoft.WebApplication.targetsになるように、追加のパラメーターVisualStudioVersionを使用してmsbuildバッチ呼び出しを追加する必要があることもわかりました呼ばれた。このパラメーターがないと、Webの展開と公開のステップが完了せず、コード0が返されてバッチが正常に完了し、/ verbosityフラグがビルドの「デバッグ」に追加されていても、分析が非常に困難になりました。この点は、SAYED IBRAHIM HASHIMIのサイトで述べられています。 http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx

私のケースのシナリオは、VS2010または2012でプロジェクトを開くことができるように、MVC WebプロジェクトでVisual Studioの互換性を有効にしていたことです(上記のリンクのSayedによると)-VS2012でローカルに開発しています。一方、TeamCityビルドエージェントには、VS 2010 Webビルドおよびデプロイターゲットがあります。

1
Steve O