打开 Visual Studio 后通过 ProjectReference 的 C# Roslyn 分析器导致未找到错误

Eik*_*e S 6 .net c# visual-studio roslyn roslyn-code-analysis

我已经为特定的 C# 解决方案编写了 Roslyn 分析器,并希望通过 ProjectReference 将分析器添加到解决方案中的所有项目:

<Project>
    <PropertyGroup>
        <LangVersion>8.0</LangVersion>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="(MSBuildProjectDirectory)\..\..\..\CodeAnalyzers\CodeAnalyzers\CodeAnalyzers.csproj"
         ReferenceOutputAssembly="false" 
         OutputItemType="Analyzer" />
    </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

我将其放置在 Directory.Build.props 文件中。

只要我在构建解决方案之前手动构建分析器项目,分析器就可以工作。如果我不这样做,每个项目都会收到以下警告:

Warning CS8034  Unable to load Analyzer assembly C:\Users\xxx\source\repos\XYZ\CodeAnalyzers\CodeAnalyzers\bin\Debug\netstandard1.3\CodeAnalyzers.dll: Could not find file 'C:\Users\xxx\source\repos\XYZ\CodeAnalyzers\CodeAnalyzers\bin\Debug\netstandard1.3\CodeAnalyzers.dll'.
System.IO.FileNotFoundException: Could not find file 'C:\Users\xxx\source\repos\XYZ\CodeAnalyzers\CodeAnalyzers\bin\Debug\netstandard1.3\CodeAnalyzers.dll'.
File name: 'C:\Users\xxx\source\repos\XYZ\CodeAnalyzers\CodeAnalyzers\bin\Debug\netstandard1.3\CodeAnalyzers.dll'
Run Code Online (Sandbox Code Playgroud)

如何告诉 Visual Studio 在尝试加载 dll 之前首先构建分析器项目?后来构建并不能解决问题,我想是因为缓存。

在“项目构建顺序”对话框中,分析器项目位于顶部,并且在配置管理器中设置了构建复选框。

Spa*_*vic 0

您似乎在与特定 C# 解决方案相同的解决方案中拥有分析器项目。更直接的方法是从单独的分析器解决方案创建 Nuget 包(使用 VS“带有代码修复的分析器(.NET 标准)”中的模板),然后使用 PackageReference 将分析器包含在解决方案中。例如,放入 props 文件或 csproj 文件中,如下所示:

<ItemGroup>
  <PackageReference Include="YourCustomAnalyzerId" Version="x.x.x" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

您将在所有项目中得到分析器,一切正常。然后您的分析器将列在“依赖项/分析器”中。

  • 我不会称之为“更简单”,更像是更复杂。 (4认同)