【问题标题】:dotnet build throwing nullreference exceptiondotnet 构建抛出空引用异常
【发布时间】:2023-03-13 12:35:01
【问题描述】:

我有一个可以在本地构建和运行良好的项目。但是,当我将它推送到我的服务器(Windows Server 2012 R2)时,它无法构建。它没有给我任何关于它为什么失败的细节。即使我添加了详细标志。

PS C:\projectroot> dotnet -v build

遥测:已启用

对象引用未设置为对象的实例。

我在事件日志中看不到任何内容。我还有其他地方可以查找错误信息以缩小范围吗?还有其他想法吗?

我怀疑它可能缺少一些依赖项,因为它在本地工作,但不知道在哪里可以找到它。

这是我的 project.json 的副本。在找到单独构建项目的解决方法之前,我尝试了几种组合方式。

{
"webroot": "wwwroot",
"userSecretsId": "secret",
"version": "1.0.0-*",
"dependencies": {
    "Microsoft.AspNetCore.Mvc.Core": "1.0.1",
    "Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.1",
    "Microsoft.AspNetCore.Identity": "1.0.0",
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.Extensions.Configuration.Abstractions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
    "Microsoft.EntityFrameworkCore": "1.0.1",
    "AutoMapper": "4.1.1",
    "MyApp.Domain": "1.0.0-*",
    "MyApp.Configuration": "1.0.0-*",
    "MyApp.Data": "1.0.0-*",
    "MyApp.Data.EF6": "1.0.0-*",
    "MyApp.Services": "1.0.0-*",
    "MyApp.Services.ETL": "1.0.0-*",
    "Scrutor": "1.3.1",
    "System.Linq": "4.0.0",
    "HtmlSanitizer": "3.2.105",
    "Microsoft.AspNet.Identity.Core": "2.2.1",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.EntityFrameworkCore.Design": {
        "type": "build",
        "version": "1.0.0-preview2-final"
    },
    "Microsoft.EntityFrameworkCore.Tools": {
        "type": "build",
        "version": "1.0.0-preview2-final"
    }
},
"tools": {
    "BundlerMinifier.Core": "2.0.238",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
},
"frameworks": {
    "net461": {
    }
},
"publishOptions": {
    "include": [
        "wwwroot",
        "Views",
        "Areas/**/Views/**/*.cshtml",
        "web.config",
        "config.json",
        "logs",
        "Aspose.Pdf.lic"
    ]
},
"scripts": {
    "prepublish": [
        "npm install",
        "bower install",
        "gulp clean",
        "gulp min"
    ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
},
"buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "compile": {
        "exclude": [
            "wwwroot",
            "node_modules",
            "bower_components"
        ]
    }
},
"runtimeOptions": {
    "configProperties": {
        "System.GC.Server": true
    }
}

}

【问题讨论】:

  • 你能构建任何其他项目吗,例如你的服务器上有任何你好世界吗?你能发布你得到的完整输出吗?你能发布你的 project.json 的内容吗?
  • 是的。我可以构建一个使用 dotnet new 创建的项目。我实际上取得了一些进展。我发现如果我单独构建所有项目,按照依赖顺序,它就会成功。因此,该错误似乎与引用尚未构建的项目有关。所以我现在有一个解决方法,但这对我来说似乎是一个错误。以上是完整的输出。这就是使故障排除变得如此困难的原因。甚至没有要继续的堆栈跟踪。如果您仍然认为它相关,我可以在回到我的计算机时发布 project.json。
  • 您在服务器上安装了哪些 .Net Core 内容?运行时/SDK 等。你能澄清一下你的解决方案结构是什么,这样我就可以在我的机器上复制这个问题。
  • 我安装了此处列出的 VS Update 3 和 Core 1.0.1 - microsoft.com/net/core#windows。我在上面添加了我当前 project.json 的副本。从那里您可以看到 Web 项目引用了其他几个项目(带有 MyApp 前缀)。谢谢您的帮助。我确实想澄清一下,目前单独构建项目的解决方法对我有用。我只是将它们全部编写为以正确的顺序构建。因此,目前这并不紧急。虽然我很好奇原因是什么,或者它是否是一个值得报告的错误。

标签: asp.net .net asp.net-core .net-core


【解决方案1】:

您是否尝试在运行之前清理项目?因为在您自己的笔记本电脑/工作站中构建时的“缓存”文件可能已在服务器上重复使用。

在你的 project.json 中,

我注意到您使用的是 461 框架。不确定 .NET Core 是否也使用它,因为我一直在使用它

 "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
}

【讨论】:

  • 我没有打扫。是否有相当于“dotnet clean”的东西?还是您建议我手动检查并尝试删除内容?
  • 项目源代码正在从源代码控制直接下拉到服务器。因此,不应预先构建或缓存任何非外部依赖项。我还在构建之前运行“dotnet restore”以获取外部依赖项。目标框架 4.6.1 是有意的。您是在暗示我引用它的方式可能不正确吗?
  • 如果框架引用不正确,我希望它根本不会构建或运行。甚至在本地。
猜你喜欢
  • 2021-04-29
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多