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

Ily*_*dik 8 msbuild tfsbuild azure-web-sites azure-devops asp.net-core

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

前端\ src \前端\ 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:\ a\1\s\Frontend\src\Frontend\Frontend.xproj]

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

PS我在这里有一些关于此的讨论:在Visual Studio Team Services中构建和部署(到Azure)ASP.NET 5的简单方法,但毕竟没有答案,所以我仍然无法构建它...

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": { }
},
Run Code Online (Sandbox Code Playgroud)

图书馆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"
  }
Run Code Online (Sandbox Code Playgroud)

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

问题在于我的库引用不在同一个文件夹中,并且默认情况下脚本没有在那里运行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 }
Run Code Online (Sandbox Code Playgroud)

感谢Eddie - MSFT的帮助!

小智 26

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

  • 对于它的价值,@YanSklyarenko,它给了我重新启动 VS 的想法,并且我的“system.void 未定义”错误消失了。所以,谢谢你,让·比迪 (4认同)

Tee*_*Gee 9

只需在终端中运行dotnet restore即可解决问题。


Gau*_*vsa 8

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


sup*_*nja 7

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

  • 对我来说,清理,重建,然后重新启动 Visual Studio (7认同)

Edd*_*SFT 2

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

原始代码(构建成功):

Get-ChildItem -Path $PSScriptRoot\src -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }
Run Code Online (Sandbox Code Playgroud)

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

Get-ChildItem -Path $PSScriptRoot\src\WebProjectName -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }
Run Code Online (Sandbox Code Playgroud)

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