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