【问题标题】:Is there a way to merge pdb files with ilmerge?有没有办法将 pdb 文件与 ilmerge 合并?
【发布时间】:2009-09-17 15:53:02
【问题描述】:

出于各种原因,我们使用 ilmerge 将所有应用程序程序集放入一个文件中,以便用户只需要处理一个文件。不幸的是,似乎没有办法将 .pdb 文件与程序集合并。有人知道解决这个问题的方法吗?

【问题讨论】:

  • 当应用程序崩溃时,堆栈跟踪只显示失败函数的名称。与可执行文件中的 pdb 文件一起,它还显示源文件中发生错误的行号。

标签: c# .net ilmerge


【解决方案1】:

好的,我想出了这个,虽然花了一段时间。

那篇文章的 /ndebug 完全相反。

来自 ILMerge 随附的发行说明(ILMerge.doc,重点是我的):

2.8 DebugInfo public bool DebugInfo { get;放; } 当此设置为 true 时, ILMerge 为 输出程序集并合并到其中 为输入程序集找到 .pdb 文件。 如果您想要创建 .pdb 文件 对于输出程序集,任一设置 此属性为 false 或指定 命令中的 /ndebug 选项 行。 默认值:true 命令行 选项:/ndebug

解决方案是专门在您的命令行上使用该标志。 ILMerge 默认会合并 pdb 文件。确保源程序集的所有 pdb 文件与其关联的 dll 位于同一目录中,以便 ILMerge 可以找到它们。 (我们正在使用项目引用,并且有一个 ILMerge 项目来满足这一要求。)

这是我的 ILMerge csproj 文件中的相关部分。

 <Target Name="AfterBuild">
    <CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true'">
      <Output TaskParameter="Include" ItemName="IlmergeAssemblies" />
    </CreateItem>
    <Exec Command="&quot;..\..\Libraries\Ilmerge.exe&quot; /copyattrs /allowMultiple /out:&quot;@(MainAssembly)&quot; &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" />
    <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
  </Target>

为了完整起见,我使用的是最新版本的 ilmerge.exe:版本 2.10.219.0,最后修改日期为 2010 年 2 月 19 日上午 9:49

【讨论】:

  • 这些是变量吗?...@是什么?
  • 我不明白。 PDB 文件仍然存在,它没有被合并。什么给出了?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多