3

テキストをコードとしてインポートし、それをvb.netのサブに追加することは可能ですか?コードで満たされた.txtファイルがある場合、プログラムで(ボタンを使用して)インポートできますか?

必要なのは、vb.netでそのスクリプト(txtファイル)を受け入れ、それを使用して変数を宣言し、関数/サブルーチンを作成することです。これですべてです。

4

1 に答える 1

3

CodeDomオブジェクトを使用してこの種のことを行うことができます。CodeDomオブジェクトを使用すると、実行時にアセンブリを動的に生成できます。たとえば、インターフェースを作成する場合

Public Interface IScript
    Property Variable1 As String
    Sub DoWork()
End Interface

次に、次のようなメソッドを作成します。

Imports Microsoft.VisualBasic
Imports System.CodeDom.Compiler

' ...

Public Function GenerateScript(code As String) As IScript
    Using provider As New VBCodeProvider()
        Dim parameters As New CompilerParameters()
        parameters.GenerateInMemory = True
        parameters.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location)
        Dim interfaceNamespace As String = GetType(IScript).Namespace
        Dim codeArray() As String = New String() {"Imports " & interfaceNamespace & Environment.NewLine & code}
        Dim results As CompilerResults = provider.CompileAssemblyFromSource(parameters, codeArray)
        If results.Errors.HasErrors Then
            Throw New Exception("Failed to compile script")
        Else
            Return CType(results.CompiledAssembly.CreateInstance("Script"), IScript)
        End If
    End Using
End Function

今、あなたはそれをこのように呼ぶことができます:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim builder As New StringBuilder()
    builder.AppendLine("Public Class Script")
    builder.AppendLine("    Implements IScript")
    builder.AppendLine("    Public Property Variable1 As String Implements IScript.Variable1")
    builder.AppendLine("    Public Sub DoWork() Implements IScript.DoWork")
    builder.AppendLine("        Variable1 = ""Hello World""")
    builder.AppendLine("    End Sub")
    builder.AppendLine("End Class")
    Dim script As IScript = GenerateScript(builder.ToString())
    script.DoWork()
    MessageBox.Show(script.Variable1) ' Displays "Hello World"
End Sub

明らかに、文字列ビルダーでコードをビルドする代わりに、次のようにテキストファイルからコードをロードできます。

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim script As IScript = GenerateScript(File.ReadAllText("C:\script.txt")
    script.DoWork()
    MessageBox.Show(script.Variable1) ' Displays "Hello World"
End Sub
于 2013-02-05T15:33:17.640 に答える