La documentation de Roslyn donne l'exemple ci-dessous pour compiler du code et afficher des erreurs de compilation. Je me demandais si quelqu'un connaît un moyen d'effectuer une analyse de code statique sur le code contenu dans la variable sourceCode dans l'exemple ci-dessous. J'ai ajouté StyleCop.Analyzers à mon projet de test mais je ne vois pas à ce stade comment cela pourrait être utilisé pour effectuer une analyse de style (par exemple la lisibilité). Est-il possible de faire cela avec StyleCop.Analyzers ou existe-t-il une autre approche? Toute suggestion reçue avec gratitude.Analyse de code statique sur le code en mémoire de Roslyn
Merci.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace SemanticsCS
{
class Program
{
static void Main(string[] args)
{
var sourceCode = @"using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(""Hello, World!"");
}
}
}";
SyntaxTree tree = CSharpSyntaxTree.ParseText(sourceCode);
var root = (CompilationUnitSyntax)tree.GetRoot();
var compilation = CSharpCompilation.Create("HelloWorld")
.AddReferences(
MetadataReference.CreateFromFile(
typeof(object).Assembly.Location))
.AddSyntaxTrees(tree);
using (var ms = new MemoryStream())
{
EmitResult result = compilation.Emit(ms);
if (!result.Success)
{
IEnumerable<Diagnostic> failures = result.Diagnostics.Where(diagnostic =>
diagnostic.IsWarningAsError ||
diagnostic.Severity == DiagnosticSeverity.Error);
foreach (Diagnostic diagnostic in failures)
{
Console.WriteLine(diagnostic.ToString());
Console.Error.WriteLine("{0}({1})", diagnostic.GetMessage(), diagnostic.Id);
}
}
}
}
}
}
Cette règle analyse le code C# lorsque vous essayez de compiler des sources. Vous pouvez récupérer cette information si vous regardez le fichier '.csproj' et trouvez que quelque chose ressemble à ceci' '. Donc, StyleCop.Analyzers ne peut pas analyser la chaîne statique ou dynamique (sourceCode1 + sourceCode2) qui contient un code. –
Merci @GeorgeAlexandria – eslsys