J'ai deux solutions dans mon espace de travail, disons A et B.
La solution A est un projet plus ancien que j'ai fini de coder il y a quelque temps. Dans la solution B, je dois utiliser certaines classes de la solution A. Pour ce faire, j'ajoute une référence à la dll de l'un des projets de la solution A.
Le problème est quand j'essaye de déboguer. Je veux aussi pouvoir entrer dans le code de A. Visual studio n'est pas en mesure de charger le code de ces classes ("Il n'y a pas de code source disponible pour l'emplacement actuel.") Et je ne peux voir que le démontage, ce qui n'est pas utile.
Le seul moyen que je connaisse pour déboguer les classes de la solution A est d'exécuter la solution B, de détacher tous les processus (dans l'élément de menu Déboguer) et d'attacher le processus de la solution A.
Cependant, c'est très gênant et je ne peux déboguer A OU B qu'à la fois.
Existe-t-il un moyen d'autoriser l'accès au code des dll référencées (pour lesquelles j'ai le code source)?
Solution: Mon erreur a été de penser qu'un projet ne peut faire partie que d'une seule solution. En fait, un projet peut faire partie de n'importe quel nombre de solutions.
Lorsque vous avez besoin de référencer l'ancien projet, vous devez simplement ajouter le projet à la solution. Pour ce faire, cliquez avec le bouton droit sur la nouvelle solution dans l'Explorateur de solutions> Ajouter> Projet existant.
Ensuite, vous pourrez ajouter la référence du projet. Comme d'autres l'ont écrit, vous devriez probablement éviter complètement d'utiliser des références dll à votre propre code (ou à tout autre code que vous pourriez avoir besoin de modifier et de déboguer).
Une très bonne référence à la façon dont les solutions doivent être conçues peut être trouvée dans MSDN .
Réponses:
Si vous avez une référence de projet , cela devrait fonctionner immédiatement.
S'il s'agit d'une référence de fichier (dll), vous avez besoin que les symboles de débogage (le fichier «pdb») se trouvent dans le même dossier que la dll. Vérifiez que vos projets génèrent des symboles de débogage (propriétés du projet => Build => Advanced => Output / Debug Info = full); et si vous avez copié la dll, mettez la pdb avec elle.
Vous pouvez également charger des symboles directement dans l'EDI si vous ne souhaitez copier aucun fichier, mais c'est plus de travail.
L'option la plus simple est d'utiliser des références de projet!
la source
J'ai eu le même problème. Il est ce que j'ai trouvé:
1) Assurez-vous que tous les projets utilisent le même Framework (c'est crucial!)
2) dans Outils / Options> Débogage> Général, assurez-vous que "Activer uniquement mon code (géré uniquement) n'est PAS coché
3) dans Outils / Options> Débogage> Symboles, effacez tous les symboles mis en cache, décochez et supprimez tous les emplacements de dossier sous la zone de liste "Emplacements des fichiers de symboles (.pdb)", à l'exception de la valeur par défaut "Serveurs de symboles Microsoft", mais décochez-la également. Supprimez également tous les chemins statiques dans la zone de texte "Symboles de cache dans ce répertoire". Cliquez sur le bouton "Vider le cache de symboles". Enfin, assurez-vous que le bouton radio "Uniquement les modules spécifiés" est coché.
4) dans le menu Build / Configuration Manager pour tous les projets, assurez-vous que la configuration est en mode Debug.
la source
Un autre point à garder à l'esprit, assurez-vous que les dll référencées ne sont pas installées dans le GAC. Après les tests, j'ai installé mes dll dans le GAC pour faire des tests au niveau du système. Plus tard, quand j'ai dû déboguer à nouveau mon code, je ne pouvais pas entrer dans les assemblys référencés jusqu'à ce que je les ai supprimés du GAC.
la source
Étape 1: Allez dans Outils -> Option -> Débogage
Étape 2: décochez Activer uniquement mon code
Étape 3: décochez Exiger que le fichier source corresponde exactement à la version d'origine
Étape 4: décochez Pas au-dessus des propriétés et des opérateurs
la source
J'avais les
*.pdb
fichiers dans le même dossier et utilisé les options d' Arindam , mais cela ne fonctionnait toujours pas. Il s'est avéré que j'avais besoin d'activer Activer le débogage de code natif qui se trouve sous Propriétés du projet> Déboguer .la source
Lorsque vous souhaitez définir un point d'arrêt dans le code source d'une DLL référencée, assurez-vous d'abord que vous disposez d'un fichier pdb disponible. Ensuite, vous pouvez simplement ouvrir le fichier de code source associé et définir un point d'arrêt là-bas. Le fichier source n'a pas besoin de faire partie de votre solution. Comme expliqué dans Comment puis-je définir un point d'arrêt dans le code référencé dans Visual Studio?
Vous pouvez consulter vos points d'arrêt via la fenêtre des points d'arrêt, disponible via Debug -> Windows -> Breakpoints.
Cette approche présente l'avantage que vous n'êtes pas obligé d'ajouter un projet existant à votre solution uniquement à des fins de débogage, car le laisser de côté m'a fait gagner beaucoup de temps de construction. Évidemment, créer une solution avec un seul projet est beaucoup plus rapide que créer une solution avec beaucoup d'entre eux.
la source
Assurez-vous que votre DLL n'est pas enregistrée dans le GAC. Visual Studio utilisera la version dans le GAC et il n'aura probablement aucune information de débogage.
la source
Je ne veux pas inclure un projet de bibliothèque de classes externe dans certaines de mes solutions, alors j'entre dans les assemblys que je consomme d'une manière différente.
Mes solutions ont un répertoire "Common Assemblies" qui contient mes propres DLL d'autres projets. Les DLL que je référence ont également leurs fichiers PDB d'accompagnement pour le débogage.
Afin de déboguer et de définir des points d'arrêt, j'ai défini un point d'arrêt dans la source de l'application consommatrice où j'appelle une méthode ou un constructeur de l'assembly, puis j'étape INTO (F11) l'appel de méthode / constructeur.
Le débogueur chargera le fichier source de l'assembly dans VS et de nouveaux points d'arrêt à l'intérieur de l'assembly peuvent être définis à ce stade.
Ce n'est pas simple, mais fonctionne si vous ne souhaitez pas inclure une nouvelle référence de projet et souhaitez simplement référencer un assemblage partagé à la place.
la source
Ça doit marcher. J'avais l'habitude de déboguer un fichier .exe et une dll en même temps! Ce que je suggère est 1) Incluez le chemin de la dll dans votre projet B, 2) Ensuite compilez dans le débogage de votre projet A 3) Contrôlez que le chemin pointe sur le fichier A dll et de pdb .... 4) Après cela, vous commencez par déboguer le projet B et si tout va bien, vous pourrez déboguer dans les deux projets!
la source
Le moyen le plus simple que j'ai trouvé en utilisant VisualStudio 2019 pour déboguer une bibliothèque externe à laquelle vous faites référence dans NuGet consiste à suivre les étapes suivantes:
Outils> Options> Débogage> Général> Décochez "Activer uniquement mon code"
Accédez à l'Explorateur d'assembly> Ouvrir à partir du cache de packages NuGet
Tapez le nom du package NuGet que vous souhaitez déboguer dans le champ de recherche et cliquez sur 'OK'
Depuis l'Explorateur d'assemblage, cliquez avec le bouton droit sur l'assemblage importé et sélectionnez 'Générer Pdb'
Sélectionnez un chemin personnalisé dans lequel vous souhaitez enregistrer le fichier .PDB et le cadre pour lequel vous souhaitez qu'il soit généré
Copiez le fichier .PDB du dossier généré dans votre dossier Debug et vous pouvez maintenant définir des points d'arrêt sur le code de la bibliothèque de cet assembly
la source