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

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

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

using PrjTest;
  1. Reference已正确添加
  2. using语句正确放置
  3. 拼写正确
  4. 成功构建了PrjTest
  5. PrjForm几乎可以构建,但在using PrjTest;行上出现错误:

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

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

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

我已经做了功课,花了很长时间在网上寻找答案,但没有一个解决方案有用。

我还能试什么?

1019134 次浏览

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

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

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

在MSDN上阅读更多关于命名空间的信息:

  • Using Namespaces .

    看到这个问题

    原来这是客户档案的问题。

    PrjForm设置为"。Net Framework 4客户端配置文件 我把它改成了”。Net Framework 4”,现在我有一个成功的构建 < p >谢谢大家! 我想在花了那么多时间在网上搜索之后,我在发帖后几分钟就找到了解决方案,我想诀窍是知道要问的正确问题..

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

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

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

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

NET4客户端配置文件: 所有客户端桌面应用程序(包括Windows窗体和WPF应用程序)始终以NET4客户端配置文件为目标 完整的框架: 只有当你的应用程序需要的功能或程序集没有包含在客户端配置文件中时,目标NET4完整。这包括: 如果您正在构建服务器应用程序,例如:

  • ASP。网络应用程序
  • 基于服务器端ASMX的web服务

如果您使用遗留客户端场景,例如: o使用System.Data.OracleClient.dll,该文件在NET4中已弃用,不包含在客户端配置文件中

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

如果你的目标是开发人员场景,需要工具,如MSBuild或需要访问设计程序集,如System.Design.dll

也有可能引用的项目针对。net 4.0,而控制台应用程序项目针对。net 4.0客户端库。

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

只是将Application的目标框架更改为”。Net Framework 4”。

错误就消失了。

< p >好运; : D < / p >
我也有同样的问题。目标框架对我来说很好。但它还是不工作。 我安装了VS2010 sp1,并在PrjTest上进行了“重建”。然后它开始为我工作。< / p >

将框架更改为

.NET Framework 4 Client Profile

帮我完成了任务。

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

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

在我的情况下,我有:

引用DLL: .NET 4.5

项目:.NET 4.0

由于上述不匹配,4.0项目无法看到4.5 . dll的名称空间内部。我重新编译了。dll以。net 4.0为目标,没有问题。

检查你的项目属性,你的参考路径应该是空的,像这样:

项目属性

问候

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

我遇到了这个问题。

项目B引用项目A。

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

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

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

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

其他可能导致这种行为的问题是构建配置。

我有两个项目,配置设置为构建到特定的文件夹。 像DebugAny CPU,其次是Debugx86

我所做的是去Solution->Context menu->Properties->Configuration properties->Configuration,我将所有项目设置为使用相同的配置Debugx86,并检查Build标记。

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

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

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