我對已發佈版本的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執行路徑似乎並不尊重這一點。
誰能告訴我爲什麼這個映射不正確?提前致謝。
您運行的是什麼版本的DNX的? 'rc1'? –
是的。我正在使用1.0.0-rc1-update1。它在構建腳本中:https://github.com/TimothyK/Mvc6ServiceEg/blob/master/BuildScripts/Publish.bat。 –