女士们,先生们, 我正在尝试创建一个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
答案 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