簡體   English   中英

類型或命名空間<blah>不存在</blah>

[英]The type or namespace <blah> does not exist

好的,我之前已經有過一百萬次了,並且之前已經回答了 100 萬次 +1 次。

然而,再一次。 我有 3 個項目,A、B 和 C,每個項目都是 DLL。 每個項目都是.Net 4.0(不是客戶端構建,完整的4.0)。 項目 C 引用 A 和 B。它們被引用為項目,output 設置為本地復制。

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

using A;
using B;

當我編譯時,我得到的抱怨是找不到 B。A 很好。 B依賴於A。

我該怎么辦? 我已經刪除並重新添加,關閉VS2010,重新打開它,查看.csproj文件。 而我就是無法得到它。 再次,第 100 萬次。

有人請給我足夠的理智,讓我一勞永逸地了解它的來源!

是的,這可能在 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 正在對路徑進行一些愚蠢的裝飾。

該解決方案與 Windows 中的文件路徑限制有關,它們通過 IDE 將相對路徑轉換為完整路徑,如本博客所述。

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

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

如果其他鏈接消失,這里是 MS 文章的鏈接。 http://support.microsoft.com/kb/2516078

值得注意的是,同樣的錯誤表現在各種問題上,例如客戶端框架定位問題,並在引用加載失敗時記錄為警告。 大概參考錯誤只是一個警告,因為如果實際上不需要參考,那也沒關系。

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

在此處輸入圖像描述

我會檢查構建順序是否與您的依賴項匹配

在此處輸入圖像描述

最后,如果一切設置正確,您應該會看到以下構建順序:

在此處輸入圖像描述

看起來這不是您的問題,但為了完整起見,我應該補充一點要檢查的內容(如果您的項目針對 .NET 框架 3.5 或更高版本)是兩個項目的目標框架匹配。 如果您從完整版的框架中鏈接以客戶端配置文件為目標的內容,您還將收到“未找到”錯誤:

在此處輸入圖像描述

Go 到警告部分並解決所有警告,你就完成了......

警告部分將告訴您所引用的項目所需的所有內部 dll 依賴項。

我知道這不是您問題的答案,但是當您嘗試引用 .net 版本比您正在使用的項目更高的項目時,錯誤非常相似。 IE:你不能從 .net 4.5 引用 .net 4.5 的東西

我在更新我們通常通過 NuGet 使用的項目時得到了這個。 我想如果我只是將更新后的內置 dll 復制到包文件夾中,我可以測試它而無需在我的機器上設置 NuGet,但這並不是那么簡單,因為我的應用程序仍在尋找舊版本號。 希望能幫助那里的人。

經過數小時的挫折后,我發現了以下使用 VS2017 解決方案解決此問題的過程:

Insure that all reference assemblies have been recognized and have current properties.

If assemblies do not show proper reference, right click the entry
and view properties.  This action often resets the reference. This
action must be completed for each project in the solution.

After resolving all references, if the error continues, delete the
following:

        -The Obj folder

        -The Bin folder

        -Reference to the offending assembly

        -Clean and Rebuild the solution.  Errors should occur.

        -Re-reference the needed assembly.

The editor should no longer show the namespace error and build should succeed.

基本上,這聽起來像是缺少參考。

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

  1. 您確定產生錯誤的項目是 C 嗎?
  2. 您確定您在使用時沒有在命名空間 B 中犯拼寫錯誤嗎?
  3. 在編譯C之前,B中會不會出現一些編譯錯誤? (這可能會導致編譯器無法在 B 中找到命名空間)。
  4. 您還有其他編譯錯誤或警告嗎?

編輯

另一個建議:B 程序集中的 class 是否定義為public

我在嘗試解決另一個問題時突然開始收到此錯誤

我通過轉到 Solution=>properties=>project dependencies 解決了這個問題,並且對於我遇到命名空間錯誤的兩個項目,所有依賴項都已關閉。 我檢查了復選框並重建了沒有錯誤的解決方案。

我在 C# 6.0 中使用global::[namespace][type I want to use]解決了這個問題

使用 VS2017,當我的解決方案中的項目被卸載時,這個問題就出現了。

就我而言,我必須檢查“工作流程” 1的實施位置。 因此,我比較了使用這個“工作流”的項目/類庫的框架版本。 檢查所有項目/類庫是否使用相同的框架后,我必須在導致構建錯誤的項目/類庫中搜索“.WorkFlow”。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Workflow.Targets(121,5):錯誤:命名空間“Proyect_to_build”中不存在類型或命名空間名稱“WorkFlow”(您是否缺少 using 指令或裝配參考?)

事實證明,“Reference”文件夾中缺少包含“WorkFlow”的.dll。 一旦添加了.dll,項目/類庫編譯成功。

同樣,在我的情況下,我沒有使用 this.dll 並且我只需要編譯項目/類庫以在程序的某個部分啟用斷點(其中根本不涉及“工作流”),但是,之后添加它(帶有“WorkFlow”源代碼的.dll ),它編譯。


1 “工作流”來自使用工作流自定義代碼的遺留代碼。

創建干凈的項目並測試您在項目中使用的最小程序集集。 這樣您就可以確定您的解決方案中是否有問題,或者新創建的項目是否有相同的症狀。 如果是這樣,那么可能 VS,.net 等已損壞或什么的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM