使用 MSBuild.CodeAnalysis api 分析 C# 项目时出错?

问题描述 投票:0回答:0

我正在尝试构建一个工具(使用 C# 和 .NET 7.0,Visual Studio 2022)来分析另一个 C# 项目。我添加了

MSBuild.Locator
包并用
MSBuildLocator.RegisterDefaults()
调用它。但是,当我尝试实际打开要分析的项目时,出现以下错误:

这里是工具的源代码:

using Microsoft.Build.Locator;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.Text;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;

namespace AnalysisTool
{
   class Program
   {
      public static async Task DoActualWork()
      {
         var workspace = MSBuildWorkspace.Create();
         workspace.LoadMetadataForReferencedProjects = true;
         workspace.WorkspaceFailed += OnWorkspaceFailed;

         // Error occurs here
         var project = await workspace.OpenProjectAsync(
            @"C:\Path\To\OtherProject.csproj");

         var compilation = await project.GetCompilationAsync();
      }

      public static async Task Main(string[] args)
      {
         var vsAvail = MSBuildLocator.QueryVisualStudioInstances().ToList();

         MSBuildLocator.RegisterDefaults();

         await DoActualWork();
      }

      private static void OnWorkspaceFailed(object sender,Microsoft.CodeAnalysis.WorkspaceDiagnosticEventArgs e)
      {
         if (e.Diagnostic.Kind == Microsoft.CodeAnalysis.WorkspaceDiagnosticKind.Failure)
         {
            Console.WriteLine(e.Diagnostic.ToString());
         }
      }
   }
}

以及分析工具的关联工程文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <RollForward>Major</RollForward>
    <OutDir>..\Bin\</OutDir>
    <OutputPath>$(OutDir)</OutputPath>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Build.Locator" Version="1.5.5" />
    <PackageReference Include="Microsoft.CodeAnalysis" Version="4.4.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Features" Version="4.4.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.VisualBasic.Features" Version="4.4.0" />
    <PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="4.4.0" />
    <PackageReference Include="NuGet.ProjectModel" Version="6.4.0" />
  </ItemGroup>

</Project>

我试过将其返回到 .NET 5.0,但出现了同样的错误。我会很感激任何帮助。

c# .net msbuild roslyn-code-analysis
© www.soinside.com 2019 - 2024. All rights reserved.