代码之家  ›  专栏  ›  技术社区  ›  Patrick

有没有办法用ilmerge合并pdb文件?

  •  19
  • Patrick  · 技术社区  · 16 年前

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

    1 回复  |  直到 15 年前
        1
  •  27
  •   Tito    15 年前

    好吧,我想出来了,虽然花了一段时间。

    那篇文章的错误完全是向后的。

    从ILmerge随附的发行说明(ilmerge.doc,emphasis mine)中:

    2.8 debuginfo公共bool debuginfo get;set; 当设置为真时, ilmerge为创建.pdb文件 输出程序集并合并到其中 找到输入程序集的.pdb文件。 如果你这样做了 希望创建.pdb文件 对于输出程序集,可以是 此属性为false或指定 命令中的/ndebug选项 线。 默认值:真命令行 选项:/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