如何使用 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 解决方案:
- .NET 标准 1.6
- .NET 4.7 xUnit 项目
不幸的是,我在 xUnit 项目中使用的包在 .NET Core xUnit 项目中不起作用,这就是我使用 .NET 4.7 项目进行单元测试的原因。
所以,我不确定如何使用 Visual Studio 团队服务来做到这一点。
之前,我只有一个 .NET Standard 项目和一个 .NET Core xUnit 项目,并且具有以下内容:
- 获取资源 (GIT)
- 恢复(.NET 核心)
- 构建(.NET 核心)
- 打包(.NET Core)
- NuGet 推送
那么 - 我该怎么做 :
- 还原 + 构建 .NET Core 项目
- 然后是 .NET 4.7 项目
- 然后 运行 .NET 4.7 项目的 xunit 测试
- 最后 pack/nuget 推送 .NET Standard 1.6 项目。
请问?
编辑:
这是我尝试执行正常 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>
这里发生了很多事情:
现在有很多方法可以创建 .NET Framework xUnit 测试项目 - 经典 .NET 项目或 "SDK-based" 项目。目前,只有 .NET Core 和 .NET Standard 项目模板(以及 "ASP.NET Core (.NET Framework" 之一)创建基于 SDK 的项目,但可以轻松更改 csproj 文件中的 TargetFramework
属性从例如 net47
netcoreapp1.1
.
默认情况下,经典项目使用 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.
中使用 PackageReference 样式
对 dotnet test
的支持由 Microsoft.NET.Test.Sdk
NuGet 包提供,旨在用于基于 SDK 的项目。此软件包包含必要的配置和 msbuild 目标,以允许通过 msbuild /t:VSTest
进行 运行ning 测试 - 这就是 dotnet test
调用的内容。经典单元测试项目不包含或引用此逻辑,并且依赖于测试 运行ner 来检测和 运行 测试(例如,使用 visual studio 安装的经典单元测试 VSTS 任务)。
尽管 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
工具功能.
我有一个包含 2 个项目的 .NET 解决方案:
- .NET 标准 1.6
- .NET 4.7 xUnit 项目
不幸的是,我在 xUnit 项目中使用的包在 .NET Core xUnit 项目中不起作用,这就是我使用 .NET 4.7 项目进行单元测试的原因。
所以,我不确定如何使用 Visual Studio 团队服务来做到这一点。
之前,我只有一个 .NET Standard 项目和一个 .NET Core xUnit 项目,并且具有以下内容:
- 获取资源 (GIT)
- 恢复(.NET 核心)
- 构建(.NET 核心)
- 打包(.NET Core)
- NuGet 推送
那么 - 我该怎么做 :
- 还原 + 构建 .NET Core 项目
- 然后是 .NET 4.7 项目
- 然后 运行 .NET 4.7 项目的 xunit 测试
- 最后 pack/nuget 推送 .NET Standard 1.6 项目。
请问?
编辑:
这是我尝试执行正常 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>
这里发生了很多事情:
现在有很多方法可以创建 .NET Framework xUnit 测试项目 - 经典 .NET 项目或 "SDK-based" 项目。目前,只有 .NET Core 和 .NET Standard 项目模板(以及 "ASP.NET Core (.NET Framework" 之一)创建基于 SDK 的项目,但可以轻松更改 csproj 文件中的
TargetFramework
属性从例如net47
netcoreapp1.1
.默认情况下,经典项目使用
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. 中使用 PackageReference 样式
对
dotnet test
的支持由Microsoft.NET.Test.Sdk
NuGet 包提供,旨在用于基于 SDK 的项目。此软件包包含必要的配置和 msbuild 目标,以允许通过msbuild /t:VSTest
进行 运行ning 测试 - 这就是dotnet test
调用的内容。经典单元测试项目不包含或引用此逻辑,并且依赖于测试 运行ner 来检测和 运行 测试(例如,使用 visual studio 安装的经典单元测试 VSTS 任务)。尽管
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
工具功能.