- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们的项目需要能够有一个简单的业务规则,我们的客户可以在 Visual basic 中编写脚本。而我们的主程序是用 C# 编写的
客户想要执行的脚本可能是这样的(我正在考虑最简单的可能情况)
var vbCode = @"
If (Row.Code = 12) Then
Row.MappedCode = 1
End If";
所以我在 C# 中创建了一个带有 Code 和 MappedCode 属性的 RowData 类
namespace ScriptModel
{
public class RowData
{
public int Code { get; set; }
public int MappedCode { get; set; }
}
}
我创建了一个简单的宿主对象类
namespace ScriptModel
{
public class HostObjectModel
{
public RowData Row { get; set; }
}
}
我使用 Roslyn.Scripting.VisualBasic.ScriptEngine 创建了一个引擎,使用 HostObjectModel 实例创建 session 并执行 engine.Execute(vbCode, session)
var hostObj = new HostObjectModel();
hostObj.Row = new RowData();
hostObj.Row.Code = 12;
var engine = new Roslyn.Scripting.VisualBasic.ScriptEngine(
new Assembly[] {hostObj.GetType().Assembly},
new string[] {"ScriptModel"} );
var session = Session.Create(hostObj);
engine.Execute(vbCode , session);
它告诉我
(2,25): error BC30451: 'Row' is not declared. It may be inaccessible due to its protection level.
但是如果我在 C# 上创建类似的代码片段
var csharpCode = @"
if (Row.Code == 12)
{
Row.MappedCode = 1;
};";
并使用 CSharp.ScriptEngine 一切都会正常工作
那么,问题是什么,为什么 VisualBasic.ScriptEngine 无法看到用 C# 编译的类的公共(public)属性,我认为它应该基于相同的 MSIL 语言,否则我错了?
更新:我安装了 Visual Basic 并在 VB 上创建了 ScriptModel 库。我还在类声明和 vbCode 中用 Row() 函数替换了 Row 属性。都没有帮助。 :( 当我从 C# 运行 VisualBasic.ScriptEngine 时,它似乎根本不起作用。
最佳答案
对于 VB 脚本,我发现您必须在脚本开头包含以下内容:
Imports ScriptModel
我猜你可以自动将上面的内容添加到代码字符串中,这样你的用户就不需要记住包含它了。
作为 ScriptEngine 创建的一部分添加时,我无法让它工作。之后似乎也无法使用:
engine.ImportedNamespaces.Append("ScriptModel");
尽管事实是之后 ImportedNamespaces 计数为 1。使用 c# 时,您似乎根本不需要导入命名空间。
关于c# - Roslyn Visual Basic.Script 引擎无法识别用 C# 编写的 hostObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159007/
我们目前使用 IronPython 作为脚本语言,以允许我们的业务用户配置我们应用程序的大部分,并且我们正在评估在 Roslyn 发布后添加 C# 作为脚本语言的可能性。对于 IronPython,我
我试图通过 hostObject 发送一个类,但显然它不想工作: using Roslyn.Compilers; using Roslyn.Compilers.CSharp; using Roslyn
我正在学习如何使用 react-native(Android)实现 Firestore。然后,我找到了 'react-native-firebase' 并陷入了这个异常。 Error:Exceptio
将我的 React Native 应用程序更新为 React Native 0.59 后,我开始在 Debug模式下运行我的应用程序 (react-native run-android) 或在生成包并
我们的项目需要能够有一个简单的业务规则,我们的客户可以在 Visual basic 中编写脚本。而我们的主程序是用 C# 编写的 客户想要执行的脚本可能是这样的(我正在考虑最简单的可能情况) var
我们已经部署了一个 WSO2 API 管理器来公开系统的 API。当我们发布带有 https 目标端点的 API 时(例如:https://abc.d.e :),请求失败并出现以下异常。 TID: [
我是一名优秀的程序员,十分优秀!