web-dev-qa-db-fra.com

Comment déboguer dans mon paquet de pépites déployé à partir de TeamCity?

J'ai mis une bibliothèque que mon équipe utilise dans un package de pépites déployé à partir de TeamCity dans un dossier réseau. Je ne peux pas déboguer dans ce code cependant! SymbolSource est une solution que j'ai lue mais je préférerais de loin trouver un moyen d’avoir accès aux fichiers .pdb/source directement à partir de Teamcity. Est-ce que quelqu'un sait comment faire ça? 

Modifier. Quand je vérifie 'Include Symbols and Source' à l'étape de construction du Nuget Pack, TeamCity crée un fichier .Symbol.nupkg en plus du fichier .nupkg situé dans le dossier réseau. Le .Symbol.nupkg contient la src et le fichier .pdb. 

Modifier. J'ai décoché 'Include Symbols and Source' sur TeamCity et ajouté ce qui suit dans mon fichier nuspec:

  <files>
    <file src="..\MyLibrary\bin\release\MyLibrary.dll" target="lib\net40" />
    <file src="..\MyLibrary\bin\release\MyLibrary.pdb" target="lib\net40" />
    <file src="..\MyLibrary\*.cs" target="src" />
    <file src="..\MyLibrary\**\*.cs" target="src" />
  </files>

Cela a ajouté la dll, la pdb et les fichiers source de ma bibliothèque dans le package nuget et n'a pas généré de fichier .Symbols, qui, à mon avis, n'est nécessaire que pour les serveurs de symboles.

63
anthonybell

Solution légère fiable

  1. Placez la pdb dans le paquet NuGet à côté de la dll.
  2. Ajoutez le code source aux fichiers sources de débogage pour la solution qui référence le package.

Cela signifie que vous pourrez parcourir le code et afficher les exceptions, mais vous devrez peut-être rechercher un fichier sur le disque et l'ouvrir avant de pouvoir définir un point d'arrêt. Évidemment, vous devez faire attention à ce que la source soit à la bonne révision.

Plus de détails à l'étape 1

Si vous empaquetez actuellement sans Nuspec, vous devrez créer un Nuspec, puis ajouter le pdb à la liste des fichiers du dossier "NuGet spec" peut être une commande utile pour générer la spécification initiale telle que définie dans Documentation NuGet . Ensuite, assurez-vous que l’étape Pack City City Team fait référence à votre nouveau nuspec.

Plus de détails à l'étape 2

Lorsque vous avez une solution ouverte, cliquez avec le bouton droit de la souris sur Solution, sélectionnez Propriétés ... Propriétés communes ... Fichiers sources de débogage, puis ajoutez le répertoire source racine pour la référence binaire pertinente. Ou consultez MSDN ..__ Remarque: vous ne pouvez pas ouvrir les propriétés de la solution pendant le débogage.

À l'avenir - intégration de la source

À partir de Visual Studio 2017 15.5 preview2, vous pouvez ajouter quelque chose comme ceci à votre fichier de projet:

<PropertyGroup>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <IncludeSymbolsInPackage>true</IncludeSymbolsInPackage>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>portable</DebugType> <!-- Required for EmbedSources -->
    <EmbedSources>true</EmbedSources>
