我在使用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,如下图所示。
我的应用程序已成功构建。但是,在docker上运行/调试应用程序时,我遇到以下错误,并且我的应用程序在“打开网站http://192.168.99.100:5000”处卡住了。
错误详情: 当前的运行时框架与'app'不兼容 当前的运行时目标框架:'DNX,Version=v4.5.1 (dnx451)' 请确保运行时与project.json中指定的框架匹配
- 如上面的错误信息所示,框架存在不匹配,我通过修改默认别名并执行命令
dnvm use default -p
将默认和活动运行时更改为dnx-coreclr-linux-x64.1.0.0-rc1-update1。然后,我重新启动VS(以确保更改在VS中可见)。
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
因此,应用程序再次出现与第一点相同的错误而无法运行。
此外,更改默认运行时后,命令行中的dnu restore停止工作,并显示以下错误信息:
“'dnu'不是内部或外部命令,可执行程序或批处理文件。”
有趣的是,“dnu”还可以从VS(在VS构建日志中建议)中继续使用restore命令。
接着我尝试将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个字符: + throw "Cannot find $runtimeFullName, do you need to run '$Com ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (Cannot find dnx...stall default'?:String) [], Run timeException + FullyQualifiedErrorId : Cannot find dnx-mono.1.0.0-rc1-update1.1.0.0-rc1-update1, do you need to run 'dnvm install default'?
我需要使用哪个运行时来从VS运行docker,如何更改它?请求您的帮助解决此问题。
更新:最终我通过将docker文件的第一行更改为
FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr
FROM microsoft/aspnet:1.0.0-rc1-update1
。感谢@bertt的提示,我成功解决了这个问题。