0

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

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

该项目基本上是 ASP.NET 5 Web 应用程序的 File-New 项目。但是,最终我想让我的项目作为自托管的 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 执行路径似乎并不尊重这一点。

谁能告诉我为什么这不能正确映射?提前致谢。

4

1 回答 1

0

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

根据您开始使用的模板,它可能已启用也可能尚未启用(它不是“空”模板)

于 2016-01-08T09:59:40.070 回答