TestString не объявлен. Может быть недоступен из-за уровня защиты. (BC30451)
Я пробую некоторые на лету компиляцию кода с использованием VBCodeProvider
учебный класс. Я хочу изменить открытую переменную в моей сборке в коде.
у меня есть Public TestString As String = ""
в моем приложении.
Это код, который я использую для компиляции:
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
Это код в моем текстовом поле:
Imports System
Imports MyAssembly
Class Script
Sub Main()
TestString="foo"' <-- This line fails compilation
End Sub
End Class
Я получаю сообщение об ошибке "TestString" не объявлено. Может быть недоступен из-за уровня защиты. (BC30451)
1 ответ
Точно так же, как обычный VB.NET, а также добавив ссылку, вы должны Imports
соответствующее пространство имен или укажите его полностью. (Вы отредактировали вопрос, чтобы включить это.)
После вставки вашего кода в новый консольный проект в VS2008 (потому что это то, что я открыл) и корректировки имен сборок, я увидел то же, что и вы.
Я исправил это, добавив Public
по умолчанию Module Module1
,