VB 2008汇编中的扩展方法不能在C#项目中使用?

VB 2008汇编中的扩展方法不能在C#项目中使用?,c#,.net,vb.net,extension-methods,C#,.net,Vb.net,Extension Methods,我在VB程序集中编写了一些字符串扩展方法,并从一个C#项目中对它们进行了单元测试。然而,C#的行为就像它看不到扩展方法一样,当其他VB项目引用VB程序集时,它们没有问题。VB assemebly和C#test项目都以.NET3.5为目标 有办法解决这个问题吗 VB.Net扩展方法: Imports System.Runtime.CompilerServices Imports System.Text.RegularExpressions Imports System.Linq Namespa

我在VB程序集中编写了一些字符串扩展方法,并从一个C#项目中对它们进行了单元测试。然而,C#的行为就像它看不到扩展方法一样,当其他VB项目引用VB程序集时,它们没有问题。VB assemebly和C#test项目都以.NET3.5为目标

有办法解决这个问题吗


VB.Net扩展方法:

Imports System.Runtime.CompilerServices
Imports System.Text.RegularExpressions
Imports System.Linq

Namespace ExtensionMethods
    Module StringExtensions

        <Extension()> _
        Public Function Remove( _
                            ByVal input As String, _
                            ByVal subStrings As String()) As String
            ...
        End Function

        <Extension()> _
        Public Function Substrings( _
                            ByVal input As String, _
                            ByVal regexPattern As String, _
                            ByVal regexOptions As RegexOptions) As IEnumerable(Of String)
            ...
        End Function

        <Extension()> _
        Public Function Substrings( _
                            ByVal input As String, _
                            ByVal regexPattern As String) As IEnumerable(Of String)
            ...
        End Function
    End Module
End Namespace
Imports SomeNamespace.ExtensionMethods
...
someString = someString.Remove(subStringsToRemove)
using SomeNamespace.ExtensionMethods;               //No error, but ExtensionMethods is not in the intellisense
...
someString = someString.Remove(subStringsToRemove);  //error, can't find matching overlaod
C#用法(不起作用):

Imports System.Runtime.CompilerServices
Imports System.Text.RegularExpressions
Imports System.Linq

Namespace ExtensionMethods
    Module StringExtensions

        <Extension()> _
        Public Function Remove( _
                            ByVal input As String, _
                            ByVal subStrings As String()) As String
            ...
        End Function

        <Extension()> _
        Public Function Substrings( _
                            ByVal input As String, _
                            ByVal regexPattern As String, _
                            ByVal regexOptions As RegexOptions) As IEnumerable(Of String)
            ...
        End Function

        <Extension()> _
        Public Function Substrings( _
                            ByVal input As String, _
                            ByVal regexPattern As String) As IEnumerable(Of String)
            ...
        End Function
    End Module
End Namespace
Imports SomeNamespace.ExtensionMethods
...
someString = someString.Remove(subStringsToRemove)
using SomeNamespace.ExtensionMethods;               //No error, but ExtensionMethods is not in the intellisense
...
someString = someString.Remove(subStringsToRemove);  //error, can't find matching overlaod

是否尝试将模块设置为“公共”模块

更新:


无法解释为什么它与其他VB程序集一起工作。认为C对类访问修饰符或其他东西有自己的看法。

试图将模块设置为“公共”模块?可能需要检查您是否可以显式调用(StringExtensions.Remove(someString,subStringsToRemove);),看看它是否能找到类…@Kamarey,这很有效!请随意回答你的评论,我会接受的。我犯了一个愚蠢的错误。我回去查看了代码,虽然我打算在其他地方使用扩展,但我还没有这样做。它只在它的容器组件中使用。VB中类/模块的默认访问修饰符是内部的,就像C#类一样。我想如果程序集设置了
InternalsVisibleTo
以允许其他程序集看到这样的模块,也可能发生这种情况,但这里的情况并非如此。谢谢你的第二双眼睛来捕捉我的小错误。