c# - 找不到類型或命名空間名稱crystaldecisions您是否遺漏using指示詞或組件參考 - 類型或名稱空間名稱找不到




compiler error cs0246 (11)

這個問題在這裡已經有了答案:

我有一個C#解決方案,在Visual Studio 2010有幾個項目。 一個是測試項目(我稱之為“ PrjTest ”),另一個是Windows Forms Application項目(我將它稱為“ PrjForm ”)。 還有一個由PrjForm引用的第三個項目,它能夠成功地引用和使用。

PrjForm引用PrjTest ,而PrjForm有一個帶有using語句的類:

using PrjTest;
  1. 引用已被正確添加
  2. using語句正確無誤
  3. 拼寫是正確的
  4. PrjTest成功建立
  5. PrjForm幾乎可以構建,但會破壞using PrjTest; 與錯誤一致:

無法找到類型或名稱空間名稱'PrjTest'(您是否缺少using指令或程序集引用?)

我已經嘗試了以下解決方法:

  1. 刪除了Resharper(因為Resharper在識別引用的項目時沒有問題,所以我認為它可能值得一試)
  2. 刪除並重新添加了引用和使用語句
  3. 從頭開始重新創建PrjForm
  4. PrjForm當前駐留在PrjTest文件夾內,我試著將它移動到外部文件夾
  5. 將該解決方案裝載到另一台計算機上,並帶有VS 2010的新副本

我做了功課,花了很長時間在網上尋找答案,這些解決方案都沒有幫助。

我還能嘗試什麼?


PrjForm被設置為“.Net Framework 4客戶端配置文件”我將其更改為“.Net Framework 4”,現在我已經成功構建。

這也適用於我。 非常感謝。 我正在嘗試一個dotNet的RDF示例,其中我從dotnetrdf下載了套件。

NET4客戶端配置文件:始終針對所有客戶端桌面應用程序(包括Windows窗體和WPF應用程序)的NET4客戶端配置文件。

NET4完全框架:目標NET4僅當您的應用程序需要的功能或程序集未包含在客戶端配置文件中時才有效。 這包括:如果您正在構建服務器應用程序,例如:

  • ASP.Net應用程序
  • 基於服務器端的ASMX Web服務

如果您使用傳統客戶端方案,例如:o使用System.Data.OracleClient.dll,它在NET4中已棄用且未包含在客戶端配置文件中。

  • 使用舊版Windows Workflow Foundation 3.0或3.5(WF3.0,WF3.5)

如果您針對開發人員場景並需要工具(如MSBuild)或需要訪問設計組件(如System.Design.dll)


using語句引用一個名稱空間 ,而不是一個項目

確保在被引用的項目中有適當命名的命名空間:

namespace PrjTest
{
     public class Foo
     {
          // etc...
     }
}

閱讀有關MSDN上名稱空間的更多信息:


原來我遇到過這個問題。

項目B引用項目A.

項目A編譯為A.dll(程序集名稱= A)。

項目B編譯為A.dll(程序集名稱A)。

Visual Studio 2010沒有捕捉到這一點。 Resharper沒問題,但不會編譯。 WinForms設計師給出了誤導性的錯誤信息,可能是由於不兼容的平台目標造成的。

經過痛苦的一天,解決方案是確保組件名稱不同。


另一件可能導致此錯誤的事情是使用更新版本的.NET構建的NuGet包。

原來的錯誤:

frmTestPlanSelector.cs(11,7): error CS0246: The type or namespace name 'DatabaseManager' 
could not be found (are you missing a using directive or an assembly reference?) 

進一步在日誌中我發現這個:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3275: The primary reference "[redacted]\DatabaseManager\bin\Release\DatabaseManager.dll" could not be resolved because it has an indirect dependency on the assembly "System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" which was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0".

解決方案是重新安裝NuGet軟件包:

http://docs.nuget.org/docs/workflows/reinstalling-packages


在我的情況下,我有:

引用的DLL: .NET 4.5

項目: .NET 4.0

由於上述不匹配,4.0項目無法在4.5 .DLL的名稱空間內看到。 我重新編譯.DLL的目標.NET 4.0,我很好。


如果您的項目(PrjTest)不公開PrjTest命名空間中的任何公共類型,它將導致該錯誤。

項目(PrjTest)是否包含“PrjTest”命名空間中的任何類或類型是公共的?


對於COM / ActiveX引用,VS 2012將在使用語句時顯示此錯誤。 這很有趣,因為它可能是說你可能錯過了使用陳述。

要解決這個問題:即使在鄰居工程中註冊了實際的COM / ActiveX dll,並且通過COM通道而不是工程通道添加了引用。 它將添加Interop.ProjectName而不是ProjectName作為參考,這解決了這個奇怪的錯誤。


我解決了我的問題,因為另一個項目使用.NET 4.5編碼,另一個編碼為4.0


檢查你的項目屬性,你的參考路徑應該是這樣的:

問候


看到這個問題

原來這是一個客戶端分析問題。

PrjForm被設置為“.Net Framework 4客戶端配置文件”我將其更改為“.Net Framework 4”,現在我已經成功構建。

感謝大家! 我想這意味著在花了所有時間在網上搜索之後,我發現發布後的解決方案分鐘數,我猜訣竅在於知道正確的問題。


被引用的項目也可能以.NET 4.0為目標,而控制台應用程序項目則以.NET 4.0客戶端庫為目標。

雖然它可能沒有涉及到這種特殊情況,但我認為其他人可以找到有用的信息。





using-directives