2011-06-01 43 views
4

我在VB程序集中編寫了一些字符串擴展方法,並從C#項目中對它們進行了單元測試。然而,當其他VB項目引用VB程序集時,C#的行爲就像看不到擴展方法,他們沒有問題。 VB公司和C#測試項目都針對.Net 3.5。VB 2008程序集中的擴展方法不能在C#項目中使用?

有沒有辦法解決這個問題?


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 
+3

試圖讓模塊'公共'? – Kamarey 2011-06-01 19:10:25

+0

可能要檢查,如果你可以顯式調用(StringExtensions.Remove(someString,subStringsToRemove);),看看它是否可以找到類... – 2011-06-01 19:12:38

+0

@Kamarey,工作!隨時讓您的評論一個答案,我會接受它。對我來說愚蠢的錯誤。 – Matt 2011-06-01 19:18:35

回答

3

試圖讓模塊'公共'?

更新:

無法解釋爲什麼它與其他VB程序集一起工作。認爲C#有自己的類訪問修飾符或其他東西的願景。

+0

我回去看了看代碼,雖然我打算在其他地方使用擴展,但我還沒有這樣做。它只用於它的容器組裝中。 VB中的類/模塊的默認訪問修飾符是內部的,就像C#類一樣。我想這也可能發生,如果程序集有'InternalsVisibleTo'設置爲允許其他程序集看到這樣的模塊,但這不是這種情況。感謝第二雙眼睛抓住我的小錯字。 – Matt 2011-06-01 19:27:04