Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在NetCoreApp中使用Roslyn:未安装MSBuildWorkspace_C#_Roslyn - Fatal编程技术网

C# 在NetCoreApp中使用Roslyn:未安装MSBuildWorkspace

C# 在NetCoreApp中使用Roslyn:未安装MSBuildWorkspace,c#,roslyn,C#,Roslyn,我正在尝试学习如何使用Roslyn从c#源文件中提取信息。但我甚至不能开始,因为我似乎找不到正确的方法来安装正确的软件包 我正在尝试构建一个简单的netcoreapp1.1控制台应用程序。其csproj文件如下所示: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netc

我正在尝试学习如何使用Roslyn从c#源文件中提取信息。但我甚至不能开始,因为我似乎找不到正确的方法来安装正确的软件包

我正在尝试构建一个简单的netcoreapp1.1控制台应用程序。其csproj文件如下所示:

<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”)解决了所有这些问题