【发布时间】:2017-08-10 05:46:55
【问题描述】:
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文件并找到类似<Analyzer Include="..\packages\StyleCop.Analyzers.1.0.2\analyzers\dotnet\cs\StyleCop.Analyzers.CodeFixes.dll" />的内容,您可以检索此信息。所以 StyleCop.Analyzers 无法分析包含代码的静态或动态(sourceCode1 + sourceCode2)字符串。 -
感谢@GeorgeAlexandria
标签: c# roslyn roslyn-code-analysis