I'm trying to execute vb script with roslyn script engine my implementation as below in the constructor I initialized all the member
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
When executing script
I call this
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
Item is a public member which I declared like Public Item As ScriptItem But when I run test it throws exception as below
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)
Any Idea what's happening?
UPDATE
passing script is like something as below
"Item.Rate = 100.01D\nItem.Units = 100.10D \nItem.Amount = 100.20D\nItem.Gross = 200D\nItem.BaseWage = 300D\n\n\n\n\n\n"