Docker运行.NET Core应用仅Release模式报appsettings.json找不到错误如何解决
根因说明
- Release模式下.NET 默认启用的发布优化导致
Assembly.GetEntryAssembly().Location失效:当Release配置开启单文件发布(<PublishSingleFile>true</PublishSingleFile>)、程序集裁剪等优化时,Assembly.Location会返回空字符串,如果你的代码里有路径空值兜底逻辑,会自动回退到进程默认工作目录/usr/share/dotnet/,和未修改前的旧代码效果一致,所以报同样的路径错误。 - VS自动生成的Dockerfile针对Release阶段默认添加了单文件发布、ReadyToRun编译等优化参数,和Debug阶段的构建逻辑完全不同,所以Debug模式正常、Release模式报错。
- 若未在Dockerfile中显式设置
WORKDIR /app,也会导致进程默认工作目录指向dotnet安装目录,放大路径获取错误的影响。
修复方案
优先推荐使用兼容性更强的根目录获取方式,适配所有构建模式和部署环境:
string baseDirectory = AppContext.BaseDirectory;
如果要保留原Assembly相关的写法,需要修改项目发布配置,在.csproj文件中添加如下配置关闭Release模式的单文件发布优化:
<PropertyGroup Condition="'$(Configuration)' == 'Release'"> <PublishSingleFile>false</PublishSingleFile> <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract> </PropertyGroup>
同时检查Dockerfile的Release构建阶段,确认没有额外添加-p:PublishSingleFile=true之类的发布参数。
内容的提问来源于stack exchange,提问作者Abdul。
相关产品推荐
相关产品推荐

