VisualStudio bin \ debug文件夹中的PDB文件

我有一个由多个项目组成的VS(2008)解决方案,并非全部位于相同的名称空间中。 当我构建解决方案时,顶级项目TopProject使用的所有dll都被复制到TopProject bin debug文件夹中。 但是,相应的.pdb文件仅为其他某些项目复制。 例如使用NDepend时,这很痛苦。

VS如何决定将哪些.pdb文件复制到更高级别的bin debug文件夹中? 我怎样才能让VS复制其他人呢?


编辑:

参考资料如下:所有的dll被复制到一个中央位置,没有他们的pdbs。 TopProject只能引用这些复制的dll; 然而,dll本身显然知道他们的pdbs在哪里,并且(大多数)被正确地复制到调试文件夹中。


来自MSDN:

程序数据库(PDB)文件包含调试和项目状态信息,可以增量链接程序的调试配置。 使用/ debug编译带/ ZI或/ Zi或Visual Basic / C#/ JScript .NET程序的C / C ++程序时会创建PDB文件。

所以看起来像这里的“问题”(因为没有更好的词)是你的一些DLL正在以调试模式构建(并因此发出PDB),并且一些正在以释放模式构建(因此不发射PDB) 。 如果是这样的话,应该很容易修复 - 进入每个项目并更新其构建设置。 如果您没有对命令行选项进行任何调整,这将是默认情况。

但是,如果不是这样,它会变得棘手。 也许你们都处于发布或调试模式。 现在您需要查看每个项目的命令行编译选项(在项目属性中指定)。 如果您需要调试器,请将其更新为/ debug,如果不需要,请将其删除。

编辑回应编辑

是的,这些DLL“知道”他们有PDB,并有路径给他们,但这并不意味着太多。 正如其他人所提到的,仅将DLL复制到给定的目录中,并不能解决这个问题。 你也需要PDB。

在Windows中复制单个文件,除了某些“捆绑”类型的文件(我不是微软对此的称谓,而是“完整的HTML包”是概念)不复制相关文件。 DLL不会以“捆绑”的方式进行组装,因此复制它们会将PDB留下。

我想说你唯一的答案就是更新你的DLL到这些中心位置的过程,并且包括PDB ......但是我很想在这方面证明错误!


正如其他职位所说,你可能有一个编译器/腐败问题。

但是,正如Will所说,如果正在创建pdb文件,但没有显示出您想要的位置,请创建一个后期制作步骤。 以下是我为解决方案中的每个项目定义的构建后步骤。 它确保所有输出文件都被复制到一个公共目录中。

如果您的proj文件位于 SolutionDir ProjDir中,则生成后步骤的第一行会将输出文件复制到 Solution Bin Release或 Solution Bin Debug。 如果这是一个Debug版本,第二行复制pdb文件。 我不复制发布版本的pdb文件。

因此, SolutionDir Bin现在将所有输出文件包含在一个位置。

xcopy /r /y $(TargetPath) $(ProjectDir)..$(OutDir)
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..$(OutDir)

首先,永远不要假设任何事情。 清理解决方案,在调试模式下重建它,然后检查是否创建了所有的pdb文件。 如果没有,那是你的问题。

如果他们被创建,并且他们都没有被复制,你可以通过创建一个后期构建事件来解决这个问题,该事件可以手动将pdb文件复制到所需的位置。 当然,这只是一种解决方法。

我唯一能想到的其他事情是您的解决方案文件已损坏。 您可以将.sln作为xml文件打开并检查内容。 检查按预期工作的项目的配置,并将它们与没有的项目进行比较。 如果你什么都看不到,你必须在项目层面重复这一点。 比较工作.csproj(或其他)项目文件和非工作文件。


编辑回应编辑

如果您只是手动复制东西,然后手动复制pdbs。 我相信Dll不应该“知道”关于pdbs的任何信息。 只要将它们粘在目的地目录中,然后去喝杯咖啡。 放松。

链接地址: http://www.djcxy.com/p/85421.html

上一篇: PDB files in VisualStudio bin\debug folders

下一篇: Understanding of Managed C++