c# – .NET Core上的Roslyn Scripting API:为什么编译器会抱怨“错误CS1501:WriteLine没有重载需要2个参数”?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – .NET Core上的Roslyn Scripting API:为什么编译器会抱怨“错误CS1501:WriteLine没有重载需要2个参数”?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2292字,纯文字阅读大概需要4分钟。
内容图文
![c# – .NET Core上的Roslyn Scripting API:为什么编译器会抱怨“错误CS1501:WriteLine没有重载需要2个参数”?](/upload/InfoBanner/zyjiaocheng/828/52cb25b354a2450786c007f95dcaedf4.jpg)
我正在开发一个针对OSX的netcoreapp1.0项目,我正在使用Roslyn设置一个脚本,如下所示:
var scriptText = File.ReadAllText(args[0]);
var scriptOptions = ScriptOptions.Default
.WithReferences(
typeof(System.Object).GetTypeInfo().Assembly
);
var script = CSharpScript.Create(scriptText, scriptOptions, typeof(Globals));
var scriptArgs = new string[args.Length-1];
Array.Copy(args, 1, scriptArgs, 0, args.Length-1);
script.RunAsync(new Globals
{
Args = scriptArgs
})
.GetAwaiter().GetResult();
Globals的位置是:
public class Globals
{
public string[] Args { get; set; }
}
当我尝试运行如下所示的脚本时:
using System;
Console.WriteLine("Args[0]: {0}", Args[0]);
该程序以此例外终止:
$dotnet run test.csx
Project BitThicket.DotNet.ScriptTool (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Script error: Microsoft.CodeAnalysis.Scripting.CompilationErrorException: (7,9): error CS1501: No overload for method 'WriteLine' takes 2 arguments
at Microsoft.CodeAnalysis.Scripting.ScriptBuilder.ThrowIfAnyCompilationErrors(DiagnosticBag diagnostics, DiagnosticFormatter formatter)
at Microsoft.CodeAnalysis.Scripting.ScriptBuilder.CreateExecutor[T](ScriptCompiler compiler, Compilation compilation, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Scripting.Script`1.GetExecutor(CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Scripting.Script`1.RunAsync(Object globals, Func`2 catchException, CancellationToken cancellationToken)
at BitThicket.DotNet.ScriptTool.Program.Main(String[] args) in /Users/ben/proj/bt/dotnet-scriptcs/src/BitThicket.DotNet.ScriptTool/Program.cs:line 63
事实上,显然,Console确实有一个需要两种方法的重载.我简要地查看了CoreFx sources以查看是否有任何奇怪的类型转发或扩展方法技巧在脚本设置中可能需要额外的注意,但我没有看到任何异常(可能我错过了一些东西).
为什么Roslyn ScriptBuilder会抱怨这个?
最佳答案:
在.NET Core中,Console类位于System.Console程序集中,因此您需要将其添加到脚本的引用中:
var scriptOptions = ScriptOptions.Default
.WithReferences(
typeof(System.Object).GetTypeInfo().Assembly,
typeof(System.Console).GetTypeInfo().Assembly
);
如果检查Object的程序集位置,您将看到它的System.Private.CoreLib.ni.dll.使用ILSpy,我们可以看到这个程序集只包含一个基本的Console实现,其方法是Write(string s),WriteLine(string s)和WriteLine().而System.Console程序集包含完整的实现.
内容总结
以上是互联网集市为您收集整理的c# – .NET Core上的Roslyn Scripting API:为什么编译器会抱怨“错误CS1501:WriteLine没有重载需要2个参数”?全部内容,希望文章能够帮你解决c# – .NET Core上的Roslyn Scripting API:为什么编译器会抱怨“错误CS1501:WriteLine没有重载需要2个参数”?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。