我从 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