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

时间:2018-08-31 14:42:08

标签: c# asp.net azure asp.net-core azure-web-sites

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

请考虑将要提供的静态文件(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以来,我不知道执行此操作的正确方法,当托管在Azure上时也可以使用。

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

更新

如果其他任何人遇到相同的问题,这就是问题所在:

如果将文件夹拖放到Solution Explorer中,则引用不会自动添加到.csproj文件中。

您可以通过右键单击项目并选择.csproj来检查Edit {Project Name}.csproj文件。对于您添加到wwwroot目录中的所有其他文件夹,您应该会看到类似以下内容的

<ItemGroup>
    <Folder Include="wwwroot\myfolder\" />
</ItemGroup>

如果您看不到它,那么它将不会发布到Azure。

注意:如果看到<None ...,则表明该文件夹已设置为排除发布。

<ItemGroup>
    <None Include="wwwroot\myexcludedfolder\"
</ItemGroup>

解决方案

我刚刚删除了拖放到Solution Explorer中的文件夹,而是右键单击wwwroot以这种方式创建该文件夹。

3 个答案:

答案 0 :(得分:1)

看来您的问题是此文件未发布,并且与运行时发生的情况无关。

如果在本地运行/*=========================================================== ' Error Codes '===========================================================*/ public const int SCARD_F_INTERNAL_ERROR = -2146435071; public const int SCARD_E_CANCELLED = -2146435070; public const int SCARD_E_INVALID_HANDLE = -2146435069; public const int SCARD_E_INVALID_PARAMETER = -2146435068; public const int SCARD_E_INVALID_TARGET = -2146435067; public const int SCARD_E_NO_MEMORY = -2146435066; public const int SCARD_F_WAITED_TOO_LONG = -2146435065; public const int SCARD_E_INSUFFICIENT_BUFFER = -2146435064; public const int SCARD_E_UNKNOWN_READER = -2146435063; public const int SCARD_E_TIMEOUT = -2146435062; public const int SCARD_E_SHARING_VIOLATION = -2146435061; public const int SCARD_E_NO_SMARTCARD = -2146435060; public const int SCARD_E_UNKNOWN_CARD = -2146435059; public const int SCARD_E_CANT_DISPOSE = -2146435058; public const int SCARD_E_PROTO_MISMATCH = -2146435057; public const int SCARD_E_NOT_READY = -2146435056; public const int SCARD_E_INVALID_VALUE = -2146435055; public const int SCARD_E_SYSTEM_CANCELLED = -2146435054; public const int SCARD_F_COMM_ERROR = -2146435053; public const int SCARD_F_UNKNOWN_ERROR = -2146435052; public const int SCARD_E_INVALID_ATR = -2146435051; public const int SCARD_E_NOT_TRANSACTED = -2146435050; public const int SCARD_E_READER_UNAVAILABLE = -2146435049; public const int SCARD_P_SHUTDOWN = -2146435048; public const int SCARD_E_PCI_TOO_SMALL = -2146435047; public const int SCARD_E_READER_UNSUPPORTED = -2146435046; public const int SCARD_E_DUPLICATE_READER = -2146435045; public const int SCARD_E_CARD_UNSUPPORTED = -2146435044; public const int SCARD_E_NO_SERVICE = -2146435043; public const int SCARD_E_SERVICE_STOPPED = -2146435042; public const int SCARD_W_UNSUPPORTED_CARD = -2146435041; public const int SCARD_W_UNRESPONSIVE_CARD = -2146435040; public const int SCARD_W_UNPOWERED_CARD = -2146435039; public const int SCARD_W_RESET_CARD = -2146435038; public const int SCARD_W_REMOVED_CARD = -2146435037; ,则可能会看到相同的行为,而发布文件夹中可能缺少该文件。

关于为什么尚未发布,我不是该部分的专家,但是此答案可能会有所帮助:ASP.NET Core: Exclude or include files on publish

答案 1 :(得分:0)

尝试:

XmlDocument doc = new XmlDocument();
doc.Load(_env.ContentRootPath + "\\xml\\file.xml", FileMode.Open);

答案 2 :(得分:0)

对于遇到此问题但对于.js个文件(或类似文件)的用户,请确保在environment中正确设置了View

默认示例为:

<environment exclude="Development">
    <script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>

所有工作都在site.js中完成, site.min.js。发布将使用与开发中不同的environment,这会对您的结果产生影响。