如何在VB.net中为扩展方法创建DLL?

如何在VB.net中为扩展方法创建DLL?,vb.net,dll,visual-studio-extensions,Vb.net,Dll,Visual Studio Extensions,各位嘉宾:, 我正在尝试创建一个DLL,我可以在几个不同的项目之间共享,其中包括我为简化代码而编写的各种扩展方法。在理解中,这样的DLL可以在C#和VB.net项目之间共享。然而,到目前为止,我无法创建DLL,甚至无法包含子项目并以这种方式引用它,也无法访问我的扩展 我可以在对象浏览器中查看引用,但导入语句不会将我的子项目引用作为选项显示。VB.net不允许我将扩展放在类中,而且我似乎在web上找不到任何可以解释这一点的线索。提前谢谢 例如。。。 导入System.Runtime.Compil

各位嘉宾:, 我正在尝试创建一个DLL,我可以在几个不同的项目之间共享,其中包括我为简化代码而编写的各种扩展方法。在理解中,这样的DLL可以在C#和VB.net项目之间共享。然而,到目前为止,我无法创建DLL,甚至无法包含子项目并以这种方式引用它,也无法访问我的扩展

我可以在对象浏览器中查看引用,但导入语句不会将我的子项目引用作为选项显示。VB.net不允许我将扩展放在类中,而且我似乎在web上找不到任何可以解释这一点的线索。提前谢谢

例如。。。

导入System.Runtime.CompilerServices
导入System.Text.RegularExpressions
模块扩展
公共函数ToEnum(Of T)(ByVal值作为字符串)作为T
尝试
返回(CType([Enum].Parse(GetType(T),value.Replace(“,”),True),T))
特例
返回(CType([Enum].Parse(GetType(T),0,True),T))
结束尝试
端函数
端模块

您需要用Public关键字标记扩展模块。此外,确保消费项目中的项目属性将库项目列为参考;仅仅出现在对象浏览器中并不意味着您已经正确设置了引用。

下面的控制台应用程序代码可能毫无意义,但利用了上面的确切代码,唯一的例外是我将您的模块
公开
,而不是默认的
Friend

在我的解决方案中,
ClassLibrary3
是VB类库项目,包含在控制台应用程序项目中作为参考

Imports ClassLibrary3.Extensions

Module Module1

    Sub Main()
        Dim f As String = "hello"

        Console.WriteLine(f.ToEnum(Of System.ConsoleColor)())
    End Sub

End Module

看起来您正在使用VS2010。强烈支持Enum.TryParse()。请记住本地化会对代码产生什么影响。谢谢Hans,我想try/catch的效率可能会更低?加上类型转换延迟?我在代码中处理很多枚举转换,所以每一点都有帮助。谢谢哇!因为没有抓住那个而觉得有点傻。谢谢你,杰森!
Imports ClassLibrary3.Extensions

Module Module1

    Sub Main()
        Dim f As String = "hello"

        Console.WriteLine(f.ToEnum(Of System.ConsoleColor)())
    End Sub

End Module