2017-01-16 132 views
14

我想在vsts上構建一個.net核心1.1項目。該項目是在vs2017中開發的,它使用csproj而不是project.json。我已經嘗試了多種選擇,以使用託管代理(windows和linux)在vsts上構建id。Visual Studio團隊服務構建.net核心1.1

我曾嘗試以下構建步驟

Visual Studio中建立

設置爲使用VS 2017年,但我得到一個警告「的Visual Studio版本15.0' 未找到。尋找最新的版本。 「然後我得到錯誤,因爲它不能包含.net核心軟件包。

.NET核心(PREVIEW)

不能找到project.json。當我將其設置爲使用的csproj文件,它提供了一個錯誤「文件類型無法識別」

命令生成步驟

我試圖運行與命令的命令生成步驟。 「dotnet build」給出了它找不到project.json文件的錯誤。

任何人都可以構建dotnet 1.1與csproj上vsts,可以幫助我如何做到這一點?

+0

同樣在這裏。如果我找到解決方案,將回到你身邊。 –

+1

.Net CLI for。csproj項目文件格式和msbuild引擎仍處於預覽版本,它將在功能中可用。建立內部構建代理很容易,您現在可以使用內部構建代理。 –

回答

19

在Visual Studio團隊服務,去構建&釋放>構建並單擊編輯爲要更新

enter image description here

導航到構建定義選項選項卡,更改默認代理隊列託管VS2017,並保存。

Hosted VS2017

+2

這對我有用,無需運行自定義的PowerShell腳本。 –

+1

注意:如果您無法找到此選項,則必須打開新建版編輯器(仍處於預覽狀態)。 –

1

根據這個問題,使用*.csproj文件.NET的核心項目尚不支持:

https://github.com/Microsoft/vsts-tasks/issues/3311

「如果你正在使用託管代理 - 那麼工具僅存在與 工作project.json文件「

我已經嘗試過這裏的教程,但他們似乎也過時了(我甚至無法在我的機器上安裝tfx-cli): http://mattvsts.blogspot.nl/2016/11/start-building-aspnet-core-11-with-tfs.html

+0

希望很快就會解決。與此同時,病患者運行我自己的buildserver。 – Tom

+0

@VeryEvilBetty該教程不適用於Hosted Build代理。 –

4

您可以手動下載dotnet SDK並從命令行運行dotnet build。 所以它可能是這樣的:

  1. 在線PowerShell的步驟(我由彼得Groenwegen使用Inline Powershell extension):

    Invoke-WebRequest https://go.microsoft.com/fwlink/?linkid=837977 -OutFile $(System.DefaultWorkingDirectory)\dotnet.zip 
    
  2. 解壓文件步驟:

    From: $(System.DefaultWorkingDirectory)\dotnet.zip 
    To: $(System.DefaultWorkingDirectory)\dotnet 
    
  3. 還原包:

    $(System.DefaultWorkingDirectory)\dotnet\dotnet.exe restore 
    

...等等

但有一定的侷限性 - 你仍然還沒有對.NET核心安裝在生成代理機1.1,因此部分功能可能無法正常工作。至少dotnet test將會失敗,因爲它需要適當的.Net Core運行時。也可能有其他一些功能。

2

擴展@Nikolay Balakin的答案,確實不支持使用*.csproj的.NET Core項目。

您可以通過在託管構建環境中自行安裝最新的.NET核心來解決此問題。

這將允許運行dotnet restore,dotnet build,dotnet publishdotnet test。使用Inline powershell extension運行腳本。您可以鏈接到腳本,也可以以行內粘貼文本。我正在運行簽入該項目的腳本。

enter image description here

似乎每個PowerShell腳本會在它自己的環境中運行,所以路徑等不會腳本之間依然存在,因此安裝步驟和構建步驟需要組合成一個腳本。

您需要複製github中的dotnet installation script,並將自己的生成命令添加到最後。

我知道這是不是一個長期的解決方案,但我們通過假設VSTS將在不久的將來支持* .csproj的文件有道理的,我們將轉換爲使用官方的構建任務。

下面是一個示例powershell腳本,顯示了安裝腳本的最後一行以及最後的自定義構建命令。

... 
... 
Say "Installation finished" 
# this is the end of the downloaded script, add your steps after here. 

Say "Running dotnet restore AdminPortal\AdminPortal.csproj" 
dotnet restore AdminPortal\AdminPortal.csproj 

Say "dotnet publish AdminPortal\AdminPortal.csproj --configuration Release" 
dotnet publish AdminPortal\AdminPortal.csproj --configuration Release 

Say 'Zipping publish file' 

$source = $env:BUILD_REPOSITORY_LOCALPATH 
$source = $source + '\AdminPortal\bin\Release\net461\publish' 

$destination = $env:BUILD_REPOSITORY_LOCALPATH 
$destination = $destination + '\AdminPortal\bin\Release\net461\publish.zip' 

Add-Type -assembly "system.io.compression.filesystem" 
[io.compression.zipfile]::CreateFromDirectory($source, $destination) 

Say "Publish finished" 

dotnet test "AdminPortal.Tests\AdminPortal.Tests.csproj" 

Say "Test finished" 

exit 0 
+0

感謝您的解決方案!它像一個魅力一樣工作!我目前正在運行最新的dotnet核心1.1.1,並且GitHub上提供的腳本能夠正確地下載支持VS2017中新的.csproj的dotnet。因此,恢復,構建和測試例程完美運行! –

0

就我而言,我有一個.NET核心的Web應用程序和四個庫項目,所有針對完整的框架,因爲我使用的是EF 6.

我嘗試了所有的建議,在這裏他們都沒有工作。使用Visual Studio構建託管代理2017構建項目,但不輸出任何二進制文件。上面的所有選項都可以構建,但不會生成輸出文件。

閱讀我發現獲得輸出文件的唯一方法是運行dotnet publish,但這會生成一個構建錯誤,因爲nuget不能很好地恢復軟件包,而msbuild找不到它們。厭倦了試圖在一整天內工作,隨便我在VS Buid任務中啓用了「恢復Nuget包」,儘管它說它已被棄用,似乎已經解決了我的問題。

相關問題