问题标签 [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 回答
649 浏览

c# - 使用 Microsoft.CodeAnalysis.CSharp.Scripting 动态执行 C# 失败

我需要以字符串格式执行 C# 类并使用该类的属性填充对象。为了达到要求,我正在做 POC,但失败了。

以下代码无法评估我尝试更新输入模型的位置。

程序.cs

脚本管理器.cs

模型.CS

0 投票
0 回答
83 浏览

c# - CSharpScript。DynamicClass 作为全局变量得到 CS0234 错误

我正在尝试构建灵活的脚本评估器,它可以接收全局变量的动态列表。我正在使用 DynamicLinq lib 中的 DynamicClass 来构建全局对象。但我有 CS0234 错误:

命名空间“System.Linq”中不存在类型或命名空间名称“Dynamic”

我的问题是我的全局类型实例是动态生成的,我无法将动态程序集添加到引用中。InteractiveAssemblyLoader也不行。

我知道 DynamicExpression-s,但我正试图找到纯粹的解决方案。

0 投票
0 回答
192 浏览

c# - 通过带有内部扩展的 Microsoft.CodeAnalysis.CSharp.Scripting 字符串中的 Roslyn 脚本不起作用

请帮助我使用 Microsoft.CodeAnalysis.CSharp.Scripting。我想调用内部扩展方法,但它不起作用。

我有3个项目。首先是模型:

在第二个中,我使用公共扩展方法创建了一个internal这很重要! )静态类:

并带有来自字符串的 roslyn 脚本的装饰器,用于从外部使用它:

并使用第三个项目的最后一个:

但它失败了,但有例外:

System.AggregateException: "(1,8): error CS1061:" Foo "does not contain a definition for" Ext ", and could not find an available extension method" Ext "taking type" Foo "as the first argument (possibly missing a using directive or assembly link). "

我尝试在 Store.csproj 中添加 InternalVisibleTo(第二个带有内部装饰器的项目),但它没有帮助:

没有internal它可以工作,但我想保存它以保持代码干净。

0 投票
1 回答
188 浏览

c# - 使用 .NET Core 3.1 运行 C# 脚本时出现 FileLoadException

我编写了以下 C# 脚本(HelloWorld.csx 文件):

我正在使用dotnet-script(1.0.1 版)和.NET 运行时(3.1.14 版)

执行此脚本时,出现以下错误。知道为什么吗?

System.IO.FileLoadException:无法加载文件或程序集“System.Text.Encoding.CodePages,版本=5.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”。无法找到或加载特定文件。(0x80131621) 文件名:'System.Text.Encoding.CodePages,版本=5.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'---> System.IO.FileLoadException:无法加载文件或程序集'System.Text。 Encoding.CodePages,版本=5.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'。在 System.Runtime.Loader.AssemblyLoadContext.LoadFromPath(IntPtr ptrNativeAssemblyLoadContext, String ilPath, String niPath, ObjectHandleOnStack retAssembly) 在 System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(String assemblyPath) 在 System.Reflection.Assembly.LoadFrom(String assemblyFile) 在System.Reflection.Assembly。

0 投票
1 回答
123 浏览

c# - Roslyn / CSharpScript - 声明和初始化动态变量以在脚本中使用它们

我需要使用许多声明为运行时的变量动态执行 C# 语句。最终用户假设声明变量运行时(仅限某些类型,例如int,string,List<string>,List<int>, bool etc.)并对它们执行操作或评估/执行单行表达式。

为此,我可以看到 Flee 库可以评估表达式并提供动态的机制AddInitialize变量。

例如,可以动态声明变量并使用当前 invuse 变量的值初始化它们,例如:

// 注意变量名称是动态添加到脚本上下文中的,并使用在当前范围内声明的变量进行初始化,并且可以评估如下表达式:

或者

但是,这仅限于将表达式评估为真/假并仅获取语句的值。这不允许我执行表达式,例如"c = a + b" or "lstStr.Add("PQR")修改对象的值并调用其成员方法。

我可以看到使用 Roslyn / SharpScript 可以执行所需的语句,但是,我没有像 Flee 提供的那样在上下文中动态声明变量并使用当前正在使用的对象初始化它们。

其实我找到了答案,而且很简单。我所需要的只是脚本引擎。为了获取变量,我做了类似于以下代码段中最后一行的操作:

在上面的 Roslyn / CSharpScript 中,如何在脚本上下文中动态声明变量并使用当前使用的对象进行初始化?因为我需要分配已经有大量元素的长列表/集合,并且为它们生成动态代码将是一项挑战。

0 投票
0 回答
27 浏览

roslyn - .NET - Roslyn/CSharpScript - 在另一个脚本中引用已编译的脚本

我想允许用户定义应用程序将编译和存储的“构建”表达式。例如:

add用户定义了一个用 body:调用的表达式X + Y。应用程序编译并保存它。

稍后,用户可能希望在另一个表达式中引用这些“构建”表达式之一,如下所示:

add(K,L) > 5 || add(L,M) > 3

我见过引用静态方法的脚本示例,在评估脚本时需要在 ScriptOptions 中添加这些方法。这在此处是不可能的,因为引用的方法也是来自用户的脚本。

有什么方法可以实现这一点,或者有更好的方法来考虑整体问题吗?

0 投票
1 回答
41 浏览

editor - Roslyn/CSharpScript 和 VSCode 作为编辑器

我必须让我的客户能够使用 VS Code 编辑脚本。问题..当我的软件调用时:

主机对象,应传递给脚本,以便脚本可以与我的应用程序(CAD 应用程序)交互。有可能VS Code看到主机对象实例并且上面也有智能感知吗?

这是允许使用外部提供的变量对脚本进行智能感知编辑的正确方法吗?非常感谢

0 投票
1 回答
23 浏览

roslyn - 可以得到用 CSharpScript (Roslyn) 编译的脚本

我正在尝试使用 Roslyn 编译一个脚本,但无论我做什么,它一直在抱怨这个,此时我几乎尝试了所有东西,不知道接下来要尝试什么。

这是我得到的错误:

'(11,7): 错误 CS0246: 找不到类型或命名空间名称''(您是否缺少 using 指令或程序集引用?)'

它抱怨找不到命名空间

我已经添加了对文件的引用,甚至将程序集添加到 InteractiveAssemblyLoader 但仍然没有运气。

有人知道接下来要尝试什么吗?

0 投票
2 回答
17 浏览

c# - 当语句应该为真时,Roslyn CSharpScript EvaluateAsync 返回 False

我只是在学习如何使用 Roslyn,我有一个这样的脚本:

结果返回为假。我什至尝试过:

它也会导致错误。我对其进行了调试并在条件中获取了值,在取出转义字符后,它是:

结果是真的。我不确定我哪里出了问题。