VSTS:如何在具有多个项目的Visual Studio构建步骤中处理FileSystem WebPublishMethod

时间:2017-08-25 10:54:34

标签: visual-studio msbuild visual-studio-2017 azure-devops azure-pipelines

我的解决方案包含两个基本(非MVC或.Net Core)ASP.Net Web应用程序,以及它们所依赖的一些库。

我在VSTS中有一个构建定义,其中包含一个Visual Studio Build步骤,该步骤使用MSBuild构建解决方案。

默认的MSBuild参数集将每个Web应用程序打包成一个文件,通过批处理文件进行部署:

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

我无法使用此方法,并要求将网站发布到文件系统,以便现有脚本可以进行部署。

因此我将这些论点改为:

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

这确实将两个网站发布到了文件系统,但问题是它将它们放在同一个文件夹中。

有没有办法将某种类型的paramaterised网址传递给publishUrl,这样两个网站最终可以放在不同的文件夹中?或者我必须为每个项目单独制作一个MSBuild步骤吗?

1 个答案:

答案 0 :(得分:9)

您需要在项目中添加额外的构建逻辑,只需在一次调用中执行此操作。

您可以在解决方案的根目录中创建Directory.Build.props文件(以便所有Web项目都位于目录层次结构中),其中包含以下内容:

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

这允许您将/p:PublishBaseUrl="$(build.artifactstagingdirectory)\\"设置为参数而不是PublishUrl,项目名称将附加到路径中。