2015-12-31 24 views
0

我對已發佈版本的MVC 6 Web應用程序有很大的麻煩。從Visual Studio運行時它工作正常,但是從發佈的輸出運行時,靜態文件不會從wwwroot文件夾中讀取。ASP.NET 5發佈的輸出不提供來自wwwroot的文件

我知道我應該在我的問題中包含代碼示例。這是很多代碼,涉及將我在Visual Studio中的解決方案與發佈的輸出進行比較。對於我的代碼示例,我創建了一個GitHub庫,它可以再現這個問題: ​​。

該項目基本上是ASP.NET 5 Web應用程序的File-New Project。但是,最終我想讓我的項目作爲自託管的Windows服務運行。所以這個項目中有一些代碼最終會讓它作爲Windows服務運行並手動調用默認的啓動類。此代碼摘自本文: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執行路徑似乎並不尊重這一點。

誰能告訴我爲什麼這個映射不正確?提前致謝。

+0

您運行的是什麼版本的DNX的? 'rc1'? –

+0

是的。我正在使用1.0.0-rc1-update1。它在構建腳本中:https://github.com/TimothyK/Mvc6ServiceEg/blob/master/BuildScripts/Publish.bat。 –

回答

0

您是否安裝了靜態文件Nuget包? http://www.nuget.org/packages/Microsoft.AspNet.StaticFiles/

取決於哪個模板你開始這可能會或可能不會已經被啓用(這是不是與「空」之一)

+0

是的,安裝了靜態文件(https://github.com/TimothyK/Mvc6ServiceEg/blob/master/src/Mvc6ServiceEg/project.json#L13)。它只是從錯誤的文件夾中提供靜態文件。它不尊重hosting.json文件中指定的文件夾。 –

相關問題