2017-08-12 114 views
0

我有有2個項目.NET解決方案:如何使用VSTS構建包含.NET標準項目和.NET 4.7項目的.NET解決方案?

  • .NET標準1.6
  • .NET 4.7的xUnit項目

不幸的是,我使用的的xUnit項目包在.NET Core xUnit項目中不起作用,這就是爲什麼我使用.NET 4.7項目進行單元測試的原因。

所以,我不知道如何用Visual Studio Team Services做到這一點。

以前,我剛喝了.NET標準項目和.NET核心的xUnit項目,有以下幾點:

  • 獲取源代碼(GIT)
  • 還原(.NET核心)
  • 生成(.NET核心)
  • 包(.NET核心)
  • 的NuGet推

所以 - 我該怎麼辦:

  • 恢復+構建.NET核心項目
  • ,然後在.NET 4.7項目
  • ,然後運行在.NET 4.7項目的xUnit測試
  • 和最後打包/ nuget推動.NET Standard 1.6項目。

please?


編輯:

這裏就是它看起來像我的本地機器上,當我嘗試做一個正常的dotnet restore

聲明: - Hornet.Services.csproj恢復。 - Hornet.Services.Tests.csproj未找到或恢復。 - 兩個項目都在我的sln中,如上面的屏幕截圖所示。

c:\Projects\Personal\Hornet\Hornet.Services>dotnet restore 
    Restoring packages for c:\Projects\Personal\Hornet\Hornet.Services\src\Hornet.Services\Hornet.Services.csproj... 
    Generating MSBuild file c:\Projects\Personal\Hornet\Hornet.Services\src\Hornet.Services\obj\Hornet.Services.csproj.nuget.g.props. 
    Writing lock file to disk. Path: c:\Projects\Personal\Hornet\Hornet.Services\src\Hornet.Services\obj\project.assets.json 
    Restore completed in 1.42 sec for c:\Projects\Personal\Hornet\Hornet.Services\src\Hornet.Services\Hornet.Services.csproj. 

    NuGet Config files used: 
     c:\Projects\Personal\Hornet\Hornet.Services\NuGet.Config 
     C:\Users\Pure Krome\AppData\Roaming\NuGet\NuGet.Config 
     C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config 

    Feeds used: 
     https://api.nuget.org/v3/index.json 
     https://purekrome.pkgs.visualstudio.com/_packaging/Hornet-Dev/nuget/v3/index.json 

c:\Projects\Personal\Hornet\Hornet.Services> 
+0

是否有任何不起作用?只要在構建代理上安裝4.7 SDK,'dotnet' CLI工具應該能夠構建/測試/打包項目。 –

+0

它似乎沒有找到服務項目,因爲它沒有構建。 –

回答

1

有事情很多事情在這裏:

  1. 現在有許多方法可以創建一個.NET框架的xUnit測試項目 - 經典的.NET項目或「基於SDK-」項目。目前,只有.NET Core和.NET Standard項目模板(以及「ASP.NET Core(.NET Framework)」)才能創建基於SDK的項目,但csproj文件中的TargetFramework屬性很容易從以下位置更改爲net47例如netcoreapp1.1

  2. 默認情況下,傳統項目對於NuGet引用使用packages.config文件,只有nuget.exe命令行可以恢復這些類型的項目。使用PackageReference項目引用NuGet包的msbuild集成方法可以直接通過MSBuild使用msbuild /t:Restore,這是dotnet restore的作用。這意味着dotnet restore無法恢復基於packages.config的項目。請注意,即使傳統的.NET Framework項目(基於非SDK)也可以在VS 2017版本中使用PackageReference樣式> = 15.2。

  3. dotnet test的支持由Microsoft.NET.Test.Sdk NuGet包提供,旨在用於基於SDK的項目。該軟件包包含必要的配置和msbuild目標,以允許通過msbuild /t:VSTest運行測試 - 這是dotnet test所調用的。傳統單元測試項目不包含或引用此邏輯,並依賴測試運行器來檢測和運行測試(例如,使用Visual Studio安裝的經典單元測試VSTS任務)。

  4. 儘管dotnet build應該能夠構建許多經典的.NET Framework項目,但許多功能可能無法正常工作,因爲底層構建任務旨在在.NET Framework上運行,並且可能行爲不同或完全不受支持。 NET核心版本的MSBuild - 例如resx文件不能使用文件引用,程序集簽名是有限的 ,COM引用不起作用等。爲了預防或修復這些情況,請使用msbuild而不是基於dotnet的工具。 (msbuild /t:Restoremsbuild /t:Publish /p:Configuration=Releasemsbuild /t:VSTest等)

我的建議是:創建測試項目爲核心的.NET項目的xUnit,並在的csproj改變TargetFrameworknet47,這樣就可以使用所有的工具dotnet功能。

+0

完美!這是訣竅! –

相關問題