Msbuild 预定义类型';System.Void';在ASP.NET 5的Visual Studio联机生成期间未定义或导入

Msbuild 预定义类型';System.Void';在ASP.NET 5的Visual Studio联机生成期间未定义或导入,msbuild,asp.net-core,azure-web-app-service,tfsbuild,azure-devops,Msbuild,Asp.net Core,Azure Web App Service,Tfsbuild,Azure Devops,当我尝试在Visual Studio Online中生成项目时,出现以下错误: 前端\src\Frontend\Startup.cs(65,49):错误CS0518:未定义或导入预定义类型“System.Void” C:\a\1\s\Frontend\src\Frontend\Startup.cs(65,49):DNXCore,版本=v5.0错误CS0518:未定义或导入预定义类型“System.Void”[C:\a\1\s\Frontend\src\Frontend\Frontend.xpro

当我尝试在Visual Studio Online中生成项目时,出现以下错误:

前端\src\Frontend\Startup.cs(65,49):错误CS0518:未定义或导入预定义类型“System.Void” C:\a\1\s\Frontend\src\Frontend\Startup.cs(65,49):DNXCore,版本=v5.0错误CS0518:未定义或导入预定义类型“System.Void”[C:\a\1\s\Frontend\src\Frontend\Frontend.xproj]

错误似乎发生在我引用另一个库(包类库)的地方

顺便说一下,我在这里就这个问题进行了一些对话:,但毕竟没有答案,所以我仍然无法构建它

Web 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": { }
},
Library 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”文件后,才复制了这个问题

原始代码(构建成功):

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


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

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


我不得不从project.json中删除“System.Xml.XDocument”:“4.0.10”以解决我自己的问题,我重新构建了整个解决方案,错误就消失了

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

在导致此错误的行上找到方法的定义,并更新依赖项,为我解决了此问题。

我的问题是,我对resharper导入建议过于满意,这导致在项目删除它会清除所有内容。

我认为您缺少对“System.Runtime”包的依赖关系。我应该在哪里拥有此依赖关系?默认情况下,它不在web项目的project.json中,它存在于coreclr中,但不存在于库中的clr中。顺便说一句,所有东西都是在VS中本地构建的。你能分享project.json文件中的“依赖项”和“框架”部分吗?我已经将其添加到帖子中,因为R#问题,我已经更改了库目标框架以匹配web框架(在其他方面,它们并不相同),但我试着把它改回去,也没用。我想它无论如何都应该能与这些web目标一起正常工作,因为据我所知,它们的限制性更大。恐怕我在Prebuild.ps1:Get ChildItem-Path$PSScriptRoot\src-Filter project.json-Recurse | ForEach Object{&dnu restore$\ FullName 2>1}中有完整的\src@IlyaChernomordik然后检查构建日志,查看库项目的project.json文件是否已还原。让我检查一下,是否是我的项目结构导致了它?我有一个项目在\Frontend中,另一个(库)不在同一文件夹中,但在\Common中\Library@IlyaChernomordik对默认情况下,web项目和库项目都放在“src”文件夹下。因此,PreBuild.ps1脚本可以在默认情况下为它们恢复project.json。如果库项目放置在其他位置,则默认情况下,project.json文件不会使用该脚本还原。我想这就是问题所在。。。关于如何做到这一点的手册并没有真正提到这些细节。。。我确实把它放在一个公共文件夹中,因为它是一个库,将在不同的解决方案之间重用,所以它不太正确。。。在我的日志中有这样一句话:“还原C:\a\1\s\Frontend\src\Frontend\project.json的包”,但对于另一个,我想我必须修改一下脚本。公平地说,我刚才遇到了同样的问题(唯一的区别是我使用的是visual studio的桌面版)重建整个解决方案确实解决了“错误”。这个建议在某种程度上是有道理的。。。我担心这个问题只是由于VS在“错误缓存”方面的一些错误造成的。我对“错误缓存”进行了清理、重建,然后重新启动Visual Studio
Get-ChildItem -Path $PSScriptRoot\src -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }
Get-ChildItem -Path $PSScriptRoot\src\WebProjectName -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }