我有一个包含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
这些项目之间的所有链接器选项都相同。我尝试使用多个链接选项来减少.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>项目属性>链接器中的选项中没有显示.vcxproj文件中的相同选项,因此我无法识别那里的差异。
我不确定,这些选项中的哪一个负责减少.pdb文件大小。