Roslynのドキュメントでは、いくつかのコードをコンパイルしてコンパイルエラーを表示する方法として以下の例を挙げています。Roslynメモリ内コードの静的コード解析
下の例の変数sourceCodeに含まれるコードでスタティックコード分析を実行する方法を知っている人がいるかどうかは疑問でした。私はテストプロジェクトにStyleCop.Analyzersを追加しましたが、この段階でどのようにスタイル分析(例:可読性)を実行するのかを見ることはできません。
これをStyleCop.Analyzersで実行することは可能ですか、それとも別の方法がありますか?どんな提案も感謝して受け取りました。
ありがとうございました。
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);
}
}
}
}
}
}
StyleCop.Analyzersは、一連のルールであり、プロジェクトコードを分析します。このルールは、ソースをコンパイルするときにC#コードを分析します。 '.csproj'ファイルを見て、このようなものが見つかると、この情報を取り戻すことができます。' 'したがって、StyleCop.Analyzersは、コードを含む静的または動的(sourceCode1 + sourceCode2)文字列を分析することはできません。 –
ありがとう@GeorgeAlexandria – eslsys