2016-05-16 1 views
2

TL; DRComment autoload Roslyn Analyzer (sans codefix)

  • Création VSIX Package
  • Ajouté Analyzer article projet
  • Pressé F5.
  • L'instance expérimentale démarre mais l'analyseur n'est pas chargé et ne peut pas être débogué.
  • L'ajout manuel de l'analyseur fonctionne.
  • Question: comment charger automatiquement l'analyseur?

Description du problème:

Il y a beaucoup de tutoriels (même docs officiels) qui commencent par un modèle de projet: Analyzer with Code Fix (NuGet + VSIX). Cependant, dans la dernière version de .NET Compiler Platform, je n'ai pas ce modèle de projet. J'ai donc créé un VSIX project. Ensuite, j'ai créé un élément de projet Analyzer. Notez que je n'ai pas d'article CodeFix car je n'ai pas besoin de corriger le code, seulement afficher quelques avertissements.

C'est ce que j'ai (je l'ai fait quelques changements):

[DiagnosticAnalyzer(LanguageNames.CSharp)] 
public class MyAnalyzer : DiagnosticAnalyzer 
{ 
    public const string DiagnosticId = "MyAnalyzer"; 
    internal static readonly LocalizableString Title = "MyAnalyzer Title"; 
    internal static readonly LocalizableString MessageFormat = "MyAnalyzer"; 
    internal const string Category = "MyAnalyzer Category"; 

    internal static DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Warning, true); 

    public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics 
     => ImmutableArray.Create(Rule); 

    public override void Initialize(AnalysisContext context) 
    { 
     context.RegisterSyntaxNodeAction(Analyze, SyntaxKind.IfStatement); 
    }   

    private void Analyze(SyntaxNodeAnalysisContext context) 
    { 
     IfStatementSyntax ifStatement = context.Node as IfStatementSyntax; 

     if(ifStatement == null) 
      return; 

     context.ReportDiagnostic(
      Diagnostic.Create(
       Rule, 
       context.Node.GetLocation(), 
       "Hey, this is an IF statement.")); 
     } 

    } 
} 

Voilà. Le projet contient uniquement ce fichier, un .vsixmanifest et un packages.config. Lorsque j'exécute le projet en mode de débogage (avec F5), l'instance expérimentale est chargée et je peux voir le paquet dans Extensions and Updates

Cependant, aucun point d'arrêt n'est atteint (aucun symbole chargé) et l'analyseur n'est pas visible dans la liste des analyseurs (dans l'explorateur de solutions).

Je procédez comme suit:

  • dossier Renommer dans le dossier de sortie .vsix.zip et l'ouvrir
  • Extrait du DLL d'assemblage du zip
  • analyseurs clic droit dans la solution explorateur
  • manuellement parcourir/ajouter DLL

assemblée de l'analyseur Puis tout d'un coup, les symboles sont chargés et de bugger s'arrête sur les points d'arrêt.

Existe-t-il un moyen de charger automatiquement analzyer dans l'instance expérimentale? Est-ce que je manque une configuration?

+0

Les modèles ont récemment été mis à jour: https://visualstudiogallery.msdn.microsoft.com/2ddb7240-5249-4c8c-969e -5d05823bcb89 – jessehouwing

Répondre

3

Le modèle VSIX est disponible auprès de Visual Studio gallery.

Je suppose que ce qui manque dans votre projet vsix est la liste correcte des composants dans le manifeste du paquet VSIX.Vous devez définir à la fois un MefComponent et un Analyzer dans la liste des actifs:

enter image description here

+0

Lorsque j'essaie d'installer l'extension à partir du lien ci-dessus, il est dit que je l'ai déjà installé. Cependant, je n'ai pas un tel modèle de projet ("Analyzer with CodeFix"). Je vais vérifier cela et fournir des commentaires. –

+0

Quelle est la version du framework .NET que vous avez sélectionnée dans le nouveau projet Ui? – jessehouwing

+0

vous êtes sur la bonne voie. J'avais 4.5.1 sélectionné. Quand je passe à 4.5.2+, il montre le modèle. Merci. Je ne savais pas qu'il était disponible uniquement en 4.5.2 ou plus tard. –