J'ai créé et installé un paquet de nugets dans une autre solution, mais je dois maintenant déboguer le code du paquet lorsqu'il est appelé depuis ma nouvelle solution.
J'ai essayé de référencer la solution du package mais ne fonctionne pas.
J'utilise Visual Studio 2013.
Pour déboguer une DLL, vous avez besoin du fichier de symboles (.pdb). Si vous construisez votre projet dans la configuration debug
, vous verrez que ces fichiers sont générés et placés dans le dossier de sortie de la construction.
Visual studio charge ces fichiers de symboles à différents endroits comme décrit ici . Mais le moyen le plus simple de déboguer vos paquets Nuget est de placer les fichiers .pdb des paquets dans le dossier de sortie de la construction du projet que vous voulez déboguer.
Si le code que vous essayez de déboguer est classé comme code non-utilisateur, vous devez décocherJust My Code
dans les options de débogage.
Code utilisateur et non-utilisateur
Pour distinguer le code utilisateur du code non utilisateur, Just My Code examine les fichiers de symboles (.pdb) et les optimisations de programme. Le débogueur considère le code comme un code non utilisateur lorsque le fichier binaire est optimisé ou lorsque le fichier .pdb n'est pas disponible.
Trois attributs affectent également ce que le débogueur considère comme étant mon code:
Tout autre code est considéré comme un code d'utilisateur.
Ce travail a été obtenu en construisant le projet à partir du paquet Nuget en mode débogage, puis en copiant simplement les fichiers pdb et dll du répertoire de débogage vers l'emplacement de la dug du fichier Nuget dans le projet dans lequel je voulais le déboguer.
par exemple copie de
ExternalNugetPackage\bin\Debug \
à
Répertoire de projet\Packages\ExternalNugetPackage.1.0.0\lib\net4.5
Comment déboguer du code dans un paquet de nuget créé par moi
Tout comme NtFreX a répondu, " Pour déboguer une DLL, vous avez besoin du fichier de symbole correspondant (.pdb). ". Vous pouvez donc créer des packages de symboles qui permettent aux utilisateurs d’intégrer le code de votre package dans le débogueur Visual Studio.
La façon dont nous le faisons (et fonctionne):
Pour plus d'informations, vous pouvez vous référer à Création de packages de symboles .
Si ces packages ne conviennent pas à la publication sur NuGet Gallery/SymbolSource, vous pouvez placer les fichiers * .nupkg et * .symbols.nupkg sur un disque local.
Remarque: Ajoutez le code source aux fichiers sources de débogage pour la solution qui référence le package (cliquez avec le bouton droit de la souris sur la solution, sélectionnez Propriétés ... Propriétés communes ... Fichiers sources de débogage et ajoutez le répertoire source racine pour la référence binaire pertinente).
Pour Visual Studio 2017 et le code source de votre paquet nuget hébergé sur GitHub ou BitBucket:
1) Activer les informations de débogage complètes dans le fichier * .csproj:
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
ou cliquez avec le bouton droit de la souris sur les propriétés du projet, sur la construction, sur les avancées, sur les informations de débogage en sortie et définissez ce paramètre sur Full.
2) Pour activer le téléchargement et le passage à la source automatiques de votre dll, ajoutez nuget package SourceLink.Create.CommandLine
à votre projet ou ajoutez-le manuellement dans un fichier * .csproj:
<ItemGroup>
<PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.2" PrivateAssets="All" />
</ItemGroup>
Plus d'infos ici
3) Dans Outils - Options - Débogage, désactivez "Activer uniquement mon code" et activez "Supprimer l'optimisation JIT lors du chargement de module (géré uniquement)".
Après cela, vous devriez pouvoir entrer dans les méthodes de votre DLL de paquetage Nuget.