使用 VBCodeProvider() 在 C# 中构建 VB 程序集.CompileAssemblyFromSourc

本文关键字:构建 VB 程序集 CompileAssemblyFromSourc VBCodeProvider 使用 | 更新日期: 2023-09-27 18:33:27

VB代码:

Public Module OnlyModule
    Public Sub OnlyFunction()
        'do stuff
    End Sub
End Module

C# 代码:

    Assembly vbAssembly = BuildAssembly(vbCode); //wrapper function, but returns valid, compiled vb assembly
    Module module = vbAssembly.GetModules()[0];
    MethodInfo method = module.GetMethods()[0]; //returns 0 methods!!
    method.Invoke(null, null);

如您所见,只有一个模块,其中只有一个函数,那么为什么我对 GetMethods() 的调用不起作用呢? 我不完全熟悉 VB,但它应该是一个静态方法,我认为它以正确的方式编写为模块中的 sub

使用 VBCodeProvider() 在 C# 中构建 VB 程序集.CompileAssemblyFromSourc

想通了,需要使用 GetType() 而不是 GetModule():

Type type = vbAssembly.GetType("OnlyModule");
Method method = type.GetMethods()[0];

作品:)