我正在尝试构建一个工具(使用 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,但出现了同样的错误。我会很感激任何帮助。