You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在同.NET Core解决方案中启用自定义Roslyn代码分析器?

解决.NET Core项目中Roslyn分析器引用不生效的问题

我之前也碰到过一模一样的情况——直接加ProjectReference根本没用,因为Roslyn分析器不是普通的项目依赖,得让MSBuild明确知道要把它作为分析器加载,而不是当成普通程序集引用。下面给你一步步拆解解决办法:

第一步:调整分析器项目的配置

首先得把你的Example.Analyzer项目的.csproj配置改对,让它输出符合Roslyn要求的结构:

打开Example.Analyzer.csproj,添加/修改以下内容:

<PropertyGroup>
  <TargetFramework>netcoreapp3.0</TargetFramework>
  <IsPackable>true</IsPackable>
  <PackageId>Example.Analyzer</PackageId>
  <Version>1.0.0</Version>
  <!-- 关键标记:告诉MSBuild这是个Roslyn分析器项目 -->
  <RoslynAnalyzer>true</RoslynAnalyzer>
</PropertyGroup>

<ItemGroup>
  <!-- 确保分析器DLL被打包到NuGet的指定目录(后续打包用) -->
  <None Include="$(OutputPath)\$(AssemblyName).dll" 
        Pack="true" 
        PackagePath="analyzers/dotnet/cs" />
</ItemGroup>

这个配置不仅标记了项目类型,还为后续打包NuGet包做好了准备。

第二步:正确引用分析器项目

方式一:开发阶段直接引用项目(推荐)

在你要使用分析器的目标项目的.csproj里,添加项目引用时必须指定正确的资产规则,否则分析器不会被加载:

<ProjectReference Include="..\Example.Analyzer\Example.Analyzer.csproj">
  <!-- 阻止分析器的依赖被传递到目标项目 -->
  <PrivateAssets>all</PrivateAssets>
  <!-- 明确告诉MSBuild要包含分析器资产 -->
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</ProjectReference>

添加完之后一定要重启Visual Studio(Roslyn缓存经常会拖后腿),再重新生成整个解决方案。

方式二:打包成NuGet包引用(适合稳定使用/分发)

如果不想一直依赖项目引用,也可以把分析器打包成NuGet包:

  1. 进入Example.Analyzer项目目录,运行命令:
    dotnet pack -c Release
    
  2. 生成的.nupkg文件会在bin/Release目录下
  3. 把这个包添加到本地NuGet源,或者直接在目标项目里通过本地文件引用它

这种方式下Roslyn会自动识别并加载NuGet包里的分析器,不需要额外配置。

第三步:验证分析器是否生效

可以用两种方式确认:

  • 在目标项目里写一段触发你自定义规则的代码,比如违反规则的写法,看看Visual Studio的错误列表里会不会出现对应的警告/错误
  • 用命令行运行dotnet build,查看输出日志,里面应该会有分析器输出的诊断信息

另外补充个小细节:确保Example.Analyzer引用的Roslyn相关包(比如Microsoft.CodeAnalysis.CSharpMicrosoft.CodeAnalysis.Analyzers)版本和目标项目的.NET Core 3.0兼容,版本不匹配也可能导致分析器不生效。

内容的提问来源于stack exchange,提问作者Zenexer

火山引擎 最新活动