'Test' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. (BC30451)

J'essaie de certains à la volée de la compilation du code à l'aide de la VBCodeProvider classe. Ce que je veux être en mesure de faire est de modifier une variable publique dans mon assemblée dans le code.

J'ai un Public TestString As String = "" dans mon application.

C'est le code que j'utilise de la compilation:

    Dim codeProvider As New VBCodeProvider()
    Dim optParams As New CompilerParameters
    optParams.ReferencedAssemblies.Add("MyAssembly.exe")
    optParams.ReferencedAssemblies.Add("system.windows.forms.dll")
    optParams.CompilerOptions = "/t:library"
    optParams.GenerateInMemory = True
    Dim results As CompilerResults = codeProvider.CompileAssemblyFromSource(optParams, RichTextBox1.Text)

    If results.Errors.Count > 0 Then
        Dim sb As New StringBuilder("Compilation Failed with the following error(s)" + CR_LF + CR_LF)
        For Each CompErr As CompilerError In results.Errors
            sb.Append(String.Format("Line {0} - {1} ({2}){3}", CompErr.Line, CompErr.ErrorText, CompErr.ErrorNumber, CR_LF))
        Next
        MessageBox.Show(sb.ToString, "Compile Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Else
        Dim assy As System.Reflection.Assembly = results.CompiledAssembly
        Dim exeinstance As Object = assy.CreateInstance("Script")
        Dim typ As Type = exeinstance.GetType
        Dim method As MethodInfo = typ.GetMethod("Main")
        method.Invoke(exeinstance, Nothing)
    End If

C'est le code dans ma zone de texte:

Imports System
Imports MyAssembly

Class Script
    Sub Main()
       TestString="foo"' <-- This line fails compilation
    End Sub
End Class

L'erreur que j'obtiens est 'Test' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. (BC30451)

OriginalL'auteur Matt Wilko | 2012-08-08