部署Azure App Service后,content目录下main.css丢失问题咨询
这问题我之前帮好几个开发者排查过,大概率是发布/构建过程中的资源处理逻辑把你的文件给重定向、合并或者排除了,结合你描述的现象,给你列几个最可能的原因和排查方向:
ASP.NET BundleConfig 自动打包合并
如果你的项目是ASP.NET(MVC/Web Forms),默认会通过App_Start/BundleConfig.cs里的配置把CSS/JS文件打包合并。发布时,系统可能把content/style下的main.css、datatable.css等文件合并到了content/css/vendor路径下的bundle文件里,原文件则不会被部署到Azure。你可以检查BundleConfig里的代码,看是否有类似bundles.Add(new StyleBundle("~/content/css/vendor").Include("~/content/style/main.css", ...))的配置,这种情况下浏览器加载的是打包后的bundle,原文件自然不会出现在开发者工具里。发布配置的文件排除规则
打开Visual Studio的发布设置(右键项目→发布→查看发布设置→文件发布选项),看看是否勾选了排除未使用的文件,这个选项可能会误判你的样式文件为“未使用”而跳过部署。另外,检查项目中main.css等文件的属性:右键文件→属性,看“复制到输出目录”是否设为了始终复制或者较新时复制,如果是“从不”,发布时这些文件根本不会被传到Azure。你也可以直接查看项目的.pubxml发布配置文件,看有没有自定义的<ExcludeFilesFromDeployment>规则把这些文件排除了。Azure App Service 的静态资源优化
Azure App Service有内置的静态资源优化功能,在Azure门户的App Service→配置→常规设置里,看看是否开启了启用静态内容压缩或者优化静态内容。开启后,Azure会自动对CSS/JS进行合并、压缩、重命名,甚至调整目录结构来优化加载性能,这会导致开发者工具里看到的路径和本地调试时不一样,原文件可能被替换成了优化后的版本。可以先临时关闭这个设置,重新部署后看样式是否恢复。前端构建工具的资源重定向
如果你的项目用了Webpack、Gulp这类前端构建工具,发布时可能执行了构建脚本,把content/style下的文件编译、合并后输出到了content/css/vendor目录,而原文件没有被包含在部署包中。检查项目根目录的package.json(scripts里的build命令)或者Gulpfile.js,看是否有把资源从style目录转移到css/vendor的逻辑。
快速排查小技巧
直接登录Azure App Service的Kudu控制台(在Azure门户的App Service→开发工具→高级工具里打开),进入site/wwwroot目录查看实际的文件结构:
- 如果Kudu里也找不到
main.css等原文件,说明是发布过程中没把这些文件传上去,重点排查发布配置或构建脚本; - 如果Kudu里有这些文件,但浏览器开发者工具里看不到,那大概率是路径引用错误或者Azure的静态资源优化导致的路径映射问题。
内容的提问来源于stack exchange,提问作者SunainaDG

