Roslyn 已禁止分析器功能。我想在我自己的代码中使用通过带有 WithAnalyzers 扩展方法的 CSharpCompilation 类动态编译代码(基于 C# 语言的自己的脚本引擎)。
我尝试在 nuget — 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.