.NET Core发布时wwwroot/data文件夹文件未被忽略的问题排查
这种情况确实挺闹心的,明明配置了不复制,结果发布时还是带过去,给你几个排查和解决的方向:
核对文件属性与.csproj配置的一致性
有时候VS的UI设置和.csproj里的代码会出现不同步的情况。右键对应的JSON文件,打开属性面板,确认“复制到输出目录”确实设为了不复制,同时检查.csproj里有没有重复的条目——比如有没有其他<ItemGroup>里用通配符(比如<Content Include="wwwroot\data\**" />)包含了整个文件夹,这种通配符规则会覆盖单个文件的CopyToPublishDirectory="Never"设置,得把冲突的通配符规则删掉或者修改。清理项目缓存,重新生成
VS的缓存有时候会“记仇”,保留旧的配置逻辑。试试这几步:- 点击菜单栏的
Build -> Clean Solution清理解决方案 - 手动删除项目目录下的
bin和obj文件夹 - 重新生成项目(
Build -> Rebuild Solution),之后再尝试发布
- 点击菜单栏的
调整.csproj的配置逻辑,先移除再明确设置
可以尝试先移除所有可能包含这些JSON文件的规则,再明确标记不复制,把下面的代码加到.csproj里:<ItemGroup> <!-- 先移除Content和None组里的这些文件 --> <Content Remove="wwwroot\data\*.json" /> <None Remove="wwwroot\data\*.json" /> <!-- 明确包含但发布时绝不复制 --> <None Include="wwwroot\data\*.json" CopyToPublishDirectory="Never" /> </ItemGroup>这样能避免其他默认规则或者之前的配置干扰。
检查发布配置文件(.pubxml)
发布时的具体规则可能写在项目Properties/PublishProfiles文件夹下的.pubxml文件里。打开对应的发布配置文件,看看有没有专门针对这些JSON文件的复制规则,比如有没有<ItemGroup>里的<ResolvedFileToPublish>条目包含了它们。如果有的话,要么删除这些条目,要么添加<CopyToPublishDirectory>Never</CopyToPublishDirectory>属性。验证发布方式的规则(针对Azure Web Deploy)
如果用的是Web Deploy方式发布,有时候发布设置里的选项会影响文件复制。可以在发布向导里进入“设置”页面,看看有没有勾选“删除目标中不在项目中的文件”——不过这个选项要谨慎使用,它会删掉Azure服务器上项目里没有的文件,但如果你的JSON文件确实不该被发布,勾选后发布时会自动清理掉目标端的这些文件,同时结合前面的配置阻止新的复制。
内容的提问来源于stack exchange,提问作者Always Learning

