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

19
我有一个解决方案,其中包含两个基本的(不是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```
这确实将这两个网站发布到了文件系统中,但问题是它们都放在同一个文件夹内,互相覆盖。
是否有一种方法可以向publishUrl传递某种参数化的URL,使得这两个网站最终可以放在不同的文件夹中?还是必须为每个项目分别创建一个MSBuild步骤?

这是使用VS 2015还是VS 2017构建的? - Martin Ullrich
@MartinUllrich:2017 - Paul
1个回答

19

您需要在项目中添加额外的构建逻辑,以便仅使用一次调用来完成此操作。

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

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

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


非常出色,谢谢。完美地工作了。我没有想到使用项目属性文件。 - Paul
1
如果您的解决方案不是项目文件的根目录,则需要将Directory.Build.props放置在项目文件的根目录中,而不是解决方案文件夹中。 - Kevin Dimey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接