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 的签名,因此该错误在这方面是有意义的。我想我需要以不同的方式进行元数据引用,但是如何做呢?
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |