我的MVC6Web应用程序的发布版本遇到了很大的麻烦。当从Visual Studio运行时,它工作得很好,但是当从发布的输出运行时,不会从wwwroot文件夹中读取静态文件。
我知道我应该在我的问题中包含代码示例。这是大量的代码,涉及到将我在Visual Studio中的解决方案与发布的输出进行比较。对于我的代码示例,我创建了一个GitHub代码库,它重现了这个代码:https://github.com/TimothyK/Mvc6ServiceEg。
该项目基本上是文件- ASP.NET 5Web应用程序的新项目。然而,最终我想让我的项目作为一个自托管的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文件夹中,该文件夹包含图像\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执行路径似乎并没有考虑到这一点。
有人能告诉我为什么这个映射不正确吗?提前谢谢。
发布于 2016-01-08 17:59:40
你安装了静态文件Nuget包吗?http://www.nuget.org/packages/Microsoft.AspNet.StaticFiles/
根据您开始使用的模板,这可能已经启用,也可能没有启用(它不是“空”模板)
https://stackoverflow.com/questions/34550897
复制相似问题