我已经基于ASP.NET 5 beta 8 Visual Studio模板创建了一个简单的ASP.NET 5项目。
我已使用此命令发布项目
dnu publish <path to project.json> --out <path to publish folder> --configuration Release --runtime dnx-coreclr-win-x64.1.0.0-beta8 --wwwroot-out "wwwroot" --no-source
在nano服务器上运行web.cmd后,我收到此错误:
.\web.cmd : System.DllNotFoundException: Unable to load DLL 'kernel32': The specified module could not be found. (Exception from HRESULT:
0x8007007E)
+ CategoryInfo : NotSpecified: (System.DllNotFo...LT: 0x8007007E):String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
at Microsoft.AspNet.Server.Kestrel.Networking.PlatformApis.WindowsApis.LoadLibrary(String dllToLoad)
at Micros
oft.AspNet.Server.Kestrel.Networking.Libuv.Load(String dllToLoad)
at Microsoft.AspNet.Server.Kestrel.ServerFactory.Start(IFeatureCollection serverFeatures, Func`2 application)
at Microsoft.AspNet.Hosting.Internal.HostingEngine.Start()
at Microsoft.AspNet.Hosting.Program.Main(String[] args)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Dnx.Runtime.Common.EntryPointExecutor.Execute(Assembly assembly, String[] args, IServiceProvider serviceProvider)
at Microsoft.Dnx.ApplicationHost.Program.ExecuteMain(DefaultHost host, String applicationName, String[] args)
at Microsoft.Dnx.ApplicationHost.Program.Main(String[] args)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Dnx.Runtime.Common.EntryPointExecutor.Execute(Assembly assembly, String[] args, IServiceProvider serviceProvider)
at Microsoft.Dnx.Host.Bootstrapper.RunAsync(List`1 args, IRuntimeEnvironment env, String appBase, FrameworkName targetFramework)
at Microsoft.Dnx.Host.RuntimeBootstrapper.ExecuteAsync(String[] args, BootstrapperContext bootstrapperContext)
at Microsoft.Dnx.Host.RuntimeBootstrapper.Execute(String[] args, BootstrapperContext bootstrapperContext)
在Windows 10上运行时,相同的命令不会抛出此错误。该应用程序在Windows 10上运行正常。
答案 0 :(得分:1)
Nano Server没有kernel32.dll和advapi32.dll,所以没有链接到默认库的代码不起作用。您需要将代码链接到onecore.lib或安装反向转发器。反向转发器将对kernel32.dll / advapi32.dll API的调用重定向到Nano Server上可用的对应项。在某些OneCore系统上(例如Raspberry Pi 2上的Win10 IoT Core),默认情况下会安装反向转发器。在Nano Server的情况下情况并非如此,因为目标是使其尽可能小。因此,如果需要,需要手动安装反向转发器。 要将它与Asp.Net 5联系起来 - Http Platform Handler和Kestrel(或者更具体的libuv)都链接到默认的libs,因此要在Nano上运行Asp.Net 5,你需要转发器,除非你使用WebListener,它应该工作正常转发器。
答案 1 :(得分:0)
<强>假设强>
您提到此应用程序在Windows上正常运行。你是如何在Windows上运行它的?您很有可能使用dnx451
而非dnxcore50
(CoreCLR)作为目标平台。
这是一个问题,因为您要发布CoreCLR。 (--runtime dnx-coreclr-win-x64.1.0.0-beta8
),当你在本地运行时,它很有可能使用完整的.NET框架。
在Windows 10上使用CoreCLR吗?
以下是我要做的事情:尝试使用Developer Command Prompt for Visual Studio 2015
在dnx
中运行网络应用。
使用dnvm
切换到.NET的CoreCLR版本:
dnvm use 1.0.0-beta-8 -r coreclr
还原包
dnu restore
运行
dnx web
如果失败,我们知道问题是什么。如果成功,Nano可能无法提供您的代码尝试执行的本机Windows API。如果是这种情况,您必须确定导致此问题的代码并使用其他内容。
如何仅在Visual Studio中定位CoreCLR
您可以从dnx451
中删除project.json
目标,以便强制Visual Studio使用dnxcore50
(CoreCLR)版本。理想情况下,我们希望运行与我们发布的完全相同的版本/环境。