C# 中的最终用户嵌入式可编程 VB

End-user embedded programable VB inside C#

如何才能构建具有通过新 VB 文件创建新功能的功能的完整 C# 应用程序。这些文件不应该被编译,而是在运行时解释。

我认为它是一个嵌入式 VB 解释器,但不知道它是如何实现的。 您可以构建一个健壮的基础应用程序,然后让您的技术人员对其进行调整以适应每个客户端的特殊性(数据库、表格、过滤器、网络服务……)

我的一个客户有一个软件具有开放功能,但我忽略了细节。

要是能集成python就好了!

使用 VBCodeProvider 您可以在 run-time 处编译 VB.NET 代码。

下面的例子,在run-time和运行处编译一段VB.NET代码:

private void button1_Click(object sender, EventArgs e)
{
    using (var vbc = new VBCodeProvider())
    {
        var parameters = new CompilerParameters(new[] {
        "mscorlib.dll",
        "System.Windows.Forms.dll",
        "System.dll",
        "System.Drawing.dll",
        "System.Core.dll",
        "Microsoft.VisualBasic.dll"});
        var results = vbc.CompileAssemblyFromSource(parameters,
        @"
        Imports System.Windows.Forms
        Imports System.Drawing
        Public Class Form1
            Inherits Form
            public Sub New () 
                Dim b as Button = new Button()
                b.Text = ""Button1""
                AddHandler b.Click, 
                    Sub (s,e)
                        MessageBox.Show(""Hello from runtime!"")
                    End Sub       
                Me.Controls.Add(b)
            End Sub
        End Class");

        //Check if compilation is successful, run the code
        if (!results.Errors.HasErrors)
        {
            var t = results.CompiledAssembly.GetType("Form1");
            Form f = (Form)Activator.CreateInstance(t);
            f.ShowDialog();
        }
        else
        {
            var errors = string.Join(Environment.NewLine,
                results.Errors.Cast<CompilerError>()
                .Select(x => x.ErrorText));
            MessageBox.Show(errors);
        }
    }
}