2011-07-02 85 views
22

好吧,我以前一百萬次了這一個,它被前1億+1次回答。類型或命名空間<blah>不存在

然而,再一次。我有3個項目,A,B和C,每個都有一個DLL。每個項目都是.Net 4.0(不是客戶端版本,全部4.0)。項目C引用A和B.它們被引用爲項目,並且輸出被設置爲在本地複製。

在C,我有兩個using語句在我的cs文件:

using A; 
using B; 

當我編譯,我得到的抱怨是找不到B. A是罰款。 B依賴於A.

赫克我應該怎麼辦?我已經刪除並重新添加,關閉VS2010,重新打開它,看着.csproj文件。而我無法得到它。再次,第一百萬次。

有人請巴掌足夠的理智,到我,我學的這個源一勞永逸!

是的,這可能是某處的StackOverflow回答,但不是在任何到目前爲止,我已經檢查頂部的答案。這些術語過於通用而無法使用,太多的問題在答案是「呃,添加參考」。我已經過去了。

這裏是我得到的錯誤。有3種,但從過去的經驗來看,最後一個是真實的。

Error 130 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' does not contain a definition for 'Database' and no extension method 'Database' accepting a first argument of type 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' could be found (are you missing a using directive or an assembly reference?) 

Error 114 'object' does not contain a definition for <blah> 

Error 59 The type or namespace name '<blah>' could not be found (are you missing a using directive or an assembly reference?)  

啊哈我看着警告,不只是錯誤的,這裏是我所看到的:

Warning 69 The referenced project '..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj' does not exist. AWI.WWG.EXPMRI.MriUpload.Objects 

這.csproj的文件在這種情況下,「B」。即使我刪除並重新添加項目引用我得到這個。但感覺就像我越來越近了!

嗯,我只是發現了另一個DLL,稱之爲 「d」,其中 「A」 的引用。當我將其添加到項目中時,我開始接受投訴:

---------------- 
The Add Reference Dialog could not be shown due to the error: 

The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. 
---------------- 

難道這是相關的,還是隻是另一個分心?


好的,我發現這個問題,但我不明白。

當我添加通過IDE的參考,它增加了這款以「C」的的csproj文件:

<ProjectReference Include="..\..\..\..\..\..\..\Partners\integration\framework\connectors\Partners.Connectors.Base\Partners.Connectors.Base\Partners.Connectors.Base.2010.csproj"> 

這並不編譯,它警告說,它無法找到引用的項目,那麼所有這些錯誤發生。但後來我改變ProjectReference以下幾點:

<ProjectReference Include="C:\...\Partners.Connectors.Base.2010.csproj"> 

...和它的作品就好了。請注意,這些路徑都不接近256個字符。完全合格的只有135個字符。但也許IDE正在爲這條道路做一些愚蠢的裝飾。

+0

你能更具體嗎? – bzlm

+1

具體多少?請告訴我哪些信息會有幫助。 –

+0

是的。請顯示編譯器的完整錯誤。 –

回答

18

解決方案與Windows中的文件路徑的限制做的,而且他們通過IDE將相對路徑轉換爲完整路徑,如this blog中所述。

即時解決方案是手動編輯csproj文件以使用絕對路徑。在重新添加引用之前,絕對路徑將是有效的。有一天我可能會縮短我的文件夾,但目前它不是最重要的。

如果您懷疑存在此問題,請查看編譯器的警告消息。我經常讓這些人自己關閉,只看錯誤。但關於「被引用的項目不存在」的警告是爲我解決這個問題的線索。

萬一其他鏈接消失,這裏是鏈接到MS文章。 http://support.microsoft.com/kb/2516078

值得一提的是,此相同的錯誤用於各種諸如客戶端框架靶向問題的問題表現,並且當參考加載失敗記錄爲一個警告。推測參考誤差只是一個警告,因爲如果參考實際上不需要,那並不重要。

+10

+1提醒看警告。讓我直指問題。謝謝! –

1

基本上,這聽起來像一個丟失的引用。

一些健全檢查我能想到的是:

  1. 你確定生成錯誤的項目是C?
  2. 你確定你沒有在命名空間B中使用拼寫錯誤嗎?
  3. 在編譯C之前,B中是否有編譯錯誤? (這可能會導致編譯器無法在B中查找命名空間)。
  4. 您是否有其他編譯錯誤或警告?

編輯

另一個建議:在乙組件中的類定義爲public

+0

我寫了這段代碼的每一位。這是所有C#,A和B編譯沒有投訴。 –

+0

是的,班級是公開的。並且我在十幾個完全像「C」的項目中使用A和B.這是什麼讓我瘋狂! –

0

創建乾淨的項目並測試您在項目中使用的最小程序集。通過這種方式,您可以確定解決方案中是否存在問題,或者新創建的項目是否具有相同的症狀。如果是這樣,那麼也許VS,.net等被損壞或什麼的。

+0

我做到了。除了A之外,全部刪除了,重新建立了它。增加B,建立它。增加了C - 失敗! –

10

我會確保你的項目包含了對程序集的引用。

enter image description here

我會檢查的建造順序你的依賴

enter image description here

匹配

最後,如果一切都設置正確,你應該看到下面的生成順序:

enter image description here

看起來不像這是你的親瑕疵,但爲了完整起見,我應該添加另一件事來檢查(如果您的項目面向的是.NET Framework 3.5或更高版本),則兩個項目的目標框架都是匹配的。如果要鏈接的東西,從框架的完整版本針對的客戶端配置文件,你也將獲得一個「未找到」的錯誤:

enter image description here

+1

是的,100%都是正確的。 –

9

前往警告部分和解決所有的警告,和你做......

警報部會告訴你所有內部的DLL都需要你引用的項目依賴。

+2

此評論是黃金。非常感謝! – Mugen

+0

呃,你是男人!由於某種原因,它關閉了。 – CesarHerrera

1

我在更新通常通過NuGet使用的項目時得到了這個。我想如果我只是簡單地將更新後的內置DLL複製到packages文件夾中,我就可以測試它,而無需在我的機器上設置NuGet,但這並不那麼簡單,因爲我的應用程序仍在尋找舊版本號。希望能幫助那裏的人。

6

我知道這不是你問題的答案,但是當你試圖引用一個比你使用的版本更高的.net版本的項目時,錯誤是非常相似的。 IE:你不能從.NET 3.5

+0

哦,是的,這一次咬了我幾次 - 謝謝! –

+0

這個答案在我的情況下解決了這個問題。 –

0

,我開始收到此錯誤突然而試圖解決另一個問題

我轉到解決方案=>屬性=>項目依賴解決了這個引用與.NET 4.5的東西並且所有的依賴都關閉了,因爲我得到一個命名空間錯誤的兩個項目。我檢查了這些複選框,並重新構建了沒有錯誤的解決方案。

0

用VS2017解決了這個使用global::[namespace][type I want to use],這個問題來到了我,當我的解決方案該項目被卸載。

相關問題