Intellisense can't detect functions in vb.net created dll
我认为答案很简单,但我似乎找不到直接的答案。我可以看到很多有关该主题的内容,但是没有什么可以解决的(请参见下文,我可以找到最接近的答案)
我已经使用vb.net创建了一个.dll,并将其导入以便可以在Excel中使用没有问题。当我
VB.net中的示例代码:
1 2 3 4 5 6 7 8 | Namespace wtf Public Class samplerJam Public jjj As String Public Sub method1() jjj ="Hello" End Sub End Class End Namespace |
我错过了一些非常简单的东西吗?
(找到了类似问题的答案,但根据该设置,我应该能够看到我的子菜单/功能)
这对于聚会来说可能有点晚了,但是我在尝试解决VB.NET中的类似问题时偶然发现了这个问题,因此希望这可以对您/某人有所帮助。
智能感知
就解决智能感知方面而言,您的原始答案将起作用。但是我的方法涉及使用GUID。
比方说,我有一个名为
实现的
1 2 3 4 5 6 7 8 9 10 11 | Public Interface IFoo Function HelloWorld() As String End Interface Public Class Foo Implements IFoo Public Function HelloWorld() As String Implements IFoo.HelloWorld Return"Hello World!" End Function End Class |
如您所见,
因此,现在,为了确保在智能感知中获得此信息,我们可以向接口/类添加一些属性以将其公开给Excel。我的界面更改如下-
1 2 3 4 5 6 | <ComVisible(True)> <Guid("2055A907-9D7A-4DC9-A46B-6E283713A5AB")> <InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> Public Interface IFoo Function HelloWorld() As String End Interface |
我的班级将更改为-
1 2 3 4 5 6 7 8 9 10 11 | <ComVisible(True)> <Guid("2C4D41A7-235E-4F48-BE99-62118B2852A7")> <ClassInterface(ClassInterfaceType.None)> <ProgId("Foo")> Public Class Foo Implements IFoo Public Function HelloWorld() As String Implements IFoo.HelloWorld Return"Hello World!" End Function End Class |
要生成GUID,可以在Visual Studio中使用一些简单的步骤。工具>创建GUID>
您的DLL现在可以与intellisense一起使用了!
在目标机器上注册
电源shell
此过程是手动的,如果您在蓝月亮中执行一次/只有一台目标计算机超出您自己的目标计算机,就可以了。
您要查找与用于生成DLL的.NET版本相对应的.NET文件夹。假设您至少使用.NET 4.0,它将在此处-
您需要使用Regasm来注册dll。
1 2 3 | cd C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\ .\ egAsm.exe PathToYourDLL\\DLLName.dll |
请注意,如果您的路径包含空格,请在文件路径周围使用"引号"
创建一个MSI
如果您有一些目标计算机,则创建MSI为您执行注册可能会更容易。
您可以从Microsoft Marketplace(https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects)下载扩展,并生成MSI / EXE以完成注册。
关于如何使用此扩展名创建安装向导的教程很多,默认情况下,VS会在您的dll上设置属性以在安装过程中为您注册这些属性
仔细研究了一些C#内容(关于这个主题的VB.net并不多)之后,我找到了答案,我需要在类声明的前面加上这个
1 2 3 4 | Namespace wtf <ClassInterface(ClassInterfaceType.AutoDual)> Public Class samplerJam Public jjj As String ''' etc |