2017-08-25 85 views
4

我有一个包含两个基本(不是MVC或.Net Core)ASP.Net Web应用程序以及它们所依赖的一些库的解决方案。VSTS:如何处理Visual Studio中的FileSystem WebPublishMethod构建多个项目的步骤

我在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步骤?

+0

这是使用vs 2015还是vs 2017构建的? –

+0

@MartinUllrich:2017 – Paul

回答

3

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

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

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

这允许您设置/p:PublishBaseUrl="$(build.artifactstagingdirectory)\\"作为参数,而不是的PublishUrl和项目名称将被追加到路径。

+0

哦,绝对精彩,谢谢。完美工作。我没有想到使用项目属性文件。 – Paul

相关问题