Visual studio VSTS:如何在VisualStudio构建步骤中处理多个项目的文件系统WebPublishMethod

Visual studio VSTS:如何在VisualStudio构建步骤中处理多个项目的文件系统WebPublishMethod,visual-studio,msbuild,visual-studio-2017,azure-devops,azure-pipelines,Visual Studio,Msbuild,Visual Studio 2017,Azure Devops,Azure Pipelines,我有一个包含两个基本(不是MVC或.NETCore)ASP.NETWeb应用程序的解决方案,以及它们所依赖的几个库 我在VSTS中有一个包含Visual Studio生成步骤的生成定义,该步骤使用MSBuild生成解决方案 默认的MSBuild参数集将每个web应用程序打包到单个文件中,通过批处理文件进行部署: /p:DeployOnBuild=true/p:WebPublishMethod=Package/p:PackageAsSingleFile=true/p:SkipinValidConf

我有一个包含两个基本(不是MVC或.NETCore)ASP.NETWeb应用程序的解决方案,以及它们所依赖的几个库

我在VSTS中有一个包含Visual Studio生成步骤的生成定义,该步骤使用MSBuild生成解决方案

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

/p:DeployOnBuild=true/p:WebPublishMethod=Package/p:PackageAsSingleFile=true/p:SkipinValidConfiguration=true/p:PackageLocation=“$(build.artifactstagingdirectory)\\”

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

因此,我将这些参数更改为:

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

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


有没有一种方法可以将某种参数化的URL传递给
publishUrl
,这样两个网站就可以放在不同的文件夹中?或者我必须为每个项目分别执行MSBuild步骤吗?

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

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

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

$(PublishBaseUrl)\$(MSBuildProjectName)\

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

这是使用vs 2015还是vs 2017构建的?@MartinUllrich:2017Oh绝对精彩,谢谢。工作得很好。我没有想到使用项目属性文件。如果您的解决方案不是项目文件的根目录,则需要将目录.Build.props放置在项目文件的根文件夹中,而不是解决方案文件夹中。