如何使用 VSTS 构建包含 .NET Standard 项目和 .NET 4.7 项目的 .NET 解决方案?

How to use VSTS to build a .NET solution that contains a .NET Standard project and a .NET 4.7 project?

我有一个包含 2 个项目的 .NET 解决方案:

不幸的是,我在 xUnit 项目中使用的包在 .NET Core xUnit 项目中不起作用,这就是我使用 .NET 4.7 项目进行单元测试的原因。

所以,我不确定如何使用 Visual Studio 团队服务来做到这一点。

之前,我只有一个 .NET Standard 项目和一个 .NET Core xUnit 项目,并且具有以下内容:

那么 - 我该怎么做 :

请问?


编辑:

这是我尝试执行正常 dotnet restore

时在我的 LOCALHOST 机器上的样子

注意事项: - 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>

这里发生了很多事情:

  1. 现在有很多方法可以创建 .NET Framework xUnit 测试项目 - 经典 .NET 项目或 "SDK-based" 项目。目前,只有 .NET Core 和 .NET Standard 项目模板(以及 "ASP.NET Core (.NET Framework" 之一)创建基于 SDK 的项目,但可以轻松更改 csproj 文件中的 TargetFramework 属性从例如 net47 netcoreapp1.1.

  2. 默认情况下,经典项目使用 packages.config 文件作为 NuGet 引用。只有 nuget.exe 命令行可以恢复这些类型的项目。使用 PackageReference 项引用 NuGet 包的 msbuild 集成方式可以使用 msbuild /t:Restore 通过 MSBuild 直接使用,这就是 dotnet restore 所做的。这意味着 dotnet restore 无法恢复基于 packages.config 的项目。请注意,即使是经典的 .NET Framework 项目(非基于 SDK 的)也可以在 VS 2017 版本 >= 15.2.

  3. 中使用 PackageReference 样式
  4. dotnet test 的支持由 Microsoft.NET.Test.SdkNuGet 包提供,旨在用于基于 SDK 的项目。此软件包包含必要的配置和 msbuild 目标,以允许通过 msbuild /t:VSTest 进行 运行ning 测试 - 这就是 dotnet test 调用的内容。经典单元测试项目不包含或引用此逻辑,并且依赖于测试 运行ner 来检测和 运行 测试(例如,使用 visual studio 安装的经典单元测试 VSTS 任务)。

  5. 尽管 dotnet build 应该能够构建许多经典的 .NET Framework 项目,但许多功能可能无法正常工作,因为基础构建任务是 运行 在 . NET Framework 的行为可能不同,或者在 MSBuild 的 .NET Core 版本上完全不受支持——例如resx 文件不能使用文件引用,程序集签名受到限制 、COM 引用不起作用等。作为这些情况的预防措施或修复,请使用 msbuild 而不是基于 dotnet 的工具。 (msbuild /t:Restore, msbuild /t:Publish /p:Configuration=Release, msbuild /t:VSTest 等)

我的建议:将测试项目创建为 .NET Core xUnit 项目并将 csproj 中的 TargetFramework 更改为 net47 以便您可以使用所有 dotnet 工具功能.