- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 CSharpScript.EvaluatyAsync<T>
评估脚本方法并传递一些 C# 代码。当出现解析问题时,我可以很容易地看到错误的行号,例如一个语法错误,但是当出现运行时异常时,我得到的只是一个 AggregateException
在这种情况下包装我的异常 ( NullReferenceException
),但不知道如何为我获取行号(在下面的示例中为 3)。
Console.WriteLine(CSharpScript.EvaluateAsync<int>(
@"string s = null;
// some comment at line 2
var upper = s.ToUpper(); // Null reference exception at line 3
// more code").Result);
编辑:
我一直在研究这个问题,发现脚本 API 创建了一个没有 pdb 信息的程序集 here line 127所以这将不可能知道异常发生在哪里。我说得对吗?
最佳答案
在 CSharpScript 的某些版本中,团队添加了一个解决方案:现在您可以将 ScriptOptions.Default.WithEmitDebugInformation(true)
添加到 EvaluateAsync
方法。
有关如何提取异常行号的信息,请参阅下面的测试用例:
[TestMethod]
public void LineNumberInStackTrace()
{
try
{
var result = CSharpScript.EvaluateAsync<int>(
@"string s = null;
// some comment at line 2
var upper = s.ToUpper(); // Null reference exception at line 3
// more code", ScriptOptions.Default.WithEmitDebugInformation(true)).Result;
}
catch (AggregateException e)
{
if (e.InnerException is NullReferenceException inner)
{
var startIndex = inner.StackTrace.IndexOf(":line ", StringComparison.Ordinal) + 6;
var lineNumberStr = inner.StackTrace.Substring(
startIndex, inner.StackTrace.IndexOf("\r", StringComparison.Ordinal) - startIndex);
var lineNumber = Int32.Parse(lineNumberStr);
Assert.AreEqual(3, lineNumber);
return;
}
}
Assert.Fail();
}
[TestMethod]
public void LineNumberNotInStackTrace()
{
try
{
var result = CSharpScript.EvaluateAsync<int>(
@"string s = null;
// some comment at line 2
var upper = s.ToUpper(); // Null reference exception at line 3
// more code").Result;
}
catch (AggregateException e)
{
if (e.InnerException is NullReferenceException inner)
{
var startIndex = inner.StackTrace.IndexOf(":line ", StringComparison.Ordinal);
Assert.AreEqual(-1, startIndex);
return;
}
}
Assert.Fail();
}
关于c# - CSharpScript.EvaluateAsync 中的异常行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37125385/
我正在尝试将 C# 脚本集成到我的应用程序中。我正在使用 globals 对象为我的脚本提供各种数据。 public class Globals { public int X; pub
我正在使用 CSharpScript.EvaluatyAsync 评估脚本方法并传递一些 C# 代码。当出现解析问题时,我可以很容易地看到错误的行号,例如一个语法错误,但是当出现运行时异常时,我得到的
如何停止 RunAsync? CancellatioTokenSource cts = new CancellationTokenSource(); //I thought that it's mus
是否可以将函数定义为脚本然后运行它? 我正在努力实现这样的目标: //defined in a namespace public class Params{public string input {
我创建了这个测试控制台应用程序,以使用 Roslyn 脚本引擎(在 Microsoft.CodeAnalysis.CSharp.Scripting nuget 包中)运行一些 C# 代码。
问题:无法在 CSharpScript 中使用外部定义的类型,因为我猜是由于某些程序集不匹配,它无法将对象类型从自身转换为自身。 我有 2 个项目。 常见 using System; namespac
我正在尝试将 C# 脚本集成到我的数据库应用程序中。我正在使用 globals 对象使脚本可以访问全局变量。 如果脚本是第一次编译,我对等待时间不满意。 如何保存和加载编译以避免等待时间? Scrip
我在使用这段代码时遇到了问题。 CSharpScript.EvaluateAsync 似乎无法理解 Linq“选择”命令,即使我认为我正在添加对 ScriptOptions 的正确引用。此处的目标是使
我想在运行时分配一个 MaterialDesign 图标,以允许根据用户配置来配置按钮。 即 cfgvalue="PackIconKind.Ambulance";myicon.Kind = eval(
我正在尝试在 Blazor wasm 应用程序中使用 CSharpScript,使用简单的 EvaluateAsync 进行测试: var result = await CSharpScript.Ev
我是一名优秀的程序员,十分优秀!