.Net Core部署至Ubuntu(Nginx)仍处于开发模式问题排查
问题原因与解决建议
首先明确:launchSettings.json仅用于本地开发工具(如Visual Studio、VS Code),发布后的生产环境不会读取这个文件,所以上传它没用。以下是可能导致项目运行在开发模式的原因及解决办法:
1. 服务器未正确设置ASPNETCORE_ENVIRONMENT环境变量
这是最常见的原因,.NET Core优先读取系统环境变量来确定运行环境,而非launchSettings.json。
临时生效(仅当前终端会话)
启动项目前执行:
export ASPNETCORE_ENVIRONMENT=Production dotnet YourProject.dll
永久生效(针对当前用户)
编辑用户配置文件~/.bashrc,添加以下内容:
export ASPNETCORE_ENVIRONMENT=Production
执行source ~/.bashrc使配置立即生效。
永久生效(全局所有用户)
编辑/etc/environment文件,添加:
ASPNETCORE_ENVIRONMENT=Production
重启服务器或重新登录后生效。
若使用systemd托管服务
如果用systemd管理.NET Core进程,需要在服务配置文件(如/etc/systemd/system/yourproject.service)的[Service]段添加:
Environment="ASPNETCORE_ENVIRONMENT=Production"
然后执行:
sudo systemctl daemon-reload sudo systemctl restart yourproject.service
2. 发布包中包含appsettings.Development.json
检查发布后的输出文件夹(~/MyOutFolder),如果存在appsettings.Development.json,当环境变量未正确设置时,项目默认会加载开发环境配置。
解决:在项目的.csproj文件中添加配置,发布时排除该文件:
<ItemGroup> <Content Remove="appsettings.Development.json" /> <None Include="appsettings.Development.json" CopyToPublishDirectory="Never" /> </ItemGroup>
重新执行发布命令即可。
3. 代码中硬编码指定了开发环境
检查Program.cs(.NET 6+为顶级语句),看是否存在手动指定环境的代码,比如:
// 错误示例 WebHost.CreateDefaultBuilder(args) .UseEnvironment("Development") .UseStartup<Startup>();
如果有,删除该代码或改为动态读取环境变量:
.UseEnvironment(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production")
4. 确认发布配置正确性
再次确认发布命令确实使用了Release配置:
dotnet publish --configuration Release --output ~/MyOutFolder
可以检查发布文件夹内的文件,确保没有残留开发环境的配置或编译产物。
内容的提问来源于stack exchange,提问作者Xenoranger
相关产品推荐
相关产品推荐

