无法生成简单的 .NET Core 控制台和类库项目 - 缺少系统命名空间



我从 https://www.microsoft.com/net/learn/get-started/windows 下载了 .NET Core SDK,并使用 Core 版本 2 的dotnet new console创建了一个简单的控制台应用程序,但是当我使用dotnet build构建它时,我在"找不到类型或命名空间'System'"和"未定义预定义类型'System.String'"之间出现 26 个构建错误(后者有一些变化,但它们都源自系统命名空间(。我检查了 csproj-文件,但找不到任何异常的东西(我不希望否则,因为所有文件都是由 dotnet 生成的(:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
</Project>

我也尝试打电话给dotnet restore但这返回了消息Restore completed in 34.26 ms for c:Developmentfoofoo.csproj.所以显然这里没有任何问题。如果我在项目目录中运行dotnet --info,我会得到以下信息:

.NET Command Line Tools (2.1.200)
Product Information:
Version:            2.1.200
Commit SHA-1 hash:  2edba8d7f1
Runtime Environment:
OS Name:     Windows
OS Version:  10.0.17134
OS Platform: Windows
RID:         win10-x64
Base Path:   C:Program Filesdotnetsdk2.1.200
Microsoft .NET Core Shared Framework Host
Version  : 2.0.7
Build    : 2d61d0b043915bc948ebf98836fefe9ba942be11

我使用带有dotnet new classlib的类库成功地重现了该问题。我还有第二台安装了dotnet的笔记本电脑,幸运的是,我能够在该笔记本电脑上生成一个类库,而不会出现任何编译错误。然后,我使用 WinMerge 比较了这两个项目,这就是我发现的 - 我将用 (a( 引用工作项目,用 (b( 引用错误的项目:

  • obj\[projectname].csproj.nuget.g.props 中的 NuGetToolVersion 部分是 (a( 中的 4.4.0 和 (b( 中的 4.7.0
  • NETStandard.Library 是 (a( 中的 2.0.0 和 (b( 中的 2.0.1 英寸
  • obj\[projectname].csproj.nuget.g.targets 中的 ImportGroup 部分在 (b( 中缺失
  • obj\project.assets.json 中 "NETStandard.Library/2.0.*" 下的 "build" 键在 (b( 中缺失
  • obj\project.assets.json 中 "NETStandard.Library/2.0.*" 下的 "files" 键缺少 (b( 中的所有.dll引用
  • obj\project.assets.json 中"框架"下的"版本"键在 (a( 中设置为"2.0.0",在 (b( 中设置为"[2.0.1, ("。(b( 中的值不是拼写错误 - 这显然是无效语法。

我的猜测是,最后 4 个差异是罪魁祸首,但我不知道如何解决它或为什么会发生这种情况。这可能是 dotnet 的类库项目模板中的错误,但我仍然对此表示怀疑。

我应该说我在新恢复的笔记本电脑上安装了.NET Core SDK,所以我怀疑这个问题很简单,但我还没有找到它。有谁知道为什么会发生这种情况或我应该检查什么?

不幸的是,我只能通过完整的操作系统还原(无论如何都安排了(来解决问题。在我写这篇文章时,我正在运行dotnet版本2.1.401,并且此后没有遇到这个问题,所以我将此回复发布到社区wiki。

有关GitHub问题的详细信息 https://github.com/dotnet/cli/issues/9353

最新更新