2010-05-11 20 views
1

查看一些較舊的代碼,我遇到了一個奇怪的命名空間錯誤。.net類「不是」類的成員..即使它是?

比方說,我有兩個項目,HelperProject和WebProject。每個應用程序屬性中給出的完整名稱空間是myEmployer.HelperProject和myEmployer.Web.WebProject。

Web項目中的頁面充滿了使用助手項目中的類的語句。沒有導入/使用語句,但有一個對bin中添加的幫助程序項目的引用。幾個示例行可能是:

myEmployer.HelperProject.StringHelper.GetFixedLengthText(Text, "", Me.Width, 11) 
myEmploter.HelperProject.Utils.StringHelper.EstimatePixelLength(Text, 11) 

但是每次寫入以這種方式行引發錯誤「HelperProject」不是「myEmployer」中的一員。如果你聲明這樣的陳述:

HelperProject.StringHelper.GetFixedLengthText(Text, "", Me.Width, 11) 
HelperProject.Utils.StringHelper.EstimatePixelLength(Text, 11) 

一切似乎很好。

在解決方案對象瀏覽器和bin文件夾中,HelperProject顯示其完整名稱空間myEmployer.HelperProject。

我不想改變所有的陳述,除此之外,我懷疑這是掩蓋了一個更基本的問題。但我不知道發生了什麼。任何人都可以提供任何指針嗎?

乾杯, 馬特

回答

1

您是否遇到名稱空間衝突,myEmployer是正在創建調用的名稱空間的類或子名稱空間。嘗試在引用格式如下改變:

global::myEmployer.HelperProject.StringHelper.GetFixedLengthText(Text, "", Me.Width, 11) 

編輯:

如果你告訴編譯器添加以下using語句它將要消除不確定性,在這一類myEmploye的情況下。意味着全球:: myEmployer,而不是任何其他類或稱爲myEmployer的名稱。

using myEmployer = global::myEmployer; 
+0

沒錯,加入全球去除錯誤。那麼這是什麼意思? – 2010-05-11 12:09:51

+0

這意味着你有一個命名空間衝突,myEmployer.HelperProject不明確。如果已經使用解決方案編輯了我的文章,以便您不必更改所有語句。 – 2010-05-11 12:17:37

1

應用性能的命名空間僅適用於創建的新文件。如果您更改其中的名稱空間而不更改現有文件,則其名稱空間將如文件中指定的那樣。

0

首先,如ck所述,項目設置中的默認命名空間僅用於在結束新(類)文件時提供命名空間。所以你應該檢查你的文件中是否有正確的命名空間。例如:

namespace myEmployer.HelperProject 
{ 
    public class StringHelper 
    { 
     public static string GetFixedLengthText(...) 
     {} 
    } 
} 

如果這是不同的,例如: namespace HelperProject,你會得到錯誤。

如果名稱空間是正確的,您可能有一個局部變量或字段或類似的也稱爲myEmployer。嘗試右鍵單擊myEmployer並選擇「轉到定義」(或按F12)。

P.S。:名稱空間標準殼體PascalCasing,即MyEmployer。*

相關問題