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

时间:2012-09-01 04:38:38

标签: vb.net dll visual-studio-extensions

女士们,先生们, 我正在尝试创建一个DLL,我可以在几个不同的项目之间共享,包括我编写的各种扩展方法,以简化我的代码。理解这样的DLL在C#和VB.net项目之间共享是可行的。然而,我迄今为止无法创建DLL,甚至包含子项目并以这种方式引用它并且能够访问我的扩展。

我能够在对象浏览器中看到引用,但import语句不会将我的子项目引用作为选项。 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

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

以下控制台应用程序代码可能是荒谬的,但会使用上面的确切代码,但我创建模块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