You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何需显式指定Visual Studio项目中.json文件以避免其被复制?

问题原因及解决办法

核心原因

SDK风格的Visual Studio项目(.NET Core/.NET 5+)采用自动文件包含规则,会默认将项目目录下的JSON、Excel等文件归类为Content或None类型并纳入发布流程:

  • .json、.xlsx这类文件默认属于Content组,会被自动复制到发布目录;
  • 仅用<Content Remove>只能将文件从Content组移除,但它们会被自动归入None组——如果项目中存在隐式配置(比如NuGet包引入的规则、全局项目设置)导致None组文件被复制,这些文件仍会出现在发布结果中;
  • VS界面设置的“从不复制”优先级低于csproj中的默认自动规则,尤其是当文件被SDK自动包含时,手动设置可能不生效。

彻底解决办法

要确保/etc目录下的文件完全不被发布,需要在csproj中显式覆盖默认规则,彻底排除这些文件:

方式1:批量排除整个etc目录

<ItemGroup>
  <!-- 排除etc下所有文件的Content和None归类,阻止自动复制 -->
  <Content Include="etc\**" Exclude="**" />
  <None Include="etc\**" Exclude="**" />
</ItemGroup>

方式2:针对单个文件精确设置

如果需要保留etc目录结构但清空内容,也可以逐个标记文件为永不复制:

<ItemGroup>
  <!-- 标记JSON文件为None类型,且从不复制到输出/发布目录 -->
  <None Update="etc\cabinet_settings.json" CopyToOutputDirectory="Never" />
  <None Update="etc\network_settings.json" CopyToOutputDirectory="Never" />
  <None Update="etc\scanner_settings.json" CopyToOutputDirectory="Never" />
  <!-- Excel文件同理 -->
  <None Update="etc\*.xlsx" CopyToOutputDirectory="Never" />
</ItemGroup>

额外注意点

  • 如果你使用的是旧版非SDK风格项目(.NET Framework),需要检查是否有<Content Include="etc\*.json" />这类显式包含规则,同时确保“从不复制”的属性被正确写入csproj;
  • 发布前建议清理项目(右键项目→清理)再重新生成发布,避免缓存的旧文件被打包进去。

内容的提问来源于stack exchange,提问作者Bart Friederichs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:48:26