使用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
3 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
您的问题似乎是该文件未发布,并且与运行时发生的情况无关。
如果您在dotnet publish
本地运行,您可能会看到相同的行为,但发布文件夹中可能缺少该文件。
至于为什么它没有被发布,我不是这方面的专家,但这个答案可能会有所帮助:ASP.NET Core:在发布时排除或包含文件
慕慕森
TA贡献1856条经验 获得超17个赞
对于那些遇到此问题但对于.js文件(或类似)的人,请确保您environment在View.
默认示例是这样的:
<environment exclude="Development">
<script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>
所有工作都在site.js NOT 中完成site.min.js。发布将使用与environment您正在开发的内容不同的内容,这会对您的结果产生影响。
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
尝试:
XmlDocument doc = new XmlDocument();
doc.Load(_env.ContentRootPath + "\\xml\\file.xml", FileMode.Open);
- 3 回答
- 0 关注
- 236 浏览
添加回答
举报
0/150
提交
取消