'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
Vous devez vous connecter pour publier un commentaire.
Tout comme normale VB.NET ainsi que l'ajout d'une référence, vous devez
Imports
pertinentes de l'espace de noms, ou de spécifier entièrement. (Vous avez édité la question afin d'y inclure des ce.)Après l'insertion de votre code dans un nouveau projet de Console dans VS2008 (parce que c'est ce que j'avais ouvert) et en réglant mon assemblée noms, j'ai vu la même chose que vous.
Je l'ai corrigé en ajoutant
Public
à la valeur par défautModule Module1
.OriginalL'auteur Mark Hurd