visual-studio - VSTS:如何在Visual Studio构建步骤为多个项目中处理FileSystem WebPublishMethod

标签 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

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

是否可以通过某种方式将参数化的URL传递给publishUrl,以使两个网站可以位于不同的文件夹中?还是我必须为每个项目单独执行一个MSBuild步骤?

最佳答案

您将需要在项目中添加额外的构建逻辑,只需一次调用即可完成。

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

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


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

关于visual-studio - VSTS:如何在Visual Studio构建步骤为多个项目中处理FileSystem WebPublishMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45879803/

相关文章:

visual-studio - 尝试安装 Visual Studio 2010 的 Productivity Power Tools 时出错

c# - 添加 Controller 对话框未列出外部模型类

visual-studio - 从 Visual Studio 6 中删除 SourceSafe 集成

visual-studio-2012 - 为 Windows 应用商店应用编写脚本创建程序包

visual-studio - 如何下载 Visual Studio Community Edition 2017(不是 2019)

c# - Visual Studio 2017 : <list> not showing correctly on hover (xml documentation)

c# - 在 Visual Studio 2015 中创建插件

Windows Azure 管道中的 python setup.py build_ext

msbuild - VS2017中的新项目可以将nuget包存储在项目包目录中吗?

visual-studio-2017 - 退格键已停止在Visual Studio 2017中工作