首页 文章

找不到类型或命名空间名称[重复]

提问于
浏览
416

这个问题在这里已有答案:

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

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

using PrjTest;
  • 参考已正确添加

  • using 语句正确到位

  • 拼写是正确的

  • PrjTest构建成功

  • PrjForm几乎构建,但在 using PrjTest; 行中出现错误:

The type or namespace name 'PrjTest' could not be found (are you missing a using directive or an assembly reference?)

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

  • 删除了Resharper(因为Resharper在识别引用的项目时没有遇到任何麻烦,我认为它可能值得一试)

  • 删除并重新添加了引用和using语句

  • 从头开始重新创建PrjForm

  • PrjForm目前驻留在PrjTest文件夹中,我尝试将其移动到外部文件夹

  • 使用 VS 2010 的新副本在另一台计算机上加载解决方案

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

我还能尝试什么?

16 回答

  • 1

    检查你的项目属性,你的参考路径应该是空的,如下所示:

    Project Properties

    问候

  • 4

    引用的项目也可能是针对.NET 4.0,而Console App Project的目标是.NET 4.0 Client Library .

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

  • 2

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

  • 27

    将框架更改为

    .NET Framework 4 Client Profile
    

    为我做了这份工作 .

  • 1

    this question .

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

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

    感谢大家!我想这可以说,经过网上搜索的所有时间后,我发现解决方案发布后的几分钟,我想诀窍是知道正确的问题要问...

  • 678

    对于COM / ActiveX引用,VS 2012将在using语句上显示此错误 . 这很有趣,因为它说你可能错过了一个使用声明 .

    要解决此问题:即使它位于邻居项目中,也要注册实际的COM / ActiveX dll,并通过COM通道而不是项目通道添加引用 . 它将添加Interop.ProjectName而不是ProjectName作为参考,这解决了这个奇怪的错误 .

  • 38

    编译后的dll应该有公共类 .

  • 1

    另一个可能导致此错误的事情是使用使用较新版本的.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

  • 4

    可能导致此类行为的其他问题是构建配置 .

    我有两个项目配置设置为特定文件夹 . 像 DebugAny CPU ,其次是 Debugx86 .

    我做了什么我去了 Solution->Context menu->Properties->Configuration properties->Configuration 并且我将所有项目设置为使用相同的配置 Debugx86 并且还检查了 Build 刻度线 .

    然后项目开始正确构建并能够查看名称空间 .

  • 3

    在我的情况下,我有:

    引用的DLL: .NET 4.5

    项目: .NET 4.0

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

  • 2

    如果您的项目(PrjTest)未在 PrjTest 名称空间中公开任何公共类型,则会导致该错误 .

    项目(PrjTest)是否包含公共“PrjTest”命名空间中的任何类或类型?

  • 3

    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

  • 28

    我遇到过同样的问题 . 目标框架对我来说很好 . 它仍然无法正常工作 . 我安装了VS2010 sp1,并在PrjTest上进行了“Rebuild” . 然后它开始为我工作 .

  • 3

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

    项目B参考项目A.

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

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

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

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

  • 1

    using语句引用命名空间,而不是项目 .

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

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

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

  • 40

    刚刚将Application的目标框架更改为“.Net Framework 4” .

    错误消失了 .

    祝好运; :d

相关问题