我应该如何使用 Roslyn 从 .NET Core 控制台应用程序编译 .NET Core 控制台应用程序?

use*_*558 5 c# roslyn .net-core

我的 .NET Core 控制台应用程序具有以下 .csproj(请注意 NuGet 包参考):

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Net.Compilers.netcore" Version="1.3.2" />
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

这是我的 .NET Core 控制台应用程序的源代码,我尝试编译的 .NET Core 控制台应用程序包含在“source”变量中:

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using System.Reflection;

public class Program
{
    public static void Main()
    {
        string source =
@"using System;

public static class Program
{
    public static void Main()
    {
        string input = Console.ReadLine();
        Console.WriteLine(input);
    }
}";

        var compilation = CSharpCompilation.Create(
            assemblyName: "source",
            syntaxTrees: new[] { CSharpSyntaxTree.ParseText(source) },
            references: new[] { MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location) });
        var compilationDiagnostics = compilation.GetDiagnostics();
    }
}
Run Code Online (Sandbox Code Playgroud)

编译诊断报告如下:

错误 CS0117:“控制台”不包含“ReadLine”的定义

我很困惑,因为我可以从正常编译的 .NET Core 应用程序中使用 Console.ReadLine() 。我以我在网上看到的一些示例的方式获取元数据参考。它引用的程序集是:

C:\Program Files\dotnet\shared\Microsoft.NETCore.App\1.1.0\System.Private.CoreLib.ni.dll

在该程序集上使用 ILSpy,我可以看到 Console 仅具有 Write 和 WriteLine 的签名,因此该错误在这方面是有意义的。我想我需要以不同的方式进行元数据引用,但是如何做呢?