Roslyn throws exception 'Item' is not declared. It may be inaccessible due to its protection level

77 Views Asked by At

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"

0

There are 0 best solutions below