.net - Roslyn 抛出异常 'Item' 未声明。由于其保护级别,它可能无法访问
问题描述
我正在尝试使用 roslyn 脚本引擎执行 vb 脚本 我在构造函数中的实现如下所示我初始化了所有成员
Private Sub New(ByVal info As LoggedInUserInfo)
_info = info
Item = New ScriptItem()
_vbEngine = New VisualBasic.ScriptEngine()
Call {GetType(Type).Assembly, GetType(ICollection).Assembly, GetType(ListDictionary).Assembly, GetType(Console).Assembly, GetType(ScriptItem).Assembly, GetType(IEnumerable(Of)).Assembly, GetType(IQueryable).Assembly, GetType(DataSet).Assembly, [GetType]().Assembly}.ToList().ForEach(Sub(asm) _vbEngine.AddReference(asm))
'Import common namespaces
Call {"System", "System.Linq", "System.Collections", "System.Collections.Generic"}.ToList().ForEach(Sub(ns) _vbEngine.ImportNamespace(ns))
End Sub
执行脚本时
我称之为
Public Function Execute(ByVal vbScript As String) As IExecuteScript
_dummyMode = True
Try
Dim session = _vbEngine.CreateSession(Me, GetType(ProcessScriptEngine))
session.AddReference(Assembly.Load(GetType(ProcessScriptEngine).Assembly.GetName()))
session.AddReference(Assembly.Load(GetType(ScriptItem).Assembly.GetName()))
session.Execute(vbScript)
Return Me
Catch exception As Exception
Throw
End Try
End Function
项目是我声明的公共成员Public Item As ScriptItem
但是当我运行测试时它会抛出如下异常
Roslyn.Compilers.CompilationErrorException : (1) : error BC30451: 'Item' is not declared. It may be inaccessible due to its protection level.
at Roslyn.Scripting.CommonScriptEngine.CompilationError(DiagnosticBag localDiagnostics, DiagnosticBag diagnostics)
at Roslyn.Scripting.CommonScriptEngine.Compile(String code, String path, DiagnosticBag diagnostics, Session session, Type delegateType, Type returnType, CancellationToken cancellationToken, Boolean isInteractive, Boolean isExecute, CommonCompilation& compilation, Delegate& factory)
at Roslyn.Scripting.CommonScriptEngine.Execute[T](String code, String path, DiagnosticBag diagnostics, Session session, Boolean isInteractive)
at Roslyn.Scripting.Session.Execute(String code)
at ProcessScriptEngine.VerifyVbScript(String vbScript) in D:\Paymate\Payroll\Core\CoreScripting\ProcessScriptEngine.vb:line 100
at ScriptTest.Tests.<Test1>d__1.MoveNext() in D:\Paymate\Payroll\Core\ScriptTest\UnitTest.cs:line 56
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at NUnit.Framework.Internal.TaskAwaitAdapter.GenericAdapter`1.GetResult()
at NUnit.Framework.Internal.AsyncToSyncAdapter.Await(Func`1 invoke)
at NUnit.Framework.Internal.Commands.TestMethodCommand.Execute(TestExecutionContext context)
at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__0()
at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)
任何想法发生了什么?
更新
传递脚本如下所示
"Item.Rate = 100.01D\nItem.Units = 100.10D \nItem.Amount = 100.20D\nItem.Gross = 200D\nItem.BaseWage = 300D\n\n\n\n\n\n"
解决方案
推荐阅读
- wordpress - 如何将会员卡添加到我的网站,可以会员下载
- php - 使用 FastCGI 在 IIS 上配置 PHP 以显示警告但继续执行
- java - 我想将某些列的边框设置为粗,但所有列都已设置
- optaplanner - OptaPlanner VRPTW - ArrivalTimeUpdatingVariableListener 的异常在 FULL_ASSERT 但不是在生产模式
- javascript - 如何使用 redux 制作切换器来翻译网站
- c - while 循环无法检测到简单的数学运算
- javascript - 我的页面在 ios 中加载一半但在 android 中加载
- python - 收到我的 dict 对象在 Django 应用程序中没有属性 META 的错误
- php - 模型 [App\UserModel] 0 [ Laravel ] 没有查询结果
- android - SQLite SUM 得到值 0