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

The type or namespace name could not be found [duplicate]

提问人:Anders 提问时间:1/22/2011 最后编辑:VikrantAnders 更新时间:11/2/2016 访问量:1082532

问:

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

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

using PrjTest;
  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

我已经做好了功课,花了很长时间在网上寻找答案,但没有任何解决方案有帮助。

我还能尝试什么?

C# visual-studio-2010 参考 using-statement using-directives

评论

2赞 Shekhar_Pro 1/22/2011
是否确定 PrjTest 具有名为 PrjTest 的命名空间
10赞 Anders 1/22/2011
难道你不知道吗:stackoverflow.com/questions/4286599/......事实证明,这是一个客户分析问题,我什至没有想过要检查它。
0赞 Anders 1/22/2011
@Shekhar_Pro:我敢肯定,这是我检查的第一件事。
3赞 Leniel Maccaferri 7/1/2014
是的。。。这通常是一个不兼容\不匹配的事情。问题是 Visual Studio(甚至 2013)不会在输出窗口中告诉你这一点。:(.NET FrameworkError List
3赞 slugster 1/23/2015
我已将其作为重复项关闭,因为在仔细阅读后,您的问题与比该问题早 6 个月的重复项完全相同。(您的问题是引用完整框架程序集的客户端配置文件程序集)。

答:

10赞 Mark Byers 1/22/2011 #1

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

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

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

在 MSDN 上阅读有关命名空间的详细信息:

评论

1赞 Anders 1/22/2011
谢谢马克,我确实有适当命名的命名空间。
746赞 Anders 1/22/2011 #2

请参阅此问题

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

PrjForm 设置为“.Net Framework 4 客户端配置文件” 我将其更改为“.Net Framework 4”,现在我有一个成功的构建。

谢谢大家! 我想它认为,在网上搜索了这么多时间之后,我在发布几分钟后就找到了解决方案,我想诀窍是知道要问的正确问题。

评论

18赞 Mikey G 4/10/2013
同样的错误,但在我的情况下,我试图在 3.5 项目中使用 4.0 dll。
6赞 CW30Meters 11/26/2013
同样的错误,但这里是 4.5 项目中的 4.0 dll。
4赞 ahwm 1/13/2015
这发生在上周我身上,但是在 4.5 项目中加载 4.5.2 库。请注意:4.5.2 项目可以很好地加载 4.5 或 4.5.1 库。
4赞 Tez Wingfield 9/11/2016
谢谢!挠了挠头一个小时!我不小心添加了 4.6.2 proj 而不是 4.5.2。
1赞 Sal 9/4/2018
就我而言,发生这种情况是因为 CS 文件未正确添加到 csproj 中。将类文件重新添加到项目中解决了该问题。
1赞 Reed Copsey 1/22/2011 #3

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

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

评论

0赞 Anders 1/24/2011
感谢您的见解,我学到了很多。PrjTest 包括大约 50 个公共课程;这是一个规模不错的项目
42赞 Dee 5/23/2011 #4

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

这也对我有用。多谢。我正在尝试 dotNet 的 RDF 示例,我从 dotnetrdf 下载了工具包。

NET4 客户简介: 始终将 NET4 客户端配置文件作为所有客户端桌面应用程序(包括 Windows 窗体和 WPF 应用)的目标。

NET4 完整框架: 仅当应用所需的功能或程序集未包含在客户端配置文件中时,才以 NET4 Full 为目标。这包括: 如果要构建 Server 应用,例如:

  • ASP.Net 应用
  • 基于服务器端 ASMX 的 Web 服务

如果使用旧版客户端方案,例如: o 使用 System.Data.OracleClient,.dll 在 NET4 中已弃用,并且未包含在客户端配置文件中。

  • 使用旧版 Windows 工作流 基础 3.0 或 3.5 (WF3.0 , WF3.5)

如果面向开发人员方案并需要 MSBuild 等工具,或者需要访问设计程序集(如 System.Design,.dll)

评论

0赞 rf_wilson 6/10/2014
就我而言,我在 1 个解决方案中有 3 个项目。我必须将它们全部设置为 .Net Framework 4.5,然后才能编译!令人讨厌的是,错误消息具有误导性。
0赞 Rich_Rich 12/7/2018
就我而言,这一切都无济于事。但是,创建一个新项目,安装相同的 NuGet 包并复制代码就可以了。
5赞 Sebastian Zaklada 2/1/2012 #5

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

虽然它可能与这个特殊情况无关,但我认为其他人会发现这些信息很有用。

1赞 Hamed MotallebiNejad 5/4/2012 #6

刚刚将应用程序的目标框架更改为“.Net Framework 4”。

错误消失了。

祝你好运; :D

评论

2赞 A user 12/8/2016
请如何更改应用程序目标名称?
3赞 saju 7/30/2012 #7

我有同样的问题。目标框架对我来说很好。它仍然没有工作。 我安装了 VS2010 sp1,并在 PrjTest 上进行了“重建”。然后它开始为我工作。

2赞 Radix 10/1/2012 #8

将框架更改为

.NET Framework 4 Client Profile

为我完成了这项工作。

评论

0赞 Anders 10/1/2012
你提出了一个好的观点:只要你的所有项目都使用相同的框架,它就应该可以解决问题 - 无论是客户端配置文件还是早期版本的 .Net。
2赞 Rachel Henderson 10/22/2012 #9

对于 COM/ActiveX 引用,VS 2012 将在 using 语句上显示此错误。这很有趣,因为它说可能是你缺少一个 using 语句。

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

75赞 DeepSpace101 11/28/2012 #10

就我而言,我有:

引用的 DLL:.NET 4.5

项目:.NET 4.0

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

评论

0赞 Vee 8/3/2021
我的一个项目从 4.5 更新到 4.5.2 并触发了这个问题......
1赞 Luis Rodriguez 12/4/2012 #11

检查您的项目属性,您的引用路径应为空,如下所示:

Project Properties

问候

评论

0赞 Gökhan Ercan 4/21/2020
通过此屏幕添加有问题的引用dll的引用文件夹解决了我的问题。我想问题是第一级参考的不同版本的参考。
30赞 kurdapya 12/9/2012 #12

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

评论

0赞 Andrew Grothe 9/10/2013
我在 .NET 4.0 和 .NET 4.0 Client Profile 之间遇到了同样的问题。好电话。
6赞 Herman Schoenfeld 6/3/2013 #13

我遇到了这个问题,原来是这样。

项目 B 引用项目 A。

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

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

Visual Studio 2010 没有捕捉到这一点。Resharper 还可以,但不会编译。WinForms设计器给出了误导性的错误消息,称可能是由于不兼容的平台目标造成的。

在经历了痛苦的一天之后,解决方案是确保程序集没有相同的名称。

3赞 Mateusz 10/23/2013 #14

可能导致此类行为的其他问题是生成配置。

我有两个项目,其配置设置为构建到特定文件夹。 喜欢 和 和 在第二位是 和 .DebugAny CPUDebugx86

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

然后,项目开始正确构建,并能够看到命名空间。

5赞 Peter 4/24/2014 #15

编译的 dll 应具有 public Class。

42赞 Miebster 10/15/2014 #16

可能导致此错误的另一件事是具有使用较新版本的 .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 包:The solution was to re-install the NuGet packages:

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

评论

1赞 actual_kangaroo 8/19/2015
这对我来说做到了,我的应用程序以 4.5.2 为目标,但单元测试是 4.5 谢谢。
0赞 O'Mutt 6/28/2018
这个!我关闭了警告,因为,你知道,警告......重新打开它,它立即显示错误。