2017-08-11 60 views
0

我有一個針對.NET Framework 4.7的舊ASP.Net應用程序。這個應用程序是一個爲期五年的開發練習,非常成熟。它有相當多的支持庫項目都在同一個解決方案中。有三個用於數據庫通信的EF6項目。如何在VSTS中只包含一個構建步驟來打包混合項目解決方案?

我們已經開始轉向.NET Core,並且已經添加了一個新的.NET Core Web項目,目標是.NET Framework 4.7,因此我們可以在遷移時使用EF6項目。這一切都很好。

我們的源代碼託管在VSTS中,我們在我們的域中使用遠程構建服務器而不是Azure構建服務器。我可以成功構建沒有MSBuild參數的解決方案。但是生成部署包所需的MSBuild參數與傳統的ASP.Net應用程序和ASP.Net Core應用程序不同。所以我創建了兩個解決方案,一個是遺留項目和所有庫項目,而不是ASP.Net Core項目。另一個是ASP.Net Core項目和所有庫項目,但不包括傳統的ASP.Net項目。我還有兩個構建步驟,每個解決方案都包含每個Web項目構建部署包所需的MSBuild參數。

我想知道是否有人知道如何更改此設置,以便我只在主解決方案上有一個構建步驟。是否有任何VSTS任務會從構建中獲取輸出並創建我需要的部署包?我需要對傳統的ASP.Net項目進行web.config轉換,但.NET Core不支持這種轉換,所以我認爲這是掛起的原因。我知道有一種方法可以創建一個使用DSC和PowerShell來打包和部署所有內容的Azure部署解決方案,但這對我來說似乎有點矯枉過正。我在下面包含了兩個MSBuild設置。

傳統ASP.Net的MSBuild參數:

/P:DeployOnBuild = TRUE/P:WebPublishMethod =封裝/ P:PackageAsSingleFile = TRUE/P:SkipInvalidConfigurations = TRUE/P:PackageLocation =「$(建.artifactstagingdirectory)\應用」/p:AutoParameterizationWebConfigConnectionStrings =假

ASP.Net核心的MSBuild參數:

/p:DeployOnBuild =真/ p:WebPublishMethod =吃豆卡格/ P:PackageAsSingleFile = TRUE/P:SkipInvalidConfigurations =真/p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\RSD.zip」/P:DeployIisAppPath = 「默認Web站點」

+1

您不能擁有「.NET Core Web項目以.NET Framework 4.7爲目標」。你的意思是ASP.NET Core? – mason

+0

我能想到的唯一解決方案使得它更加「複雜」,因爲添加了一個定製的MSBuild項目文件,該文件負責CI流程,但允許在每個分支基礎上配置正確的設置,因此您不需要每次更改應用程序結構時都必須重新配置CI。這對你來說是一種選擇嗎? (類似於[CI腳本](https://gist.github.com/dasMulli/69f5303aa79a8cd4060e44891c90fd2d)) –

+0

我確實是指ASP.Net Core。對不起,我在大多數地方說過ASP.Net Core,但在我的一個引用中忽略了「ASP」。 – Brian

回答

0

您可以創建發佈爲每個具有相同名稱的項目配置文件,然後通過指定/p:DeployOnBuild=true /p:PublishProfile=[profile name]來部署具有該配置文件的項目。

請注意,您需要指定發佈配置文件中包位置的相對路徑。 (例如.... \ a \ Web1.zip)

+0

這聽起來很有希望。我會給它一個鏡頭,並檢查結果。 – Brian

+0

@Brian感覺在這裏發佈結果。 –

+0

啊,我誤解了你在說什麼。這仍然需要執行兩個獨立的構建。我想在包含所有項目的sln上執行一個構建(asp.net v4和asp.net核心v2.0,目標是net47)。從一個構建中獲取結果並將asp.net v4項目部署到一個網站,並將asp.net core 2.0項目的結果部署到一個單獨的網站。 – Brian

相關問題