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

时间:2016-01-05 08:20:59

标签: msbuild asp.net-core azure-web-sites tfsbuild azure-devops

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

Frontend \ src \ Frontend \ Startup.cs(65,49):错误CS0518:未定义或导入预定义类型'System.Void' C:\ a \ 1 \ s \ Frontend \ src \ Frontend \ Startup.cs(65,49):DNXCore,Version = v5.0错误CS0518:未定义或导入预定义类型'System.Void'[C:\一个\ 1 \ S \前端\ SRC \前端\ Frontend.xproj]

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

P.S。我在这里谈到了这个问题:Easy way to build and deploy (to Azure) ASP.NET 5 in Visual Studio Team Services,但毕竟没有答案,所以我仍然无法建立它...

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的帮助!

6 个答案:

答案 0 :(得分:1)

我在更新“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文件。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

构成我的部分我必须从project.json中删除“System.Xml.XDocument”:“4.0.10”来解决问题

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

相关问题