2009-09-17 9 views
19

Aus verschiedenen Gründen verwenden wir ilmerge, um alle unsere Anwendungsassemblys in eine Datei zu schreiben, so dass der Benutzer nur eine Datei verarbeiten muss. Leider scheint es keine Möglichkeit zu geben, die .pdb-Dateien mit den Assemblies zusammenzuführen. Jeder weiß, wie man das umgehen kann?Gibt es eine Möglichkeit, pdb-Dateien mit ilmerge zusammenzuführen?

+0

aber warum Sie tun müssen, dass ? Möchten Sie nur als Ressource hinzufügen? –

+5

Wenn die Anwendung abstürzt zeigt die Stack-Trace nur den Namen der Funktion, die fehlgeschlagen ist. Mit der PDB-Datei entlang der ausführbaren Datei wird auch die Zeilennummer in der Quelldatei angezeigt, in der der Fehler aufgetreten ist. – pat

Antwort

24

Ok, ich habe das herausgefunden, obwohl es eine Weile gedauert hat.

Dieser Artikel hat/ndebug genau rückwärts.

Von den Release Notes, die mit ILMerge kommen (ILMerge.doc, Hervorhebung von mir):

2,8 Debuginfo public bool Debuginfo {get; einstellen; } Wenn diese Einstellung auf "true" gesetzt ist, erstellt ILMerge eine PDB-Datei für die Ausgabebaugruppe und führt alle für Eingabebaugruppen gefundenen PDB-Dateien zusammen. Wenn Sie das tun nicht eine PDB-Datei erstellt werden soll für die Ausgabebaugruppe, entweder gesetzt diese Eigenschaft auf false oder sonst geben die/NDEBUG Option in der Befehlszeile . Standard: true Befehlszeile Option:/NDEBUG

Die Lösung ist speziell auf nicht haben, dass Flagge auf der Kommandozeile. ILMerge wird standardmäßig pdb-Dateien zusammenführen. Stellen Sie sicher, dass sich alle pdb-Dateien Ihrer Quellenassemblys im selben Verzeichnis befinden, zusammen mit den zugehörigen DLLs, sodass ILMerge sie finden kann. (Wir verwenden Projektreferenzen und haben ein ILMerge-Projekt, das sich um diese Anforderung kümmert.)

Hier ist der relevante Abschnitt aus meiner ILMerge-Datei 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> 

Der Vollständigkeit halber verwende ich die neueste Version von ilmerge.exe: Version 2.10.219.0, mit einem Datum der letzten Änderung 2010.02.19 09.49

-3

Sie können sie für Sie zusammenführen lassen, indem Sie das Flag/ndebug für den Befehl verwenden.

Diese article erklärt mehr.

+0

Danke für die Info. Aus irgendeinem Grund hält der Schalter lediglich davon ab, eine pdb-Datei zusätzlich zu der zusammengeführten Assembly zu erstellen, sondern fügt die Informationen nicht in die zusammengeführte Assembly ein. Ich werde ein Update veröffentlichen, wenn ich herausfinde, was schief läuft. – pat

+1

Ich habe das gleiche Problem wie @longeasy./ndebug hilft überhaupt nicht. –

+1

/ndebug wird mehrere pdb in eins zusammenfassen, genau wie bei den Assemblies. Die Frage ist, wie die Assemblys mit den PDB-Dateien zusammengeführt werden, so dass es sich um eine einzige Datei handelt. – Lucas

Verwandte Themen