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.
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.
À 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.
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.
Vous pouvez bien sûr configurer et configurer votre propre serveur de symboles , mais il est probablement plus facile de ...
Tout cela peut être fait avec l'édition gratuite de ProGet.
disclaimer - mon travail quotidien est à Inedo
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)
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.
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.
Si vous avez le code source du paquet, la méthode infaillible (mais éventuellement laborieuse) est la suivante:
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é.
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:
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/
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é.
Tools > Options > Debugging > General > "Require source files to exactly match the original version"
est coché ET NON."Enable just my code"
est PAS coché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)Debug > Attach to Process...
iisexpress
(il peut y en avoir plusieurs, cela ne fera pas de mal à tous)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é.