Может ли NDepend определить, где используется строковая интерполяция в C#? - PullRequest
2 голосов
/ 15 апреля 2020

Я хотел бы применить правило, согласно которому операторы журнала не используют интерполяцию строк:

Пример Log($"Added {count} messages.");

Вместо этого я хочу призвать / заставить разработчиков использовать структурированное ведение журнала, которое означает передачу значений в качестве отдельных аргументов методу Log, который поддерживает эту концепцию.

Как можно использовать NDepend для этого, предполагая, что это возможно? Если не NDepend, можно ли это сделать с помощью анализатора Roslyn?

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

SerilogAnalyzer - это анализатор на основе Roslyn, который сделает это за вас.

SerilogAnalyzer Example

0 голосов
/ 16 апреля 2020

Поскольку при интерполяции строк вызывается System.String.Format(String,Object), вы можете написать такое правило с помощью NDepend CQLinq :

//<Name>Don't use string interpolation from Log method</Name>
warnif count > 0 
from m in Application.Methods where m.IsUsing ("System.String.Format(String,Object)")
where m.ParentNamespace.Name.Contains(".Log")
select m

String interpolation calls string format

...