Visual Studio 解决方案中具有相同依赖项的多个项目产生不同的 pdb 大小

Multiple projects in a Visual Studio solution with same dependencies produce different pdb sizes

我有一个包含 170 个项目的 Visual Studio 解决方案。这些项目中的大多数都用作几个主要项目的依赖项。

这些主要项目包括完整版和精简版。让我们说 product_full_link 和 product_lite_link.

这两个项目具有相同的项目依赖关系,只是在配置上略有不同,略微限制了程序之间的可用功能。

当我构建解决方案时,它先构建 product_full_link,然后再构建 product_lite_link。 product_full_link 的 .pdb 文件最终约为 ~1GB。 product_lite_link 的 .pdb 文件在收到错误消息之前达到大约 4GB。

1>LINK : fatal error LNK1201: error writing to program database 'C:\project\Debug\product_lite_link.pdb'; check for insufficient disk space, invalid path, or insufficient privilege

所有 linker 选项在这些项目之间都是相同的。我尝试使用多个 link 选项来减小 .pdb 大小,包括此处描述的所有方法 https://blogs.msdn.microsoft.com/vcblog/2014/03/05/shrink-my-program-database-pdb-file/ 都无济于事。

我还尝试独立于 product_full_link 项目构建 product_lite_link 项目,它仍然会产生巨大的 .pdb 文件并产生相同的错误消息,而 product_full_link 项目始终使用可管理的 .pdb 成功构建。

管理多项目解决方案的任何帮助或参考资料都会有很大帮助。

我找到了问题的解决方案。

问题是项目之间的链接器选项不同。

这些是我 product_full_link.vcxproj

中的链接器选项
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
  <Link>
    <AdditionalDependencies>product_full_configuration_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
    <HeapReserveSize>0x10000000</HeapReserveSize>
    <HeapCommitSize>0x10000</HeapCommitSize>
    <LargeAddressAware>true</LargeAddressAware>
    <ShowProgress>NotSet</ShowProgress>
    <TargetMachine>MachineX64</TargetMachine>
    <GenerateDebugInformation>DebugFull</GenerateDebugInformation>
    <FullProgramDatabaseFile>true</FullProgramDatabaseFile>
  </Link>
</ItemDefinitionGroup>

这些是我 product_lite_link.vcxproj

中的链接器选项
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
  <Link>
    <AdditionalDependencies>product_full_configuration_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
    <TargetMachine>MachineX64</TargetMachine>
  </Link>
</ItemDefinitionGroup>

问题是 Visual Studio > Project Properties > Linker 中的选项显示的选项与 .vcxproj 文件中的选项不同,所以我无法找出那里的差异。

虽然我不确定,这些选项中的哪一个是减少 .pdb 文件大小的原因。