2017-08-12 71 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

完美!这是诀窍! –

相关问题