首页 文章

ASP.NET核心 - 在Visual Studio 2015中通过Docker进行调试时出现的问题

提问于
浏览
5

在Visual Studio中使用Docker运行构建在ASP.NET Core上的应用程序时,我遇到了问题 . 我的应用程序只使用 dnxcore50 框架 . 我的project.json文件是:

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final"
  },
  "frameworks": {
    "dnxcore50": { }
  },
  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ],
  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
  }
}

我尝试了以下方法:

  • 当我的dnvm指向运行时 dnx-coreclr-win-x64.1.0.0-rc1-update1 时,如下图所示 .

enter image description here

我的应用程序成功构建但是,我在docker上运行/调试应用程序时出现以下错误,我的应用程序卡在“打开网站http://192.168.99.100:5000
enter image description here

Error details: 当前运行时框架与'app'不兼容当前运行时目标框架:'DNX,Version=v4.5.1 (dnx451)'请确保运行时与project.json中指定的框架匹配

  • 由于上面的错误消息表明框架中存在不匹配,我通过修改默认别名和执行命令 dnvm use default -p 将默认和活动运行时更改为 dnx-coreclr-linux-x64.1.0.0-rc1-update1 . 然后,我重启我的VS(以确保在VS中可以看到更改) .

enter image description here

但是,我的应用程序仍然 Build 在DNX版本v4.5.1上,如下面的构建日志中所示:

1>  Information: [LoaderContainer]: Load name=Microsoft.Dnx.Tooling
1>  Information: [PathBasedAssemblyLoader]: Loaded name=Microsoft.Dnx.Tooling in 2ms
1>  Information: [Bootstrapper] Runtime Framework: DNX,Version=v4.5.1
1>  Microsoft .NET Development Utility Mono-x64-1.0.0-rc1-16231

因此,应用程序再次无法以与第1点相同的错误运行 .

此外,在更改默认运行时dnu还原从命令行停止工作并给出以下错误:

'dnu'不被识别为内部或外部命令,可操作程序或批处理文件 .

有趣的是,'dnu'restore命令继续在VS中运行(如VS构建日志中所示) .

  • 然后我尝试将dnvm运行时更改为 dnx-mono.1.0.0-rc1-update1 . 但它失败并出现以下错误:

找不到dnx-mono.1.0.0-rc1-update1.1.0.0-rc1-update1,你需要运行'dnvm install default'吗?在C:\ Program Files \ Microsoft DNX \ Dnvm \ dnvm.ps1:1659 char:9 throw“找不到$ runtimeFullName,你需要运行'$ Com ... ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :OperationStopped :(找不到dnx ... stall default'?:String)[],运行timeException FullyQualifiedErrorId:找不到dnx-mono.1.0.0-rc1-update1.1.0.0-rc1-update1,你知道吗运行'dnvm install default'?

我需要使用什么运行时从VS运行docker以及如何更改它?请求您的帮助以解决问题 .

Update 我终于能够通过将docker文件的第一行更改为 FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr FROM microsoft/aspnet:1.0.0-rc1-update1 来解决此问题 . 谢谢@bertt的提示 .

2 回答

  • 1

    你的dockerfile的第一行是什么?对于CoreClr,应该是'FROM microsoft / aspnet:1.0.0-rc1-update1-coreclr'

  • 2

    我在stackoverflow上的类似文章中读到过这个

    问题可能是Kestrel默认只侦听localhost .

    您可能想要更改包含以下内容的dockerfile:

    ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"]
    

    或者只是修改project.json的最后一部分

    "commands": {
        "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://0.0.0.0:5000"
      }
    

    也可能有用 .

相关问题