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

Predefined type 'System.Void' is not defined or imported during Visual Studio Online build of ASP.NET 5

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

…\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\s\Frontend\src\Frontend\Frontend.xproj]

好像错误发生在我引用另一个库(包class库)的地方。

P.S。我在这里有过一些讨论:,但终究没有答案,所以我仍然无法构建它...

网络project.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": { }
},

图书馆project.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 }

感谢 Eddie - MSFT 的帮助!

我在更新 "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 项目和库项目的 project.json 文件是否都已恢复。

我正在添加我自己的经验 bug/issue。

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

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

根据我的经验,我删除了 bin 和 obj 文件夹并且它起作用了。但是,对于我的同事,他删除了整个解决方案文件夹并从 TFS 获取了最新的解决方案。然后他编译并重建了解决方案,它成功了。

转到导致此错误的行上的方法定义并更新依赖项为我解决了这个问题

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

  1. 前往编辑
  2. 点击首选项
  3. 单击重新生成项目文件

问题将得到解决。

重新启动visual studio 它将解决问题。 我就是这样。

在我的例子中,我指向了错误的 SDK 版本