2017-04-10 1 views
1

J'ai un add-in VS2013 que je porte sur VS2017 et je ne peux pas parcourir les filtres de mon projet de la même manière que ça marche en 2013. Voici mon code:Itération de l'arborescence VCFilter dans Visual Studio 2017

public void OnSolutionLoaded() 
{ 
    DTE2 dte = Package.GetGlobalService(typeof(DTE)) as DTE2; 
    foreach (Project lProject in dte.Solution.Projects) 
    { 
     if(lProject.Kind == vcContextGuids.vcContextGuidVCProject) 
     { 
      VCProject proj = (VCProject)lProject.Object; 
      foreach (VCFilter childFilter in (IVCCollection)proj.Filters) 
      { 
       RecurseFilters(childFilter); 
      } 
      } 
    } 
} 

private void RecurseFilters(VCFilter filter) 
{ 
    foreach(VCFilter childFilter in (IVCCollection)filter.Filters) 
    { 
     RecurseFilters(childFilter); 
    } 
} 

Si je mets un point d'arrêt dans la récursion, il n'a jamais frappé, malgré le fait que j'ai beaucoup de filtres dans les filtres. Le niveau supérieur des filtres est trouvé très bien.

J'ai vérifié pour LSL, et ce n'est pas allumé. Je cours VS 15.1.

Qu'est-ce que je fais mal?

EDIT: Le code ci-dessus fonctionne comme prévu jusqu'à ce que vous ajoutiez un dossier de solution, puis la récursivité ne fonctionne plus. Je suppose que cela est un bug car cela est différent du comportement dans VS2013

Example of breaking solution folder

Répondre

1

VS 15.1 a toujours un bogue dans les filtres vc lorsque les projets sont chargés à partir du cache (voir https://blogs.msdn.microsoft.com/vcblog/2016/10/05/faster-c-solution-load-with-vs-15/ comment activer/désactiver le cache de projet vc).

Le bug sera corrigé dans l'une des prochaines mises à jour VS (15.3 probablement). Et pour expliquer le comportement que vous voyez: le cache de projet n'est pas utilisé quand il y a un seul projet dans la solution, mais dès qu'il y en a deux ou plus (et le nombre de dossiers de solutions comme projet), desktop vc projects utilisent une implémentation différente qui lit depuis le cache au lieu de charger le projet msbuild.

donc comme solution de contournement pour l'instant, s'il vous plaît définir Outils - Options - éditeur de texte - C/C++ - expérimental - « Activer plus rapide du projet Load » false

+0

Malheureusement, je reçois toujours le même problème, même avec le chargement du projet plus rapide désactivé. –

+0

Et maintenant ça marche. Aucune idée pourquoi, probablement en raison d'un redémarrage. Merci de votre aide. –

0

S'il vous plaît vérifier si elle a des filtres enfants au niveau supérieur de filtres. comme ceci:

enter image description here

Si vous avez des filtres comme ci-dessus, vous pouvez frapper le point d'arrêt dans la récursion (la démo est créé par Visual Studio version 2017 15.1) comme ceci:.

enter image description here

+0

Si je crée un nouveau projet C++ cela fonctionne comme prévu, mais avec mon projet 2013 existant, j'ai migré dessus ne traverse toujours pas la hiérarchie. Je n'ai que les filtres de niveau supérieur. –

+0

Et si je crée un nouveau projet 2013 et l'importe en 2017 cela fonctionne très bien, donc il y a quelque chose d'étrange à propos de mon projet particulier –

+0

OK, trouvé le problème, c'est dossiers de la solution. Dès que vous en ajoutez un, il casse l'itération de l'arbre. –