9

さて、これは素晴らしいバグです。2012TFSサーバーでMSBuildを実行する2012ソリューションがあります。ビルドプロセステンプレートの[MSBuild引数]フィールドに渡されるパラメーターは次のとおりです。

/ p:DeployOnBuild = true / p:PublishProfile = ProfileForProjectA / p:PublishProfile = ProfileForProjectB / p:VisualStudioVersion = 11.0

そして、TFSから返されるエラーは...です。

C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.targets(4435):PublishProfileの値は「ProfileForProjectA」に設定されています。 C:\ Builds \ 1 \ Solution \ Solution \ Sources \ Solution \ ProjectB \ Properties \ PublishProfiles \ProfileForProjectA.pubxml'が見つかりませんでした。

つまり、ビルドサーバーは、各公開プロファイル(* .pubxml)が各PublishProfilesフォルダーにあることを想定しているように見えます。両方のプロジェクトの公開方法は「ファイルシステム」です。

私にとってそれを解決する唯一のことは、ProfileForProjectAをProjectBのPublishProfilesフォルダーに追加することであり、その逆も同様ですが、それはあまり洗練された解決策ではないようです。誰かがこの振る舞いを再現できますか?誰かがもっとエレガントな修正を持っていますか?私は何かが足りないのですか?

前もって感謝します。

4

1 に答える 1

16

コマンドラインからプロパティを渡す場合、それらはグローバルMSBuildプロパティです。そのため、それらは.slnファイル内の各プロジェクトに渡されます。これらの特定のプロパティに応答するのはWebプロジェクトだけです。

シナリオでは、.slnファイルでビルドおよび公開する2つのプロジェクトがある場合、同じ名前(「MyProfile」など)で各Webプロジェクトにプロファイルを作成する必要があります。同じ情報を含める必要はなく、それぞれ独自の設定セットを持つことができます。彼らはただ名前を共有する必要があります。

次に、ビルドするとき。

msbuild.exe mysolution.sln /p:DeployOnBuild=true /p:PublishProfile=MyProfile /p:VisualStudioVersion=11.0

各Webプロジェクトがビルドされると、そのプロジェクトのMyProfileの公開プロセスが呼び出されます。

PublishProfileに異なる値を指定するシナリオがある場合は、.slnファイルをビルドする代わりにMSBuildスクリプトを作成する必要があります。あなたがそれを解決することができるいくつかの異なる方法がありますが、それらはすべていくつかのMSBuildを含みます。

免責事項

ライブサーバーにはこの手法を使用しないでください... ただし、最終的な公開の前に中間の場所に公開する場合は便利です。

ソリューションで複数のプロジェクトをビルドして公開する場合、一方のプロジェクトがビルドされていないときに、もう一方のプロジェクトを公開することができます。これは、公開プロセスが実際にはビルドプロセスの拡張であるためです。これが例です。

ソリューションにProjectAとProjectBがあり、上記のプロパティを使用してビルドすると、ProjectAが呼び出され、ビルドおよび公開されます。次に、ビルドして公開するProjectBに移動します。ProjectBのビルドは失敗する可能性があり、ProjectAはすでに公開されているはずです。

于 2013-01-09T09:14:04.333 に答える