使用 ASP.NET Core 2.1 发布到 Azure 后无法加载静态文件

使用ASP.NET Core 2.1,我尝试在我的开发机器上本地加载相同的静态文件(通过 Visual Studio 2017),并在网站发布到托管环境(Azure Web Apps)之后。


考虑file.xml要提供的静态文件 ( ) 驻留在 Web 根目录中的目录层次结构:


wwwroot

    css

    images

    js

    xml

        file.xml

这是我加载文件的控制器:


public class DevelopmentController : Controller

{

    private readonly IHostingEnvironment _env;

    public DevelopmentController(IHostingEnvironment env)

    {

        _env = env;

    }


    public async Task<string> Test()

    {

        string result = "";


       // Test Code Here

        XmlDocument doc = new XmlDocument();

        doc.Load(Path.Combine(_env.WebRootPath, "xml", "file.xml"));


        return result;

    }

}

这会在我的开发机器上本地加载文件,但是,一旦将 Web 应用程序发布到 Azure,我就会收到以下错误:


DirectoryNotFoundException: 找不到路径“D:\home\site\wwwroot\wwwroot\xml\file.xml”的一部分


无论我尝试什么,在文件发布到 Azure 后,我似乎都无法加载它。


注意:在 中ASP.NET MVC 5,我曾经能够使用该Server.MapPath()函数加载一个静态文件,该文件在本地和 Azure 中都可以使用。例如:


doc.Load(System.Web.HttpContext.Current.Server.MapPath("~/xml/file.xml"));

但是自从升级到ASP.NET Core 2.1.


这些是 Microsoft Docs,我用作参考:https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-2.1&tabs=aspnetcore2x


交互式爱情
浏览 237回答 3
3回答

炎炎设计

您的问题似乎是该文件未发布,并且与运行时发生的情况无关。如果您在dotnet publish本地运行,您可能会看到相同的行为,但发布文件夹中可能缺少该文件。至于为什么它没有被发布,我不是这方面的专家,但这个答案可能会有所帮助:ASP.NET Core:在发布时排除或包含文件

慕慕森

对于那些遇到此问题但对于.js文件(或类似)的人,请确保您environment在View.默认示例是这样的:<environment exclude="Development">&nbsp; &nbsp; <script src="~/js/site.min.js" asp-append-version="true"></script></environment>所有工作都在site.js NOT 中完成site.min.js。发布将使用与environment您正在开发的内容不同的内容,这会对您的结果产生影响。

梵蒂冈之花

尝试:XmlDocument doc = new XmlDocument();doc.Load(_env.ContentRootPath + "\\xml\\file.xml", FileMode.Open);
打开App,查看更多内容
随时随地看视频慕课网APP