.NET Core MSTest 项目在 Microsoft 命名空间中找不到 VisualStudio 类型或命名空间

.NET Core MSTest project can't find VisualStudio type or namespace in Microsoft namespace

Microsoft Visual Studio Professional 2019 Version 16.0.0 VisualStudio.16.Release/16.0.0+28729.10

我添加了一个 .NET Core 2.2 MSTest 项目并添加了依赖项:

我编译并得到这个错误:

CS0234  The type or namespace name 'VisualStudio' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) ...\packages\microsoft.net.test.sdk.2.0\build\netcoreapp1.0\Microsoft.NET.Test.Sdk.Program.cs

Microsoft.NET.Test.Sdk.Program.cs

// <auto-generated> This file has been auto generated. </auto-generated>
using System;
[Microsoft.VisualStudio.TestPlatform.TestSDKAutoGeneratedCode]
class AutoGeneratedProgram {static void Main(string[] args){}}

一些观察:

  1. 项目是 .NET Core 2.2 但它使用的包来自 netcoreapp1.0 文件夹
  2. NuGet 包管理器已成功添加包 Microsoft.NET.Test.Sdk v16.0.1 但在构建时它有一个未解决的问题 参考

The type or namespace name 'VisualStudio' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) ...\packages\microsoft.net.test.sdk.2.0\build\netcoreapp1.0\Microsoft.NET.Test.Sdk.Program.cs

如果我们使用 Microsoft.NET.Test.Sdk 包,当我们编译和构建我们的项目时,Microsoft.NET.Test.Sdk.Program.cs 也会在构建过程中被 csc.exe 编译。

因此错误消息表明 Microsoft.VisualStudio.TestPlatform.TestSDKAutoGeneratedCode 属性无法很好地识别,因为对 Microsoft.TestPlatform.ObjectModel.dll 的引用有问题。

注:

1.Microsoft.VisualStudio.TestPlatform.TestSDKAutoGeneratedCode 来自程序集 Microsoft.TestPlatform.ObjectModel.dll.

2.Microsoft.NET.Test.Sdk包依赖Microsoft.TestPlatform.TestHost包,Microsoft.TestPlatform.TestHost包依赖Microsoft.TestPlatform.ObjectModel包。

如果这些包安装成功,编译和构建应该可以进行。所以实际上我认为您安装的软件包有问题。

Some simple suggestions you can try:

1.Go Tools=>Nuget Package Manager=>Package Manager settings 以确保启用 Package Restore 的两个选项。然后删除 bin、obj 文件夹和 运行 重建。

2.If #1 不行,在 VS IDE 中尝试 clean the nuget cache by UI,然后再次删除 bin、obj 文件夹,然后 运行 重建。

3.Please 更新你的 VS IDE 到最新版本,16.0.0 太旧了,最新版本修复了一些问题。

Project is .NET Core 2.2 but it's using package from netcoreapp1.0 folder

如果你打开...\packages\microsoft.net.test.sdk.2.0\build路径下的包,你会发现这个包只有三个版本的程序集,net40,netcoreapp1.0和uap10.0。由于您的项目是 .net core 2.2,它将引用 netcoreapp1.0 文件夹中的程序集。这是预期的行为