2009-09-17 79 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

相關問題