2012-10-25 100 views
1

我的解決方案中有兩個項目,每個項目中都有一個包含公共類的CS文件。既然這兩個類都在同一個命名空間中,我期待他們能夠看到對方。事實並非如此。請參閱下面的設置。無法訪問其他項目中的公共類但名稱空間相同

項目Woof1,文件File.CS

namespace MyNameSpace 
{ 
    public class Foo 
    { 
    // Doesn't compile 
    Faa f; 
    } 
} 

項目Woof2,文件File.CS

namespace MyNameSpace 
{ 
    public class Faa 
    { 
    // Doesn't compile 
    Foo f; 
    } 
} 

NB,這兩個類都存儲在文件在不同的目錄同名 (即不是相同的文件)。

  1. 爲什麼我不能編譯它?
  2. 我能做些什麼(除了將類移到同一個項目中)。

(我只找到關於這個問題this discussion但它到底是不是我的問題。)

+11

附帶在我腦海裏的第一件事是缺少的參考。即使項目採用相同的解決方案,項目Woof2也需要參考項目Woof1。 – Johnny5

+0

我認爲你的兩個項目都需要彼此參照。 –

+0

您必須在Woof2中添加對Woof1的項目引用。右鍵單擊引用並從相同的解決方案中選擇Woof2。僅供參考名稱空間區分大小寫。 MyNameSpace的輸入方式不同,但我認爲這只是您的示例中的錯字嗎? – Christo

回答

3
  1. 請確保參考設置爲應有的。每個項目都需要參考其他項目。
  2. 確保將public限定符設置爲全部項目中的類別。
  3. 請務必在全部項目中列舉設置public限定符。

此外,您最好將enum和其他輔助定義移動到一個公共項目並將其存儲在那裏。

+0

請注意,應該避免這樣的循環依賴。所以最好的部分是創建額外的共享程序集。 –

+0

@HenkHolterman是否有任何**情況下需要保留循環引用?我打算在我的答案中加上**,但後來我不確定。也許這個人有一些奇怪的設置**,**需要這種方法。你能想到任何嗎? – 2012-10-27 14:37:25

+0

我已經看到它發生了,但總是由於糟糕的設計。我想不出任何合法的情況。但是我想這可能發生在複雜的庫中,比如.NET本身。我正在考慮應用程序。 –

3

您需要添加一個引用從項目Woof2項目Woof1。

另外,當你引入循環依賴時,試圖彼此引用兩者並不是一個好主意,因爲構建一個噩夢。如果你摔倒了,你需要這樣做,你應該考慮將通用代碼分解成單獨的(第三個)項目。

2

在Woof1中,您需要包含對Woof2的引用。 要注意的另一件事是名稱空間區分大小寫,所以這兩個名稱空間應該是MyNameSpace。

0

您需要在項目Woof2中添加對Woof1的項目引用。請參閱this鏈接瞭解更多信息。

0

我就與me.It可能發生自帶的DLL,如果沒有適當的builds.In我來說,我是用在toolbar.So發佈選項確保調試選項被選中

相關問題