2013-06-08 15 views
12

ReSharper'ı kullanarak ReSharper'ı kullanmak faydalı olabilir mi, ancak ReSharper'ı kullanan bloaty kodu mu? Örneğin, ayrıntılı günlük kaydı eklemek istediğimde, işlevsel kodun loglama kodu etrafında durmasını sağlamak iyi olurdu.ReSharper kullanarak günlüğe kaydetme kodu gri

Kodumdaki kalıpları eşleştirmek ve gri renklerle vurgulamak için ReSharper'ın Desen Kataloğu aramasını kullanmayı denedim ancak yalnızca İpuçları, Öneriler, Uyarılar ve Hatalar'ı destekliyor.

Derlenecek kod yapmak istememesine rağmen, Yayın modunda Debug.WriteLine'un nasıl görüntülendiğine benzer bir şey arıyorum.

+3

) :) kesmek olduğunu söyledi gibi Bu ilginç bir fikir. Onların sorun izleyicide üzerine hatırlatıyoruz: http://youtrack.jetbrains.com/issues/RSRP –

+0

Burada öne sürülmüştür: https://youtrack.jetbrains.com/issue/RSRP-437773 hareket edemiyorsunuz –

cevap

-3

Sadece bunu yapma.

Yapılandırılmamış kodla başa çıkmanın kötü bir yolu var ve bu yalnızca biraz yardımcı olacak ve sadece size yardımcı olacak. Bunu önerdiğiniz şekilde yaparsanız (mümkünse), diğer geliştiriciler ReSharper'ı kurmalı ve iş mantığının göze çarpmasını istiyorsa sizin gibi yapılandırmalıdır.

Bu sizin sorduğunuz şey değil, ancak daha iyi bir yaklaşımın, ayrıntılı günlük kaydını ayrı yöntemlere/sınıflara taşımak olduğunu düşünüyorum. Ardından günlük kaydı ile ilgili kod, mevcut yöntemlerinizde yalnızca tek bir yöntem çağrısı olur.

+1

yöntemleri sıralamak için tüm sıradan kod (günlüğe kaydetme veya denetleme gibi), genellikle mantık zor ile karıştırılır. –

9

Bunu başarabilirsiniz, ancak bu bir kesmek gibidir. Yapabilecekleriniz, ReSharper'ın External Annotations kullanarak, ConditionalAttribute ile kayıt yöntemlerinizi süslüyor.

Açıklamalar örneğin, Release içinde Debug.WriteLine hattını grileştirebilir bilir nasıl Debug.Write... satır [Conditional("DEBUG")] özniteliği ile dekore edilmiştir çünkü, bu, hemen hemen her yerde ReSharper kullanılmaktadır.

Ne ReSharper yaparak hile olduğunu yapabileceği böyle bir koşullu yöntem Logger yöntemlerine var düşünüyorum. Bu özelliği harici olarak XML yoluyla uygulayarak yapabilirsiniz.

  1. YourLogger.ExternalAnnotations.xml adlı bir dosya oluşturun, örneğin:

    Burada bunu yapabileceğini nasıl, my blog içinde böyle bir şey yaptığını hakkında yazdığı NLog.ExternalAnnotations.xml ve logger grubunun yanına yerleştirin.
  2. aşağıdaki ekleyin:
<assembly name="NLog"> 
    <member name="M:NLog.Logger.Info(System.String)"> 
    <attribute ctor="M:System.Diagnostics.ConditionalAttribute.#ctor(System.String)"> 
     <argument>LOG</argument> 
    </attribute> 
    </member> 
    <member name="M:NLog.Logger.Debug(System.String)"> 
    <attribute ctor="M:System.Diagnostics.ConditionalAttribute.#ctor(System.String)"> 
     <argument>LOG</argument> 
    </attribute> 
    </member> 
</assembly> 

siz "grileştirebilir" istediğiniz her yöntem için, yöntemin XML Doküman kimliği adıyla bir <member> blok eklemek gerekir. ReSharper 8 EAP'de, ReSharper'ın Edit menüsünün altında bulunan Copy XML-Doc kimliğine Panoya Kopyala.

Bu, ReSharper'ın motorunun, logger'ın meta verileri içinde tanımlanmış bir [Conditional("LOG")] olduğunu düşünmesine neden olur.

İstediğiniz tüm yöntemleri ekledikten sonra, çözümü yeniden yüklemeniz yeterlidir. Aradığın şeyi almalısın (bir çeşit ...Ben, bu

ReSharper hackery

+0

Bunu yapmak için tavsiye etmiyorum, çünkü [Conditional] 'özniteliği tarafından silinen çağrılar C# derleyici kontrol akış grafiği ve kesin atama analizi yanı sıra R # kod analizi etkiler. ReSharper, [Conditional] 'inkasyonlarının bir parçası olarak değerlendirilen ifadelerle ilgili yararlı bilgileri görmezden gelecektir, bu sadece kodun grileşmesi için" çok fazla "demektir. Daha iyi bir eklenti yazınız :) – ControlFlow

+1

@ControlFlow Muhtemelen "bunu evde denemeyin" yasal uyarısını eklemeliyim :) –

İlgili konular