在 Visual Studio Online 构建 ASP.NET 5 期间未定义或导入预定义类型“System.Void”

问题描述 投票:0回答:16

当我尝试在 Visual Studio Online 中构建项目时,出现此错误:

…\Frontend\Startup.cs(65,49): Error CS0518: Predefined type 'System.Void' is not defined or imported
…\Frontend\Startup.cs(65,49): DNXCore,Version=v5.0 error CS0518: Predefined type 'System.Void' is not defined or imported [C:\a\1\s\Frontend\src\Frontend\Frontend.xproj]

看来错误发生在我引用另一个库(包类库)的地方。

附注我在这里进行了一些对话:在 Visual Studio Team Services 中构建和部署(到 Azure)ASP.NET 5 的简单方法,但毕竟没有答案,所以我仍然无法构建它......

Web 项目.json:

"dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
    "Web.Common": "1.0.0-*"
},

"frameworks": {
    "dnx451": { },
    "dnxcore50": { }
},

库项目.json

"frameworks": {
    "dnx451": { },
    "dnxcore50": {
        "dependencies": {
            "Microsoft.CSharp": "4.0.1-beta-23516",
            "System.Collections": "4.0.11-beta-23516",
            "System.Linq": "4.0.1-beta-23516",
            "System.Runtime": "4.0.21-beta-23516",
            "System.Threading": "4.0.11-beta-23516"
      }
    }
  },
"dependencies": {
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final"
  }

更新(问题和解决方案):

问题在于我的库引用不在同一个文件夹中,并且默认情况下脚本不会在那里运行 dnu-restore,因此我必须向上一级并开始在那里递归查找 project.json

$SourceRoot = Split-Path -Path $PSScriptRoot -Parent

# run DNU restore on all project.json files in the src folder including 2>1 to redirect stderr to stdout for badly behaved tools
Get-ChildItem -Path $SourceRoot -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }

感谢埃迪 - MSFT 的帮助!

msbuild asp.net-core azure-web-app-service tfsbuild azure-devops
16个回答
31
投票

重新启动 Visual Studio 即可解决问题。 我就是这样。


18
投票

在我自己的问题中,我重建了整个解决方案,错误就消失了。

编辑:

这很可能是由于 NuGet 包已恢复。


15
投票

只需在终端中运行

dotnet restore
即可解决问题。


8
投票

根据我的经验,我删除了 bin 和 obj 文件夹并且它起作用了。尝试关闭 Visual Studio(如果 bin 和 obj 文件夹被锁定)。然而,对于我的同事,他删除了整个解决方案文件夹并从 TFS 获取了最新的解决方案。然后他编译并重建了解决方案并且它起作用了。


4
投票

我刚刚在具有多个 .NET Core 6 库的 Asp.NET Core 6 解决方案中遇到了这个问题。

重新启动 VS 2022 并没有解决问题。

修复了什么? 删除主项目的Bin和Obj目录的内容。然后重新启动 Visual Studio。


4
投票

我升级VS2022后遇到了这个问题,我的解决方案是:

  1. 关闭视觉工作室
  2. 删除.vs文件夹
  3. 重新启动视觉工作室
  4. 从 .sln 文件启动项目

然后一切都应该正常工作。


3
投票

请删除 bin 和 obj 文件夹并重建。


2
投票

我刚刚在更新“PreBuild.ps1”脚本中的代码以仅恢复 Web 项目的“project.json”文件后重现了此问题。

原始代码(构建成功):

Get-ChildItem -Path $PSScriptRoot\src -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }

更新的代码(构建失败:未定义或导入预定义类型“System.Void”):

Get-ChildItem -Path $PSScriptRoot\src\WebProjectName -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }

因此,您需要检查 PreBuild.ps1 脚本和 PowerShell 步骤的构建日志,以检查 Web 项目和 Library 项目的 project.json 文件是否都已恢复。


1
投票

更新 NuGet Packges 解决了我的问题。 项目 > 管理 NuGet 包 > 更新 > 全部更新


0
投票

我正在添加我自己对该错误/问题的经验。

就我而言,我必须从project.json 中删除 "System.Xml.XDocument": "4.0.10" 才能解决问题


0
投票

我的问题是对 resharper 导入建议过于满意,这导致在项目中手动引用 mscorlib.dll。删除它就清除了一切。


0
投票

我在 GIT-Extensions Pull 命令后遇到了这个错误。

解决方案中删除所有写保护属性后,问题解决。


0
投票

就我而言,问题似乎是未找到 dotnet sdk。在我的 Mac 上,sdks 位于

/usr/local/share/dotnet/sdk

我那里有版本7.0.102。

我调整了 OmniSharp 设置:

  1. 启用 OmniSharp:使用现代网络
  2. 在Omnisharp中指定dotnet版本:SDK版本,我指定的是7.0.102

如果您在设置搜索栏中指定“现代”,则更容易找到这两个选项。

当我进行这些更改时,系统提示我重新启动 OmniSharp,所有红色警告立即消失。

我还没有尝试过这些设置的变化,显然指定特定的 dotnet 版本并不理想。


0
投票

卸载并重新加载有问题的项目


-1
投票

重新启动 Visual Studio 对我有用,从那以后我就再也没有遇到过这个问题。


-2
投票

就我而言,我指向了错误的 SDK 版本

© www.soinside.com 2019 - 2024. All rights reserved.