【问题标题】:Extension Methods in VB 2008 assembly cannot be used in a C# project?VB 2008 程序集中的扩展方法不能在 C# 项目中使用?
【发布时间】:2011-06-01 19:09:11
【问题描述】:

我在 VB 程序集中编写了一些字符串扩展方法,并且正在从 C# 项目中对它们进行单元测试。但是,C# 就像看不到扩展方法一样,当其他 VB 项目引用 VB 程序集时,它们没有问题。 VB 程序集和 C# 测试项目都针对 .Net 3.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

VB.Net 用法:

Imports SomeNamespace.ExtensionMethods
...
someString = someString.Remove(subStringsToRemove)

C# 用法(不起作用):

using SomeNamespace.ExtensionMethods;               //No error, but ExtensionMethods is not in the intellisense
...
someString = someString.Remove(subStringsToRemove);  //error, can't find matching overlaod

【问题讨论】:

  • 试图将模块设为“Public”?
  • 可能想检查您是否可以显式调用 (StringExtensions.Remove(someString, subStringsToRemove);) 以查看它是否甚至可以找到该类...
  • @Kamarey,成功了!随时将您的评论作为答案,我会接受。我犯了一个愚蠢的错误。

标签: c# .net vb.net extension-methods


【解决方案1】:

尝试将模块设为“公共”?

更新:

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

【讨论】:

  • 我回去查看了代码,虽然我打算在其他地方使用扩展,但我还没有这样做。它只用于它的容器组件。 VB 中类/模块的默认访问修饰符是内部的,就像 C# 类一样。我想如果程序集设置了InternalsVisibleTo 以允许其他程序集看到这样的模块,这也可能发生,但这里不是这种情况。感谢第二双眼睛发现我的小错字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多