2017-08-25 105 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

相關問題