2011-09-06 12 views
8

Sto provando a unire due assembly in un singolo assembly, che funziona tranquillamente. Eppure, quando si tenta di unire il * .pdb file troppo, ottengo un errore:Eccezione ILMerge durante il tentativo di unire il file pdb

Access to the path "F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Planrechnung\Planrechnung.pdb" is denied.

Se si utilizza l'opzione/NDEBUG per saltare la fusione dei file * .pdb, funziona benissimo. Ma ovviamente i simboli non possono essere caricati durante il debug. All'inizio pensavo che quando si chiamava ILMerge nell'evento postbuild, Planrechung.pdb era in uso e bloccato. Ho anche provato a chiudere VS2010 e chiamare ILMerge dalla riga di comando, ma il risultato è rimasto lo stesso. Ho controllato con ProcessExplorer e non c'è alcun handle sul file.

questo è come mi chiamo ILMerge:

E:\XP\Tools\ILMerge\ilmerge /targetplatform:v4,"D:\WINDOWS\Microsoft.NET\Framework\v4.0.30319" /lib:"F:\Fentec\Businessplan\trunk\Ausgabe\Debug\bin" /out:Planrechnung.dll "F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Planrechnung\Planrechnung.dll" "F:\Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Mandantenverwaltung\Mandantenverwaltung.dll"

Ho perso qualcosa? Se ci sono ulteriori informazioni necessarie, basta chiedere.

Saluti,
Skalli

+0

possibile duplicato del [C'è un modo per unire file PDB con ILMerge?] (Http://stackoverflow.com/questions/1439721/is-there- a-way-to-merge-pdb-files-with-ilmerge) –

+0

No, ho letto quella domanda. Ma gestisce solo come gestire l'opzione/ndebug, non il problema che ho qui. – Skalli

risposta

19

Ho trovato la soluzione al problema ed è un po 'imbarazzante.

Il nome di uscita non deve essere lo stesso nome di uno dei file pdb uniti. Altrimenti questo problema si verifica. Quando ho cambiato il nome di un assemblaggio ha funzionato alla grande. Non è inoltre un problema sovrascrivere un assembly nel processo, ma non è possibile sovrascrivere un file pdb esistente.
Non mi aspettavo questo e sono inciampato in esso per caso. Ci scusiamo per tutti i guai

Saluti,
Skalli

+0

Ha fatto lo stesso errore. +1 per questo – yas4891

+0

Ho fatto lo stesso, e mi hai salvato la vita. Una cosa così stupida. Non essere dispiaciuto, hai fornito una bella domanda con una risposta salva-vita che è una delle prime voci in google. – JoshuadV

+1

Se si specifica un'altra directory \ output, non si verifica tale errore e non è necessario modificare i nomi. –

0

Sembra a me come il file PDB è bloccata, probabilmente perché è in uso in un debugger (come Visual Studio).

Provare a chiudere sia Visual Studio che l'applicazione (se già non l'hai).

Se ciò non funziona, utilizzare uno strumento come Process Explorer per cercare i processi in cui è aperto quel file. In Process Explorer è possibile farlo utilizzando la funzione Trova -> Trova maniglia o Dll ...:

Screenshot of the Process Explorer Search dialog

Immettere il nome del file/PDB si sta cercando ed elencherà tutti i processi che hanno quel file aperto: chiudi le singole maniglie o uccidi/chiudi quelle applicazioni e riprova.

+0

Ciao Giustino, ci ho già provato. Non ci sono maniglie che usano Planrechnung.pdb. Ma ho capito, che ILMerge stesso sta causando il problema. ILMerge può sovrascrivere un assembly, ma non un file pdb. Ho cambiato il nome dell'assembly e ora sembra funzionare. – Skalli