我有一个解决方案,其中包含两个基本的(不是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/