【问题标题】:C# Project - Reference .pdb for native .dllC# 项目 - 本机 .dll 的参考 .pdb
【发布时间】:2016-08-19 22:58:16
【问题描述】:

我有一个包含 C# Forms 项目的解决方案,该项目在包含我的大部分程序代码的本机 .dll 之上创建 UI。

我大部分时间都在处理本地代码而不是 C#,这意味着我通过 C# UI 项目加载的 DLL 经常被修改,我需要调试它的关联 .pdb 文件也是如此我做什么。

但是,无法像引用 .dll 那样引用 .pdb 文件,那么如何在每次修改时复制此 .pdb 文件?将其添加为现有项目只是复制它,并且不会在修改原始 .pdb 文件时对其进行更新。

我看到的两个唯一解决方案是将 .pdb 文件直接生成到 C# 的 bin/debug 中,而不是在本机 .dll 项目中生成它,但我不确定这是否可行。第二种解决方案是将指向该 .pdb 文件的链接添加到项目中,而不是实际的 .pdb 文件中,但我不确定它是否会起作用。

有解决办法吗?我找不到任何东西。谢谢。

【问题讨论】:

  • 您还没有尝试过链接解决方案吗?除此之外,在项目设置中,没有构建事件吗?您可以将文件作为预构建事件复制到那里(这是我可以使用的 MSVC++ 2010 执行的操作)。
  • 您是否考虑过为您的应用程序和本机 dll 提供一个通用输出文件夹?
  • @Aconcagua 我已经尝试了您的建议,即使用批处理脚本添加构建后事件,如果您可以让批处理工作,它似乎可以工作。我认为它更干净,因为它是引用的项目,它负责处理它需要的东西。但是由于批处理处理引号的奇怪方式,我无法让我的批处理脚本工作,而且由于这种语言是一个不应该存在的巨大废话,我想我只会更改 .pdb 的输出目录在我的 DLL 项目中,它确实有效。如果您在评论中提供更多详细信息,我会接受。
  • 解决方案不止一种。到目前为止,最简单的方法是nothing。 PDB 的路径记录在 DLL 中,您可以使用 dumpbin.exe 看到。所以它在最初由链接器创建的目录中就可以了。
  • @HansPassant 啊。但它只是存储在 .dll 中的基本名称、相对路径还是完整路径?因为如果我的 .dll 从 DLL 项目的输出文件夹移动到 C# 项目的输出文件夹而不是 .pdb,则路径必须是绝对的,否则 .dll 将指向任何内容,对吧?

标签: c# dll reference native pdb


【解决方案1】:

MSVC 提供构建事件(MSVC++ 2010:项目的属性 -> '配置属性' -> '构建事件' - 这存在于 C# 和更高版本的 MSVC 中,但是可能在另一个位置)。您可以在那里定义构建前和构建后事件(如果是 C++,也可以定义预链接事件)。

您可以调用 shell 命令、批处理脚本或(如果您安装了适当的解释器)事件 perl 或 python 脚本。从这样的脚本中(作为 dll 的后期构建,复制 .pdb 文件,或者——我个人更喜欢——从 C# 项目中作为预构建事件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多