SORU
8 Aralık 2014, PAZARTESİ


Nasıl benim kod tanı sözdizimi yapmak düğüm eylem kapalı dosyalar üzerinde çalışabilir miyim?

Kod tanılama Roslyn kullanarak (VS2015 Önizleme) bir dizi inşa ediyorum. İdeal olarak, eğer normal bir dil kuralı ihlal olsaydım gibi sürekli hatalar olarak hareket etmek ürettikleri hataları isterim.

Seçenekleri bir sürü var, ama hiçbirini sürekli çalışmak için yaşıyorum. Temel sözdizimi düğüm bir eylem uygulamak için idare ettik, yani bir kayıtlı

context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.InvocationExpression);

tanı sınıfımdan Initialize yöntemi. Açtığım karşına ne çıksa beğenirsin, tanı VSIX proje çalışırken (), VS2015 bu gösterileri ihlal eden bir dosya hatası:

  • Kod doğru biraz altında kırmızı şeyler
  • Marjin kırmızı blok
  • Hata listesi hata

Ancak, hata dosyayı kapatıyorum.

De context.RegisterCompilationEndAction kullanarak denedim, ama bu iki sorunu var:

  • Tutarsız ateş gibi görünüyor.Genellikleçözüm açtığımda ateş edebiliyor, ama her zaman değil. Temiz/tuhaf görünüyor yeniden, ateş değil.
  • Teşhis oluşturulan rağmendoğrudantanı uygulamak için analiz yöntemi Yangında, ziyaretçi, beceriksiz olabilir, bu gibi kullanıyorum:

    private static void AnalyzeEndCompilation(CompilationEndAnalysisContext context)
    {
        foreach (var tree in context.Compilation.SyntaxTrees)
        {
            var visitor = new ReportingVisitor(context.Compilation.GetSemanticModel(tree));
            visitor.Visit(tree.GetRoot());
            foreach (var diagnostic in visitor.Diagnostics)
            {
                context.ReportDiagnostic(diagnostic);
            }
        }
    }
    

    Tanı oluşturulan olduğunu biliyorum - ReportDiagnostic satırında bir kesme noktası birkaç kez vurdu ama hata listesinde göremiyorum. (Bu yöntemi başında ReportDiagnostic oysa benzer bir çağrı, ya da dosya yolu ile sözdizimi ağaç başınayokgösterilir.)

Burada yanlış ne yapıyorum? İlk yaklaşım (sözdizimi düğüm bir eylem) ideal uygun oLurdu - Benim ihtiyacım olan şey tam bağlam verir. Orada derleyici "tam projesi" yanı sıra "IDE" kullanma? derleme sadece etkileşimli bunun için yapmam gereken proje özellikleri bazı ayar Bu belki de henüz bitmiş değil, oldukça Roslyn entegrasyon biraz?

(Eğer yararlı olacaktır eğer sınıf için tam kodu dahil edebilirim - bu durumda sinyal daha fazla gürültü olacağını sanıyorum.)

CEVAP
8 Aralık 2014, PAZARTESİ


Kapalı dosya sorunları için, tüm tanılama bildirdi amacımız o, açık veya kapalı ya da Dosyaları. Kapalı dosyalarda teşhis eklemek için geçiş yapabilirsiniz Araçlar\Seçenekler\Text Editor\C#\Gelişmiş önizleme için kullanıcı bir seçenek yoktur. VS 2015 yayımlanmadan önce bu varsayılan yapmak için umut. Ancak, bu seçenek yalnızca VS içinde analiz için geçerlidir. Eğer Çözümleyicisi iletilir derleyici (ekleyerek analiz içinde Çözüm Gezgini, ya da ekleyerek bir NuGet paketi başvuru paketi ile analiz karşıt olarak, yükleme bir VSIX içine Visual Studio), sonra derleyici raporutümdosyaları açık olup olmadığını veya kullanıcı oluşturduğunda teşhis ne olursa olsun.

RegisterCompilationEndedAnalyzer, ikinci sorun için güvenilir VS 2015 Preview Visual Studio içinde adı değil. Bu bazı iyileştirmeler yeniden analiz "" yöntemi vücudumuzun içinde. yerel değişiklikler için her şeyi önlemek için yapıyoruz çünkü. Benzer nedenlerle, biz şu anda konumları ile raporlanan hata raporu yokyöntem gövdesi. Biz sadece son zamanlarda değişti o yüzden VS olacak kapalı bir tam re-analiz sonra daha uzun bir gecikme ve RegisterCompilationEndedAnalyzer çağrılmalıdır güvenilir bir gelecek inşa edeceğiz rapor hataları ne olursa olsun konum.

Ancak, sizin durumunuz için doğru bir SyntaxNodeAnalyzer kal, VS seçeneği kapalı dosyaları tanılama etkinleştirmek için anahtarı ve proje derleme seçenekleri için tanı takın.

Bu yardımcı olur umarım!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Good Creative Academy

    Good Creativ

    19 Kasım 2009
  • NicoleGrippo

    NicoleGrippo

    14 Kasım 2006
  • sWooZie

    sWooZie

    9 ŞUBAT 2006