2009-09-17 44 views
19

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

+0

最后修改日期,但为什么你需要的?你想添加只是作为一个资源? – 2009-09-17 15:55:00

+5

当应用程序崩溃堆栈跟踪时,只显示失败的函数的名称。通过可执行文件中的pdb文件,它还显示出现错误的源文件中的行号。 – pat 2009-09-17 16:21:10

回答

24

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

那篇文章有/ ndebug正好倒退。

从附带ILMerge(ILMerge.doc,重点煤矿)的发行说明:

2.8 debuginfo软公共BOOL debuginfo软{获得;组; } 当此参数设置为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,随着2010/2/19 9:49

-3

您可以使用命令中的/ ndebug标志将它们合并。

这个article解释更多。

+0

感谢您的信息。出于某种原因,开关只是让ilmerge除了合并的程序集之外还生成一个pdb文件,但不会将信息放入合并的程序集中。我会在发现问题时发布更新。 – pat 2009-09-17 16:15:30

+1

我和@longeasy有同样的问题。/ndebug根本没有帮助。 – 2009-10-05 04:07:09

+1

/ndebug会将几个pdb合并为一个,就像程序集一样。问题是如何将程序集与pdb文件合并,因此它只是一个文件。 – Lucas 2009-10-17 20:20:05

相关问题