</PropertyGroup>
<ItemGroup>
    <!-- Does the equivalent of EmbedSources in MSBuild (hopefully won't be needed long term) -->
    <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>

Il est encore tôt pour cette méthode et il y a probablement quelques réserves à son utilisation, voir le bas de ce commentaire et la discussion connexe pour en savoir plus.

67
Graham

La dernière version de dotPeek (gratuite!) Peut servir de serveur de symboles et générer des fichiers pdb à la volée. Cela m'a permis de déboguer dans les dll servies via teamcity. 

Télécharger les ici:

http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program/

Instructions sur la façon de le configurer ici.

https://web.archive.org/web/20160220163146/http://confluence.jetbrains.com/display/NETCOM/dotPeek+Symbol+Server+and+PDB+Generation

29
anthonybell

Vous pouvez bien sûr configurer et configurer votre propre serveur de symboles , mais il est probablement plus facile de ...

  1. télécharger et installer Inedo's ProGet
  2. activer la diffusion de symboles sur le flux cible
  3. publier des packages de TeamCity vers le flux ProGet
  4. utiliser ProGet comme source principale de flux (car il peut regrouper plusieurs flux, y compris nuget.org)

Tout cela peut être fait avec l'édition gratuite de ProGet.


disclaimer - mon travail quotidien est à Inedo

8
Karl Harnagy

Dans votre .nuspec (directement sous <package>):

<files>
  <file src="bin\$configuration$\$id$.pdb" target="lib\net451\" />
</files>

(remplacez net451 par la plate-forme pour laquelle vous compilez)

6
user3638471

J'ai trouvé un moyen très simple de faire cela, sur lequel j'ai blogué ici:

https://mattfrear.com/2017/11/29/speed-up-development-in-a-nuget-package-centric-solution/

Cela ne fonctionne que si vous utilisez le nouveau style .NET Core .csproj avec <PackageReference> (sur .NET Core ou .NET Framework).

Cela suppose à nouveau que vous avez accès au code source du paquet NuGet.

  1. Construisez et compilez le paquet NuGet sur votre ordinateur local
  2. Copiez le fichier .dll que vous venez de compiler dans votre dossier de flux de packages NuGet local (sur ma machine, il s'agit de C:\Users\matt\.nuget\packages\), en écrasant le fichier .dll existant. 

C'est tout! Vous devriez pouvoir entrer dans le paquet pendant le débogage. Pas de déconner avec .pdbs ou les serveurs source. Cela a grandement accéléré mon cycle de développement.

2
Matt Frear

Si vous avez le code source du paquet, la méthode infaillible (mais éventuellement laborieuse) est la suivante:

  1. Ajoutez le code source du package à votre solution (cliquez avec le bouton droit de la souris sur Solution -> Ajouter un projet existant).
  2. Parcourez tous vos projets dans la solution et supprimez la référence NuGet à la bibliothèque (ouvrez le dossier Références sous chaque projet et supprimez la référence au package.) Ajoutez ensuite une référence au projet de package NuGet dans votre solution. (Par exemple, cliquez avec le bouton droit sur Références, ajoutez une référence, choisissez Projets et cochez la case correspondant au projet.)

Je devais le faire de cette façon lorsque la méthode que je voulais déboguer à l'intérieur du paquet NuGet était appelée par le framework et non par mon code, je ne pouvais donc pas y entrer. (Dans mon cas, la méthode était un ASP.NET DelegatingHandler).

Une fois que vous avez terminé, vous voudrez annuler toutes vos modifications via le contrôle de source afin que le package NuGet soit correctement référencé.

2
Matt Frear

Depuis que cette question a été publiée, Jetbrains a écrit un article complet sur son blog sur la manière de procéder. Les étapes peuvent être résumées comme suit:

  • Installer Outils de débogage pour Windows sur les agents.
  • Installez et activez le plugin Symbol Server .
  • Ajoutez la fonctionnalité de génération Index Files Index à vos configurations de construction.
  • Assurez-vous que les fichiers PDB sont générés sous forme d'artefact.
  • Configurez Visual Studio pour utiliser TeamCity en tant que serveur source.

Si vous utilisez les étapes de construction du package Nuget, vous pouvez cocher 'Inclure les symboles et la source' pour générer un .symbol.nupkg contenant les PDB. Selon que l'indexeur de fichiers Symbol est suffisamment intelligent pour consulter ou non ce fichier, vous devrez peut-être modifier l'extension du fichier pour que tout fonctionne correctement.

Les détails complets sont donnés ici: https://blog.jetbrains.com/teamcity/2015/02/setting-up-teamcity-as-symbol-and-source-server/

2
Schneider

C'est ce que j'ai trouvé efficace, mais toutes les étapes ne sont probablement pas nécessaires ...

Note: cela ne vous permet pas de déboguer les deux, mais uniquement le nuget package ou la solution dans laquelle il est installé.

  1. Exécuter Visual Studio en tant qu'administrateur
  2. Ouvrez et démarrez l'application hôte (celle dans laquelle vous avez installé le paquet Nuget) sans déboguer (Ctrl + F5)
  3. Dans la solution du package Nuget, assurez-vous que Tools > Options > Debugging > General > "Require source files to exactly match the original version" est coché ET NON.
  4. Assurez-vous que "Enable just my code" est PAS coché
  5. Ajoutez un nouveau dossier dans Tools > Options > Debugging > Symbols pointant vers le répertoire source du paquet Nuget. (Vous entrez littéralement le chemin du dossier, voir image ci-dessous)
  6. Cliquez sur Debug > Attach to Process...
  7. Trouvez iisexpress (il peut y en avoir plusieurs, cela ne fera pas de mal à tous)

 Screenshot of Symbol Source Locations

2
hofnarwillie

Si votre code se trouve dans un référentiel Git public ou, du moins, sur votre réseau, est accessible sans authentification, alors GitLink serait une option:

https://github.com/GitTools/GitLink

GitLink rend les serveurs de symboles obsolètes en modifiant le PDB pour qu'il pointe vers le serveur Git. Mais, comme indiqué précédemment, il est donc nécessaire que le référentiel Git soit public - jusqu'à présent, il n'y avait pas de moyen "approprié" d'authentification lors de l'accès à un référentiel privé.

0
BatteryBackupUnit