web-dev-qa-db-ja.com

VSTS:複数のプロジェクトでVisual StudioビルドステップでFileSystem WebPublishMethodを処理する方法

2つの基本的な(MVCまたは.Net Coreではない)ASP.Net Webアプリケーションと、それらが依存するいくつかのライブラリを含むソリューションがあります。

VSTSには、MSBuildでソリューションをビルドするVisual Studioビルドステップを含むビルド定義があります。

MSBuild引数のデフォルトセットは、各Webアプリケーションを単一ファイルにパッケージ化し、バッチファイルを介してデプロイします。

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"

この方法は使用できません。また、既存のスクリプトが展開を実行できるように、Webサイトをファイルシステムに公開する必要があります。

したがって、これらの引数を次のように変更しました。

/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:publishUrl=$(build.artifactstagingdirectory)\website

これは実際に2つのWebサイトをファイルシステムに公開しますが、問題はそれらを同じフォルダー内で互いの上に配置することです。

2つのWebサイトが異なるフォルダーに配置されるように、何らかのパラメーター化されたURLをpublishUrlに渡す方法はありますか?または、プロジェクトごとにMSBuildステップを個別に作成する必要がありますか?

15
Paul

プロジェクトに追加のビルドロジックを追加する必要があります。追加するには、1回の呼び出しで行います。

ソリューションのルートディレクトリに_Directory.Build.props_ファイルを作成すると(すべてのWebプロジェクトがディレクトリ階層でその下にあるように)、次の内容を使用できます。

_<Project>
  <PropertyGroup>
    <PublishUrl Condition="'$(PublishBaseUrl)' != '' and '$(PublishUrl)' == ''">$(PublishBaseUrl)\$(MSBuildProjectName)\</PublishUrl>
  </PropertyGroup>
</Project>
_

これにより、PublishUrlの代わりに/p:PublishBaseUrl="$(build.artifactstagingdirectory)\\"をパラメーターとして設定でき、プロジェクト名がパスに追加されます。

11
Martin Ullrich