В Visual Studio 2015 это возможно с помощью диагностики Roslyn (и дополнительного Fix). Новый редактор кода Visual Studio 2015 использует Roslyn под капотом, чтобы все это анализировало механизм Code Analaysis, Metrics и Refactoring, основанный на нем.
Образец реализации такой проверки - given on the Roslyn github page. Полная реализация будет немного важна для ответа здесь, на StackOverflow, поскольку это влечет за собой ряд шагов, которые нужно пройти, и представляет собой полный учебник, но это полный учебник something similar is given here. и может быть основой для вашей работы. (задавайте дополнительные вопросы позже). Код для standard rules that ship with the product can be found in the Roslyn GitHub as well.
Этот фрагмент кода должен быть довольно близким, но я его не тестировал. Создание стандартного диагностического & исправления в соответствии с totorial Рослин SDK и заменить Initialize
и AnalyzeNode
методы с (замените пространство имен собственных):
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.InvocationExpression);
}
private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context)
{
InvocationExpressionSyntax invocationExpression = context.Node as InvocationExpressionSyntax;
IMethodSymbol methodSymbol = context.SemanticModel.GetSymbolInfo(invocationExpression).Symbol as IMethodSymbol;
if (
methodSymbol != null
&& methodSymbol.Name == "ReplaceNewline"
&& methodSymbol.ContainingNamespace.Name == "MySampleFix"
&& methodSymbol.OriginalDefinition.Parameters.Length == 1)
{
if (invocationExpression.ArgumentList.Arguments.Count() == 1)
{
LiteralExpressionSyntax arg =
invocationExpression.ArgumentList.Arguments[0].Expression as LiteralExpressionSyntax;
if (arg != null && arg.Token.ValueText == "|")
{
Diagnostic.Create(Rule, invocationExpression.GetLocation());
}
}
}
}
Если вы хотите сделать что-нибудь обратную совместимость с более старыми версиями Визуальное Studio вы можете выбрать собственное правило анализа кода. Этот example rule берет ввод на вызов Regex.Match
и Regex.Replace
и выдает предупреждение, когда он не компилируется. Было бы еще проще дать предупреждение, когда оно является постоянной строкой.
Расширения Visual Studio, такие как Resharper и CodeRush, предлагают SDK, который может делать что-то похожее на FxCop, но они встроены в среду IDE, например, Roslyn. Возможно, вам будет предложен этот подход.
Если вы хотите что-то в редакторе кода, который не использует никаких расширений или настроек, то добавлениев кодировку - это столько, сколько вы можете сделать. В худшем случае вы можете ввести Debug.Assert(input != "|");
в методе, чтобы разработчики получили раннее предупреждение (при разработке/отладке), что они неправильно используют ваш API.
Может ли плагин ReSharper быть решением? –
@ Томас Нет, извините, но плагин ReSharper не будет подходящим решением для меня, поскольку я его не использую. Это должно быть сделано полностью с кодом в Visual Studio без добавления/установки каких-либо дополнительных программ. Но спасибо в любом случае ... – cramopy
Вы пробовали использовать метод Wrapper около 2 частных методов, один из которых устарел, но только вызывается, если вход «|»? – Eris