如何在VB.net中创建用于扩展方法的DLL?

3
女士们,先生们, 我正在尝试创建一个DLL,以便在几个不同的项目之间共享。该DLL包括了一系列我编写的扩展方法,可以简化我的代码。我知道这样的DLL可以在C#和VB.net项目之间共享。但是到目前为止,我还无法创建DLL,甚至无法包含子项目并引用它以便能够访问我的扩展方法。
我可以在对象浏览器中看到引用,但导入语句没有将我的子项目引用作为选项。VB.net不允许我将扩展方法放在类内部,我似乎找不到任何线索来解决这个问题。谢谢。
例如...
Imports System.Runtime.CompilerServices
Imports System.Text.RegularExpressions
Module Extensions

    <System.Runtime.CompilerServices.Extension()>
    Public Function ToEnum(Of T)(ByVal value As String) As T
        Try
            Return (CType([Enum].Parse(GetType(T), value.Replace(" ", ""), True), T))
        Catch ex As Exception
            Return (CType([Enum].Parse(GetType(T), 0, True), T))
        End Try

    End Function
End Module


看起来你正在使用VS2010。强烈建议使用Enum.TryParse()。并且要记住本地化对这段代码的影响。 - Hans Passant
谢谢Hans,使用try/catch可能效率会低一些吧?再加上类型转换的延迟?我的代码中有很多枚举转换,所以每一点都有帮助。谢谢! - Christopher Richmond
2个回答

6

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


哇...感觉有点傻,没有注意到那个。谢谢Jason! - Christopher Richmond

0
以下控制台应用程序代码可能是毫无意义的,但利用了您上面的确切代码,除了我将您的模块从默认的Friend更改为Public
在我的解决方案中,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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接