ASP.NET 5发布的输出不提供来自wwwroot

时间:2015-12-31 19:33:54

标签: c# asp.net-core-mvc dnu

我在发布的MVC 6 Web应用程序版本上遇到了很多麻烦。从Visual Studio运行时它可以正常工作,但是从已发布的输出运行时,不会从wwwroot文件夹中读取静态文件。

我知道我应该在我的问题中包含代码示例。这是很多代码,涉及将我在Visual Studio中的解决方案与已发布的输出进行比较。对于我的代码示例,我创建了一个GitHub repo来重现这个: https://github.com/TimothyK/Mvc6ServiceEg

该项目基本上是ASP.NET 5 Web应用程序的File-New Project。但是,最终我想让我的项目作为自托管Windows服务运行。所以这个项目中有一些代码最终会让它作为Windows服务运行并手动调用默认的Startup类。此代码摘自本文:http://taskmatics.com/blog/host-asp-net-in-a-windows-service/。除了默认的“web”命令之外,代码还会创建一个名为“run”的DNX命令。

根据readme.md文件,BuildScripts \ Publish.bat文件将为要运行的项目创建一个自包含文件夹。运行Publish.bat脚本后,可以使用C:\ publish \ Mvc6ServiceEg \ approot \ run.cmd运行自托管Web服务器。

以这种方式运行时,不会按预期从Web服务器提供静态文件。您可以通过浏览http://localhost:5000/images/Banner-02-VS.png来重现这一点。如果从Visual Studio运行Web应用程序,则可以正常工作,但如果从已发布的run.cmd文件运行,则会出现404错误。

我已经弄清楚出了什么问题,但我不知道如何修复它。原因是Web服务器未映射到正确的文件夹。静态文件应该从C:\ publish \ Mvc6ServiceEg \ wwwroot文件夹托管,该文件夹包含images \ Banner-02-VS.png文件。

Web服务器实际托管来自C:\ publishMvc6ServiceEg \ approot \ packages \ Mvc6ServiceEg \ 1.0.0 \ root的静态文件。您可以通过浏览到该文件夹​​中存在的http://localhost:5000/Project_Readme.html来证明这一点。

在已发布的输出中有一个hosting.json文件,它应该告诉Web服务器webroot是wwwroot文件夹。但是,Web应用程序的run.cmd执行路径似乎并不尊重它。

任何人都可以告诉我为什么这不正确映射?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您是否安装了Nuget软件包的静态文件? http://www.nuget.org/packages/Microsoft.AspNet.StaticFiles/

根据您开始使用的模板,可能已经或可能尚未启用(不是'空的')