Visual Studio 2017始终以开发模式部署ASP.NET Core应用问题
ASP.NET Core Web Deploy部署多appsettings及PDB文件的原因与解决办法
这个问题我之前部署ASP.NET Core项目时也踩过坑,主要是这几个常见原因导致的,咱们逐个排查解决:
一、多appsettings文件被部署的原因及解决
1. 项目文件(.csproj)的复制规则配置不当
默认情况下,ASP.NET Core项目里的所有appsettings.*.json文件可能都被设置为始终复制或如果较新则复制到输出目录,而Web Deploy会把输出目录里的所有文件都同步到服务器。
解决方法:
打开你的.csproj文件,针对不同环境的配置文件添加条件复制规则,只让当前部署环境对应的配置文件被复制到输出目录。比如:
<!-- 核心配置始终复制 --> <Content Update="appsettings.json" CopyToOutputDirectory="PreserveNewest" /> <!-- 仅在Release配置下复制生产环境配置 --> <Content Update="appsettings.Production.json" CopyToOutputDirectory="PreserveNewest" Condition="'$(Configuration)' == 'Release'" /> <!-- 其他环境配置设置为不复制 --> <Content Update="appsettings.Development.json" CopyToOutputDirectory="DoNotCopy" /> <Content Update="appsettings.Staging.json" CopyToOutputDirectory="DoNotCopy" Condition="'$(Configuration)' != 'Staging'" />
2. 发布配置文件(.pubxml)未排除多余配置文件
如果你的发布配置文件里没有明确排除不需要的appsettings文件,Web Deploy会默认包含输出目录里的所有文件。
解决方法:
在对应的.pubxml文件中添加排除规则:
<PropertyGroup> <ExcludeFilesFromDeployment>appsettings.Development.json;appsettings.Staging.json</ExcludeFilesFromDeployment> </PropertyGroup>
二、PDB文件被部署的原因及解决
1. 生成配置的调试信息未关闭
即使你选择了Release配置,项目的调试信息输出可能仍处于开启状态,导致PDB文件被生成并复制到输出目录。
解决方法:
- 右键项目 → 属性 → 生成 → 选择对应的配置(比如Release) → 把“调试信息”设置为无。
- 或者直接在
.csproj里添加配置:
<PropertyGroup Condition="'$(Configuration)' == 'Release'"> <DebugType>None</DebugType> <DebugSymbols>false</DebugSymbols> </PropertyGroup>
2. Web Deploy发布选项未排除调试符号
在发布向导的“文件发布选项”中,可能没有勾选“排除生成的调试符号”选项,导致PDB被一并部署。
解决方法:
重新打开发布配置向导,进入“设置”步骤,找到“文件发布选项”,勾选排除生成的调试符号,这样Web Deploy会自动过滤掉PDB文件。
3. 发布配置文件未排除PDB
如果上面的方法没生效,可以直接在.pubxml里添加PDB的排除规则:
<PropertyGroup> <ExcludeFilesFromDeployment>*.pdb</ExcludeFilesFromDeployment> </PropertyGroup>
最后检查
修改完配置后,先本地生成对应的配置(比如Release),然后查看输出目录(bin/Release/netX.X),确认只有需要的appsettings文件且没有PDB文件,再重新执行Web Deploy部署,问题应该就能解决了。
内容的提问来源于stack exchange,提问作者clockwiseq
相关产品推荐
相关产品推荐

