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);
}
}
}
如何才能构建具有通过新 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);
}
}
}