【问题标题】:Can not get Roslyn to work with .NET 5 project无法让 Roslyn 使用 .NET 5 项目
【发布时间】:2021-11-16 16:40:52
【问题描述】:

花了太多时间后,我仍然无法让 Roslyn 加载简单的 C# 项目。 项目来源:

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

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net5.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <PackageReference Include="Microsoft.Build" Version="16.11.0" />
      <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.11.0" />
      <PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="3.11.0" />
    </ItemGroup>

</Project>

正在尝试加载的代码:

using System;
using Microsoft.CodeAnalysis.MSBuild;

namespace Metrics5
{
    class Program
    {
        static void Main(string[] args)
        {
            using var workspace = MSBuildWorkspace.Create();
            
            workspace.LoadMetadataForReferencedProjects = true;
            var currentProject = workspace.OpenProjectAsync(@"C:\work\Metrics5\Metrics5.csproj").Result;
            var diagnostics = workspace.Diagnostics;
                
            foreach(var diagnostic in diagnostics)
            {
                Console.WriteLine(diagnostic.Message);
            }
        }
    }
}

上面写着:

在处理文件“C:\work\Metrics5\Metrics5.csproj”时,Msbuild 失败,消息为:找不到指定的 SDK“Microsoft.NET.Sdk”。 C:\work\Metrics5\Metrics5.csproj

在我添加MSBuildSDKsPath 作为环境值MSBuildSDKsPath=C:\Program Files\dotnet\sdk\5.0.301\Sdks 之后,它似乎通过了这一步并陷入了另一个:

处理文件“C:\work\Metrics5\Metrics5.csproj”时,Msbuild 失败,消息为:导入的项目“C:\work\Metrics5\bin\Debug\net5.0\Current\Microsoft.Common.props “ 没有找到。确认 Import de 中的表达式 声明“C:\work\Metrics5\bin\Debug\net5.0\Current\Microsoft.Common.props”是正确的,并且该文件存在于磁盘上。 C:\Program Files\dotnet\sdk\5.0.301\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.props

从这里我不知道如何继续,我错过了一些 nuget 包吗? 我需要额外安装一些东西吗?

【问题讨论】:

    标签: c# msbuild roslyn .net-5 roslyn-code-analysis


    【解决方案1】:

    添加对Microsoft.Build.Locator的引用

    我使用了下一个包:

    <ItemGroup>
        <PackageReference Include="Microsoft.Build.Locator" Version="1.4.1" />
        <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2" PrivateAssets="all" />
        <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.11.0" />
        <PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="3.11.0" />
    </ItemGroup>
    

    然后使用MSBuildLocator注册MSBuild的实例:

    //add this line before using MSBuildWorkspace
    MSBuildLocator.RegisterDefaults();  //select the recent SDK
    using var workspace = MSBuildWorkspace.Create();
    

    您可以控制 MsBuild 的版本:

    var visualStudioInstances = MSBuildLocator.QueryVisualStudioInstances();
    //select NET5, or whatever by modifying Version.Major 
    var instance = visualStudioInstances.FirstOrDefault(x => x.Version.Major.ToString() == "5");
    MSBuildLocator.RegisterInstance(instance);  
    

    【讨论】:

    • 完美运行,谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 2023-04-07
    • 2021-11-17
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多