问题标签 [csharpscript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
945 浏览

c# - 如何取消 CSharpScript.RunAsync

如何停止 RunAsync?

我还能怎么做。为什么这样的方法需要cancellationToken参数?

0 投票
1 回答
117 浏览

c# - 在 Roslyn 的 CSharpScript 代码字符串中有逻辑运算符的占位符

我正在使用 Roslyn 的功能将“表达式”创建为字符串,这些字符串是带有占位符的代码片段。在运行时,引擎将占位符替换为它们的值并计算表达式。例如,一个表达式看起来像

这里的单词“From”和“SentDate”是占位符,在运行时被替换为值。这就是代码的样子

一切都按预期工作。

现在我想更进一步,将 && 和 == 等运算符替换为人类可读的对应词,如 AND 和 EqualsTo。所以基本上表达式应该变成

然后以某种方式在调用中CSharp.Create我想用 && 和 EqualsTo 替换 AND ==

有没有办法做到这一点?这基本上是为了允许用户使用自然语言自由地创建这样的表达式,然后可以将其输入到评估引擎中。

0 投票
0 回答
372 浏览

sandbox - 管理 C# 脚本的安全性和资源使用

我的客户希望为用户添加定义小脚本的功能,这些脚本可用于在预先存在的 Web 应用程序中运行各种计算。目前,我们正在探索使用 Microsoft.CodeAnalysis.Scripting.CSharp 中的 CSharpScripts 来动态编译和执行用户函数。

我想要对这些脚本进行沙箱化的能力。具体来说,我想限制脚本可以使用的资源(内存等),以及限制脚本可以访问的库或值(例如,我不希望用户在他们的脚本中调用 Web 服务)。我想避免用户编写的代码会对应用程序的其余部分产生负面影响的情况。

我在下面包含了一些示例代码

0 投票
1 回答
205 浏览

c# - 如何评估功能使用 EF.Functions?

我正在尝试func<T, bool>使用EF.Functions.Likein进行评估,但是在调用方法CSharpScript.EvaluateAsync时运行时出现错误(当前上下文中不存在名称 'EF') 。GetPredicate()

创建函数方法:

调用方法:

这个怎么做?

0 投票
0 回答
152 浏览

c# - 如何中断用户编写的脚本?

尝试运行脚本(使用 Roslyn Scripting API):

它将永远运行。如何打断它?

我不介意使用其他脚本引擎,尽管要求一个是题外话。我发现了类似的问题(示例),但它们没有帮助。

背景:我想在我的软件中添加对 C# 用户编写脚本的支持。我想在沙盒中运行脚本,因此中断脚本的能力至关重要。过去我在CodeDOM方面有过一些经验,但我也没有找到一种方法来中断那里的脚本。

想法:

  • 我可以预处理用户编写的文本并在每行之后插入我的代码(检查CancellationToken和)。return/throw但是上面的例子不受这种技术的影响,然后我必须走复杂的语法解析器路线(没有经验,想法?)。
  • 我可以提供一种方法,用户必须在他的脚本有问题的地方(例如循环内部)显式调用该方法,但用户可能会简单地决定忽略它。
  • 有没有办法逐步运行脚本?沙盒调试器模式?然后我就可以检查外部请求以终止脚本并停止调试。

其他的可能性是什么?有没有人实施过安全的用户编写脚本?

0 投票
1 回答
1290 浏览

c# - 使用外部定义类型的 CSharpScript - 无法从类型 A 转换为 A

问题:不能在 CSharpScript 中使用外部定义的类型,因为我猜由于某些程序集不匹配,它无法将对象类型从自身转换为自身。

我有2个项目。

常见的

CSharpScriptingExperiment

当我运行CSharpScriptingExperiment时,我收到此错误:

在这条线上:

Common是一个 .NET Standard 2.0 项目。

CSharpScriptingExperiment是一个 .NET Core 2.2 项目。

有任何想法吗?我见过其他人遇到类似的问题,但没有找到解决方案。

0 投票
0 回答
630 浏览

visual-studio-code - 如何解决 Visual Studio 代码中 C# 脚本 csx 文件的依赖问题?

我正在尝试使用 csx 文件创建一个带有服务总线队列触发器模板的 azure 函数程序。但我在解决依赖关系时遇到问题。老实说,我对 [this doc] ( https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-csharp ) 中提到的项目结构感到非常困惑。我尝试了两种方法。

第一种方法... 在 Visual Studio 代码中创建一个名为 MyAzureFunc 的文件夹,并手动添加 function.json、project.json、project.lock.json 和 run.csx。然后,在 MyAzureFunc 文件夹之外,我添加了 host.json 和 local.settings.json。这种方法会导致依赖性问题。

文件夹结构

第二种方法... 在 Visual Studio 代码中使用服务总线队列模板创建一个 Azure Function 项目,该代码会生成完全不同的文件夹和项目结构。然后,我将删除大部分自动生成的文件并手动添加第一种方法中提到的结构。这仍然会导致依赖性问题。

服务总线队列项目结构

我认为可能发生这种情况的一些可能原因如下...... 1. 框架版本 - 我的 project.json 调用“net46”,但是当我使用服务总线队列模板在 Visual Studio 代码中创建一个 azure 函数时,它实现了“ netcoreapp2.1" 2. 需要运行一些命令来识别包依赖关系 3. 一些项目配置需要使用 csx

我相信这里的重要文件是project.json。下面是代码...

下面是我试图在我的 csx 文件中使用的包的代码......

0 投票
0 回答
78 浏览

c# - CSharpScript - TypeLoadException

我正在使用 Microsoft.CodeAnalysis.CSharp.Scripting 的 CSharpScript(版本 3.4.0-beta2-final)来执行自定义计算。有些计算不是直接在脚本中定义的,而是委托给 MyPlugin.Calculations 类的已编译静态方法,该方法驻留在 MyPlugin 程序集中(仅调用静态方法)。

当我尝试从脚本调用 Calculations 类的静态方法时

它抛出这个异常:

我不明白,为什么它在 MyPlugin 程序集中定义时尝试从 MyPlugin.Data 程序集中加载类型计算。我添加了对 MyPlugin 程序集的引用并将 MyPlugin 命名空间导入到 ScriptOptions。这里有什么问题?这可能是我有一个插件系统并使用 Assembly.LoadFrom 方法加载 MyPlugin 程序集吗?MyPlugin 与正在执行的程序集不在同一目录中。MyPlugin.Data 程序集包含用于初始化的数据(它还包含脚本的主体)。

编辑:这是脚本的创建方式:

其中 AssemblyReferences 包含程序集 MyPlugin(以及其他),Imports 包含 MyPlugin 命名空间(以及其他)。

0 投票
1 回答
486 浏览

c# - DateTime in roslyn CSharpScript returns 'expecting ;'

Use of DateTime within the roslyn CSharpScript evaluator returns error code 'Expected ;' while strings work fine.

Using Visual Studio 2019 with Microsoft.CodeAnalysis.Common and Microsoft.CodeAnalysis.CSharp.Scripting 3.3.1

Understanding that the evaluator requires configuration, added DateTime assembly along with the custom class assembly.

Cannot understand here why a basic DateTime object causes issues.

String resolves to "i => i.TargetDateTime > 10/25/2019 11:00:00 AM". Wrapping in quotes causes it to be interpreted as string.

EDIT: I should add that hard-coding the string to the example above also fails with same error message, leading me to believe it is a parsing issue? It's not sure how to handle the characters within a DateTime object?

0 投票
2 回答
577 浏览

c# - 方法“CommonCreateArrayTypeSymbol”没有实现

我有非常简单的代码,它使用 nuget Microsoft.CodeAnalysis.CSharp.Scripting

一个月前它工作得很好,现在突然间我开始在这里收到异常: