Roslyn 已禁止分析器功能。我想在我自己的代码中使用通过 CSharpCompilation 类和 WithAnalyzers 扩展方法动态编译代码。我尝试在 https://www.nuget.org/packages/Microsoft.CodeAnalysis.BannedApiAnalyzers 添加包引用,但该包无法用作常规 nuget 包。 CSharpSymbolIsBannedAnalyzer 类标记为未知。
我的代码是这样的:
var compilation = CSharpCompilation.Create(/* made syntax tree + dll refs */);
var analyzers = ImmutableArray.Create<DiagnosticAnalyzer>(
new CSharpSymbolIsBannedAnalyzer()); // <- unknown type
var compilationWithAnalyzers = compilation.WithAnalyzers(
analyzers,
new AnalyzerOptions(ImmutableArray.Create<AdditionalText>(new BannedSymbolsAdditionalText(@"T:System.Diagnostics.Process;Don't use Process"))),
cancellationToken);
但是当我尝试编译时 - CSharpSymbolIsBannedAnalyzer 是未知类型。
要在自己的项目中使用 Banned API 分析器,您不需要在代码中使用分析器,只需添加 NuGet 包引用即可:
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="3.3.4" PrivateAssets="All" />
</ItemGroup>
BannedSymbols.txt
文件添加到项目的编译中:<ItemGroup>
<AdditionalFiles Include="$(MSBuildThisFileDirectory)BannedSymbols.txt" />
</ItemGroup>
BannedSymbols.txt
文件,例如:P:System.DateTime.Now; Use System.DateTime.UtcNow instead.
M:System.DateTimeOffset.op_Implicit(System.DateTime); Do not implicitly cast DateTime to DateTimeOffset.