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

时间:2017-02-12 22:31:34

标签: c# .net-core roslyn

我的.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>

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

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();
    }
}

compilationDiagnostics报告如下:

  

错误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的签名,所以在这方面错误是有意义的。我想我需要以不同的方式进行元数据引用,但是如何?

0 个答案:

没有答案