Come eseguire il debug del codice in un pacchetto nuget creato da me

Ho un pacchetto nuget che ho creato e installato in un’altra soluzione, ma ora ho bisogno di eseguire il debug del codice del pacchetto quando viene chiamato dalla mia nuova soluzione.

Ho provato a fare riferimento alla soluzione del pacchetto ma non funziona.

Sto usando Visual Studio 2013.

Per eseguire il debug di qualsiasi dll è necessario il suo file di simboli (.pdb). Se costruisci il tuo progetto nella configurazione di debug vedrai che quei file sono generati e inseriti nella cartella di output della build.

Visual Studio carica quei file di simboli da luoghi diversi come descritto qui . Ma il modo più semplice per eseguire il debug dei pacchetti di nuget consiste nel mettere i file .pdb dei pacchetti nella cartella di output del progetto che si desidera eseguire il debug.


Se il codice che stai cercando di eseguire il debug è classificato come codice non utente, devi deselezionare Just My Code nelle opzioni di debug.

inserisci la descrizione dell'immagine qui

Codice utente e non utente

Per distinguere il codice utente dal codice non utente, Just My Code analizza i file di simboli (.pdb) e le ottimizzazioni del programma. Il debugger considera il codice come codice non utente quando il binario è ottimizzato o quando il file .pdb non è disponibile.

Tre attributi influenzano anche ciò che il debugger considera come My Code:

  • DebuggerNonUserCodeAttribute dice al debugger che il codice a cui è applicato non è My Code.
  • DebuggerHiddenAttribute nasconde il codice dal debugger, anche se Just My Code è distriggersto.
  • DebuggerStepThroughAttribute dice al debugger di scorrere il codice a cui è applicato, piuttosto che entrare nel codice.

Tutto l’altro codice è considerato come codice utente.

Come eseguire il debug del codice in un pacchetto nuget creato da me

Proprio come NtFreX ha risposto, ” Per eseguire il debug di qualsiasi dll è necessario il suo file di simboli (.pdb). “. In questo modo è ansible creare pacchetti di simboli che consentono ai consumatori di inserire il codice del pacchetto nel debugger di Visual Studio.

Il modo in cui lo facciamo (e funziona):

  1. Crea “* .symbols.nupkg”.
  2. Distribuire il pacchetto di simboli sul server SymbolSource.
  3. Configura IDE, i consumatori di pacchetti possono aggiungere https://nuget.smbsrc.net/ alle origini dei simboli in Visual Studio.
  4. Aggiungi la libreria richiesta per la proiezione usando NuGet (dal nostro server SymbolSource).
  5. Debug.

Per le informazioni di dettaglio, è ansible fare riferimento a Creazione di pacchetti di simboli .

Se questi pacchetti non sono adatti per la pubblicazione su NuGet Gallery / SymbolSource, è ansible inserire i file * .nupkg e * .symbols.nupkg su un disco locale.

Nota: aggiungere il codice sorgente ai file di origine di debug per la soluzione che fa riferimento al pacchetto (fare clic con il tasto destro su Soluzione, selezionare Proprietà … Proprietà comuni … Debug File di origine e aggiungere la directory di origine root per il riferimento binario rilevante)

Ho ottenuto questo lavoro costruendo il progetto che il pacchetto nuget ha avuto origine in modalità debug, quindi copiando il file pdb e dll dalla directory di debug alla posizione della dll di nuget all’interno del progetto in cui volevo eseguirne il debug.

ad esempio copia da

ExternalNugetPackage \ bin \ Debug \

a

ProjectDirectory \ Packages \ ExternalNugetPackage.1.0.0 \ lib \ NET4.5

Per Visual Studio 2017 e il codice sorgente del pacchetto nuget ospitato su GitHub o BitBucket:

1) Abilita le informazioni complete di debug nel file * .csproj:

   full true  

oppure fare clic con il tasto destro del mouse sulle proprietà del progetto, build, avanzate, informazioni di debug di output – impostate su pieno.

2) Per abilitare il download e lo stepping di sorgenti automatiche per la tua DLL del pacchetto nuget, aggiungi il pacchetto nuget SourceLink.Create.CommandLine al tuo progetto, o aggiungilo manualmente nel file * .csproj:

     

Maggiori informazioni qui

3) Distriggers l’opzione “triggers solo il mio codice” (strumenti – opzioni – debug – “abilita solo il mio codice”).

Dopodiché dovresti essere in grado di accedere ai metodi dalla tua DLL del pacchetto nuget.