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

标签 msbuild asp.net-core azure-web-app-service 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 error CS0518: Predefined type 'System.Void' is not defined or import [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 ,但毕竟没有答案,所以我仍然无法构建它......

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

库项目.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 文件是否都已恢复。

关于msbuild - 在 ASP.NET 5 的 Visual Studio Online 构建期间未定义或导入预定义类型 'System.Void',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34607052/

相关文章:

c# - Azure 应用服务从服务间请求中删除 Jaeger HTTP header

azure - ASP.NET Core 3.1.2 应用程序无法在 Azure 应用服务中启动

php - 如何为 Azure 日志分析启用自定义 PHP laravel 日志记录

msbuild - WIX 3.5 在 NAnt 下失败,但在 VS2010 下则不然

msbuild - 如何使用 msbuild 检查项目列表中是否存在任何文件?

c# - 加载数据本地 INFILE 无法在 .net 核心上工作

azure - 如何在性能缓慢的应用程序上选择 Azure 应用程序服务计划?

c# - 创建 msbuild 脚本以使用指定的 app.config 进行构建、发布以及从不同位置进行更新

c# - 如何同时为 .Net 3.5 和 4 编译项目

c# - ASP.NET Core 2.1 在 View 中使用 HttpContext