24

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

4

1 回答 1

32

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

那篇文章有 /ndebug 完全倒退。

从 ILMerge 附带的发行说明(ILMerge.doc,强调我的):

2.8 DebugInfo public bool DebugInfo { get; 放; 当设置为 true 时,ILMerge 为输出程序集创建一个 .pdb 文件,并将为输入程序集找到的任何 .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,最后修改日期为 2/19/2010 上午 9:49

于 2010-02-25T20:28:05.110 回答