2016-02-22 2 views
0

Я пытаюсь подавить SA1401 (имена полей должны быть частное) предупреждение, используя следующий код:C#: SA1401 предупреждение StyleCop не могут быть удалены

[SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "SA1306:FieldNamesMustBeginWithLowerCaseLetter", Justification = "Some field names should be capital letters")] 
[SuppressMessage("Microsoft.StyleCop.CSharp.Maintainability", "SA1401:FieldsMustBePrivate", Justification = "Some fields must be public")] 
[EventSource(Guid = "9E1C02F1-9B14-4906-AA88-ED2140A102B7")] 
public class ProcessApiEventSource : EventSource 
{ 
    /// <summary> 
    /// Event source logger instance 
    /// </summary> 
    public static ProcessApiEventSource Log = new ProcessApiEventSource(); 
    ... 
} 

Хотя предупреждение SA1306 подавляются, SA1401 предупреждения не являются подавляется. Может ли кто-нибудь предположить, почему подавление не работает? Кроме того, есть ли способ изменить декларацию с помощью аксессуаров, чтобы код придерживался этого правила и не знает этого предупреждения?

ответ

1

Чтобы устранить ошибку, вы можете преобразовать публичное поле в личное поле и выставить его как общедоступное.

public class ProcessApiEventSource : EventSource 
{ 
    private static ProcessApiEventSource MyLog = new ProcessApiEventSource(); 

    public static ProcessApiEventSource Log { get { return MyLog; } } 
} 

И если вы используете .NET 4.6, то вы также можете использовать выражение свойства только для getter.

public class ProcessApiEventSource : EventSource 
{ 
    public static ProcessApiEventSource Log => new ProcessApiEventSource(); 
} 
1
[SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1401:FieldsMustBePrivate", Justification = "Some fields must be public")] 

Я использовал это, чтобы подавить сообщение, как описано here.

Смежные вопросы