Visual studio VSTS:如何在VisualStudio构建步骤中处理多个项目的文件系统WebPublishMethod
我有一个包含两个基本(不是MVC或.NETCore)ASP.NETWeb应用程序的解决方案,以及它们所依赖的几个库 我在VSTS中有一个包含Visual Studio生成步骤的生成定义,该步骤使用MSBuild生成解决方案 默认的MSBuild参数集将每个web应用程序打包到单个文件中,通过批处理文件进行部署: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
/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放置在项目文件的根文件夹中,而不是解决方案文件夹中。