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

为何ProjectB.csproj会重复添加ItemGroup?如何阻止该现象

问题原因与解决办法

为什么会自动添加这个ItemGroup?

这是Visual Studio(以及背后的MSBuild项目系统)的自动文件关联特性导致的。当你的生成文件采用GeneratedFile.*.cs这种命名格式时——比如常见的.Designer.cs、.Part.cs后缀——VS会默认把它们识别为GeneratedFile.cs的附属依赖文件(也就是DependentUpon节点的作用:在解决方案资源管理器里把这些文件折叠显示在主文件下面,让结构更清晰)。

每次Project A覆盖或重新生成这些文件时,VS的文件系统监视器会立刻检测到文件变化,自动扫描项目目录,然后更新ProjectB.csproj,添加对应的<Compile Update>节点来维护这个依赖关联。本质上是VS在帮你“优化”项目结构,但反而给你的自动化流程添了麻烦。

怎么阻止这个自动变更?

这里有几个实用的方案,你可以根据自己的需求选择:

  • 修改生成文件的命名规则(最简单)
    避开VS默认识别的附属文件命名模式就行,比如把GeneratedFile.*.cs改成GeneratedFile_1.cs、GeneratedFile_Extended.cs这类格式。这样VS不会把它们和GeneratedFile.cs绑定,自然就不会乱改你的.csproj了。

  • 显式在.csproj里定义规则(推荐)
    如果你想保留现有命名,直接在ProjectB.csproj里预先声明这些生成文件,并且禁用自动关联功能:

    <ItemGroup>
      <!-- 包含所有GeneratedFile开头的cs文件 -->
      <Compile Include="GeneratedFile.*.cs">
        <!-- 不需要依赖关联就删掉下面这行;需要固定关联就保留 -->
        <!-- <DependentUpon>GeneratedFile.cs</DependentUpon> -->
        <!-- 关键:禁用自动生成依赖项 -->
        <AutoGenerateDependentUpon>false</AutoGenerateDependentUpon>
      </Compile>
    </ItemGroup>
    

    添加这段后,VS会优先遵循你显式配置的规则,不会再自动添加新的Update节点。

  • 关闭VS的自动文件跟踪(不推荐)
    这个方法比较激进:打开VS的Tools > Options,找到Projects and Solutions > General,取消勾选“Track file changes outside the environment”。但这样一来,你手动新增文件到项目目录时,VS也不会自动把它们加入项目了,所以除非万不得已,不建议用这个。

内容的提问来源于stack exchange,提问作者Slack Groverglow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:13:52