2009-12-12 52 views
4

有没有什么办法可以在C#下的Visual Studio 2008下设置程序数据库文件(* .pdb)的自定义路径?使用C++这非常简单(项目设置 - >链接器 - >调试 - >生成程序数据库文件),但由于某些原因,微软似乎已经删除(或隐藏)它的C#。我知道“标准”的用法是让pdb位于bin目录旁边的可执行文件中,但该目录变得相当混乱,所以我真的更喜欢它们位于/ obj中,这是我在C++中一直使用的。C# - 设置路径pdb

谢谢!

+1

是否有你想将.pdb放在其他地方的实际原因,还是仅仅是因为习惯?如果它是习惯,我会建议打破它只是为了与绝大多数托管开发者的世界相处。 :) – 2009-12-12 21:04:20

+0

因为我的/ bin目录非常混乱,而且把所有东西都混在同一个地方,然后能够按照我认为合适的方式进行组织,这更加麻烦。我从来没有必要直接双击PDB文件,但我经常发现自己在其中有其他文件和目录,所以PDB没有必要成为混乱的一部分。 – Metal450 2009-12-12 21:10:53

回答

2

C#编译器支持/pdb command line option。然而,该选项并未在IDE的Build选项卡中公开。

IDE构建过程已经要求C#编译器将.pdb文件放入obj \ Debug目录中。它的一个副本在名为CopyFilesToOutputDirectory的MSBuild任务的bin \ Debug中结束。此任务在Microsoft.Common.targets中配置,该文件位于VS2008的c:\ windows \ microsoft.net \ framework \ v3.5目录中。您可以在技术上编辑此文件并删除复制.pdb的<Copy>元素。注意文件顶部的警告,请务必在修改之前制作备份副本。

我认为你会遇到的基本问题是这会影响全部所有项目的构建。并且调试器现在不再可以找到.pdb文件。那将是最终的表演停止者。

+0

良好的信息 - 但是,它仍然不理想,因为如您所说,调试器将无法找到.pdb文件。与C++示例相比,在该示例中,调试器从您指定的任何路径(而不是* only * bin目录)中找到.pdb就足够了。对于我来说,相信MS会让C#不可能完成这个任务,以至于没有任何“隐藏的方式”来告诉开发环境放置*并从一些替代路径使用* pdb ... – Metal450 2009-12-13 03:50:19

+0

@Metal:我觉得有点奇怪,但是C#不是C++。 (谢谢你在这个评论中没有提及MS。) – 2009-12-13 03:52:00

+0

显然我知道,我只是用它作为例子 - 显示IDE /调试器毫无疑问能够从任何地方读取pdb (即没有一些限制,说他们“有”与.exe相同的目录)。因此,由于IDE知道如何从其他地方加载pdb,所以对于它支持的任何语言来说,没有理由不能这样做。这只是一个路径设置问题。因此,无论出于何种原因,微软决定放弃这种选择,我不禁认为必须有某种方式来告诉它使用不同的路径。 – Metal450 2009-12-13 05:16:40

0

添加postbuild事件,并复制到PDB所需位置)

+1

然后,VS每次尝试从VS内运行应用程序时都会重建它们(即使没有更改)。另外,为了调试VS不会阻止VS知道它们在哪里吗?我很确定VS需要被告知它们在哪里。 – Metal450 2009-12-12 21:13:39

+0

我才意识到,他只是需要他们复制的任何具体行动,我的意思是有时ü提供调试版本建立测试等和u需要把PDB到一些具体的folder.U're权与您的意见。 – oldUser 2009-12-13 22:46:56

0

的.pdb文件必须驻留在同一文件夹中的.exe和.dll的以加载。

Pdb文件在异常处理时加载,并且需要追溯到发生异常的代码中的确切行。

您可以做的是在构建期间将pdb移动到符号服务器,而不是将它们与应用程序一起发布。然后在分析异常跟踪时将其拉入。

查看this post了解有关pdb文件,符号服务器等的信息。

+0

*的.pdb文件必须驻留在同一文件夹中以加载您的.exe和.dll的* >> 上面提到不是真的,:用C++项目,您可以指定PDB的是,无论你想和VS会加载他们就好了。另外,在C#项目中,您可以通过添加到应用程序将DLL放入另一个目录中。你可以做的是在构建过程中将pdb移动到符号服务器,而不是将它们与应用程序一起发布。* >> 是的,但不知何故,当我想要的时候它似乎过于复杂是让他们居住在另一个目录。 M $真的让这不可能吗? – Metal450 2009-12-12 21:37:49

+0

驻留在与dll“for .Net”相同的文件夹中的措辞会更好。 探测路径似乎不起作用。 /pdb打开csc.exe的路径不起作用。不同的文件名是没有问题的,但是pdb仍然必须与它创建的.dll/.exe文件位于同一个文件夹中。 我同意一个符号服务器是复杂的,但似乎是唯一的选择,如果你不能与.dll的(在.Net应用程序)在一起.pdb的。:)我希望有人可以找到一个更好的解决方案。 – 2009-12-13 11:24:34