14

我正在尝试将两个程序集合并为一个程序集,它运行良好。然而,当我也尝试合并 *.pdb 文件时,出现错误:

拒绝访问路径“F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Planrechnung\Planrechnung.pdb”。

如果我使用 /ndebug 选项来跳过合并 *.pdb 文件,它可以正常工作。但是,调试时当然不能加载符号。起初我以为在 postbuild 事件中调用 ILMerge 时,Planrechung.pdb 正在使用并被锁定。我还尝试关闭 VS2010 并从命令行调用 ILMerge,但结果保持不变。我检查了 ProcessExplorer 并且文件上没有句柄。

这就是我所说的ILMerge:

E:\XP\Tools\ILMerge\ilmerge /targetplatform:v4,"D:\WINDOWS\Microsoft.NET\Framework\v4.0.30319" /lib:"F:\Fentec\Businessplan\trunk\Ausgabe\Debug\bin" /out:Planrechnung.dll "F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Planrechnung\Planrechnung.dll" "F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Mandantenverwaltung\Mandantenverwaltung.dll"

我错过了什么吗?如果您需要任何其他信息,请询问。

问候,
斯卡利

4

2 回答 2

29

我找到了解决问题的方法,这有点尴尬。

输出名称不能与合并的 pdb 文件之一相同。否则会出现此问题。当我更改程序集的名称时,它工作得很好。在这个过程中覆盖一个程序集也没有问题,但是你不能覆盖一个现有的 pdb 文件。
我没想到这一点,偶然发现了它。对不起,所有的烦恼

问候,
斯卡利

于 2011-09-07T08:30:19.757 回答
0

在我看来,.pdb 文件已被锁定,可能是因为它正在调试器(例如 Visual Studio)中使用。

尝试关闭 Visual Studio 和您的应用程序(如果您还没有关闭)。

如果这不起作用,则使用Process Explorer之类的工具来搜索打开该文件的进程。在进程资源管理器中,您可以使用 Find -> Find Handle 或 Dll... 执行此操作:

Process Explorer 搜索对话框的屏幕截图

输入您正在搜索的文件/pdb 的名称,它将列出所有打开该文件的进程 - 关闭各个句柄或杀死/关闭这些应用程序并重试。

于 2011-09-06T13:45:39.183 回答