C# 在NetCoreApp中使用Roslyn:未安装MSBuildWorkspace
我正在尝试学习如何使用Roslyn从c#源文件中提取信息。但我甚至不能开始,因为我似乎找不到正确的方法来安装正确的软件包 我正在尝试构建一个简单的netcoreapp1.1控制台应用程序。其csproj文件如下所示:C# 在NetCoreApp中使用Roslyn:未安装MSBuildWorkspace,c#,roslyn,C#,Roslyn,我正在尝试学习如何使用Roslyn从c#源文件中提取信息。但我甚至不能开始,因为我似乎找不到正确的方法来安装正确的软件包 我正在尝试构建一个简单的netcoreapp1.1控制台应用程序。其csproj文件如下所示: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netc
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
<PackageTargetFallback>portable-net45+win8</PackageTargetFallback>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis" Version="2.0.0" />
<PackageReference Include="Microsoft.Composition" Version="1.0.30" />
</ItemGroup>
</Project>
MSBuildLocator.RegisterDefaults();
Exe
netcoreapp1.1
portable-net45+win8
从我在网上读到的内容来看,这足以加载包含MSBuildWorkspace的任何程序集……但显然不行
如何正确配置项目?不幸的是。您将无法从.Net Core使用它。接受的答案似乎不再是最新的:有一个NuGet软件包Microsoft.CodeAnalysis.Workspace.MSBuild支持.Net Core控制台应用程序: 使用以下行尝试该软件包:
using Microsoft.CodeAnalysis.MSBuild;
...
var workspace = MSBuildWorkspace.Create();
var solution = workspace.OpenSolutionAsync(solutionFile.FullName).Result;
。。。它抛出了一个异常。我发现了一个帖子(),它添加了一些其他看起来是依赖项的NuGet包。在我的csproj中提到:
<PackageReference Include="Microsoft.Build" Version="16.7.0" />
<PackageReference Include="Microsoft.Build.Framework" Version="16.7.0" />
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="16.7.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.7.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.7.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="3.7.0" />
但更好的方法是使用NuGet软件包Microsoft.Build.Locator,并在应用程序启动时调用它,如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
<PackageTargetFallback>portable-net45+win8</PackageTargetFallback>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis" Version="2.0.0" />
<PackageReference Include="Microsoft.Composition" Version="1.0.30" />
</ItemGroup>
</Project>
MSBuildLocator.RegisterDefaults();
为此,请确保按照建议将MSBuild从所使用的Microsoft.Build.*
NuGet软件包中排除(从Microsoft.Build.Locator
中除外)(这将更改上面显示的PackageReference):
PS:我还没有研究过,但也许(NuGet软件包“BuildAnalyzer”)解决了所有这些问题