在 ASP.NET 5 的 Visual Studio Online 构建过程中,预定义类型 'System.Void' 未被定义或导入。

26

当我尝试在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]

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

附言:我曾在这里进行过一些讨论: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": { }
},

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


1
我认为你缺少了“System.Runtime”包的依赖。 - Pawel
我应该将这个依赖项放在哪里?它不是Web项目中project.json的默认设置,它存在于coreclr中,但在库中不存在clr。顺便说一下,所有东西在VS中都可以本地构建。 - Ilya Chernomordik
你能分享一下 project.json 文件中的 "dependencies" 和 "frameworks" 部分吗? - Eddie Chen - MSFT
我已将其添加到帖子中,我已更改库的目标框架以匹配Web框架,因为R#问题(否则它无法找到它们),但我尝试将其改回来并没有帮助。我猜想这些Web目标应该能够正常工作,因为据我所知,它们只是更加严格。 - Ilya Chernomordik
16个回答

0

进入导致此错误的行的方法定义并更新依赖项,这对我解决了问题。


0
我的问题是在使用Resharper导入建议时过于心急,导致在项目中手动引用了mscorlib.dll。移除它后一切都清除了。

当我离世时,我希望墓碑上刻着“他的死因是无限次删除bin和obj文件夹,然后清理并重建解决方案”...请回来Digital和OpenVMS——一切都被原谅了... - Richard Hammond

0

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

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


0
在我的情况下,问题似乎是找不到dotnet sdk。在我的Mac上,sdks位于
/usr/local/share/dotnet/sdk
我在那里有7.0.102版本。
我调整了OmniSharp设置:
1.启用OmniSharp:使用Modern Net 2.在Omnisharp中指定dotnet版本:SDK版本,我指定了7.0.102
如果您在设置搜索栏中指定“modern”,则更容易找到这两个选项。
当我进行了这些更改后,我被提示重新启动OmniSharp,立即所有红色警告都消失了。
我没有尝试过这些设置的变化,显然指定特定的dotnet版本并不理想。

0

重启Visual Studio对我有用,自那以后我就没有遇到过那个问题。


-2
在我的情况下,我指向了错误的SDK版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接