找不到类型或命名空间名称

And*_*ers 454 c# reference using-directives using-statement visual-studio-2010

我有C#几个项目的解决方案Visual Studio 2010.一个是测试项目(我将其称为" PrjTest "),另一个是Windows Forms Application项目(我将其称为" PrjForm ").还有一个由PrjForm引用的第三个项目,它能够成功引用和使用.

PrjForm引用PrjTest,而PrjForm有一个带有using语句的类:

using PrjTest;
Run Code Online (Sandbox Code Playgroud)
  1. 参考已正确添加
  2. using 声明正确到位
  3. 拼写是正确的
  4. PrjTest构建成功
  5. PrjForm几乎可以构建,但是会using PrjTest;出现错误:

找不到类型或命名空间名称'PrjTest'(您是否缺少using指令或程序集引用?)

我尝试过以下方法来解决这个问题:

  1. 删除了Resharper(因为Resharper在识别引用的项目时没有遇到任何麻烦,我认为它可能值得一试)
  2. 删除并重新添加了引用和using语句
  3. 从头开始重新创建PrjForm
  4. PrjForm目前驻留在PrjTest文件夹中,我尝试将其移动到外部文件夹
  5. 使用新的副本在另一台计算机上加载解决方案 VS 2010

我做完了我的功课,花了很长时间在线寻找答案,但这些解决方案都没有帮助.

我还能尝试什么?

And*_*ers 701

看到这个问题.

事实证明这是一个客户端分析问题.

PrjForm设置为".Net Framework 4 Client Profile"我将其更改为".Net Framework 4",现在我已成功构建.

感谢大家!我想它认为,经过在线搜索所花费的所有时间后,我发现解决方案发布后的几分钟,我想诀窍是知道正确的问题要问...

  • 它实际上是一种耻辱,也不是VS和C#编译器都能提供有用的错误描述,避免你(和我)这种痛苦! (97认同)
  • 同样的错误,但在我的情况下,我试图在3.5项目中使用4.0 dll. (16认同)
  • 同样的错误,但这里是4.0项目中的4.5 dll. (6认同)
  • 上周发生在我身上,但是在4.5项目中加载4.5.2库.只需注意:4.5.2项目可以正常加载4.5或4.5.1库. (4认同)
  • 谢谢!挠我的头一个小时!我不小心添加了4.6.2 proj而不是4.5.2. (3认同)

Dee*_*101 51

在我的情况下,我有:

引用的DLL: .NET 4.5

项目: .NET 4.0

由于上述不匹配,4.0项目无法在4.5 .DLL的命名空间内看到.我重新编译.DLL以目标.NET 4.0,我很好.


小智 40

PrjForm设置为".Net Framework 4 Client Profile"我将其更改为".Net Framework 4",现在我已成功构建.

这对我也有用.非常感谢.我正在为dotNet尝试一个RDF示例,我从dotnetrdf下载了套件.

NET4客户端配置文件:始终为所有客户端桌面应用程序(包括Windows窗体和WPF应用程序)定位NET4客户端配置文件.

NET4完整框架:仅当您的应用程序所需的功能或程序集未包含在客户端配置文件中时,才能使用目标NET4 Full.这包括:如果您正在构建服务器应用程序,例如:

  • 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等设计程序集


Mie*_*ter 33

另一个可能导致此错误的事情是使用使用较新版本的.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?) 
Run Code Online (Sandbox Code Playgroud)

在日志中我发现了这个:

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


小智 28

我解决了我的问题,因为另一个项目用.NET 4.5编码,另一个用4.0编码


Mar*_*ers 5

using语句引用的是名称空间,而不是项目

确保在引用的项目中具有适当命名的名称空间:

namespace PrjTest
{
     public class Foo
     {
          // etc...
     }
}
Run Code Online (Sandbox Code Playgroud)

阅读有关MSDN上名称空间的更多信息:


Seb*_*ada 5

也有可能引用的项目面向 .NET 4.0,而控制台应用项目面向 .NET 4.0 客户端库。

虽然它可能与此特定案例无关,但我认为其他人会发现此信息很有用。


Her*_*eld 5

事实证明我遇到了这个问题.

项目B参考项目A.

项目A编译为A.dll(程序集名称= A).

项目B编译为A.dll(程序集名称A).

Visual Studio 2010没有抓住这个.Resharper还可以,但不会编译.WinForms设计师给出了误导性的错误消息,说明可能是由不兼容的平台目标造成的.

在痛苦的一天之后,解决方案是确保组件没有相同的名称.


小智 5

编译后的dll应该有public Class。