提问人:Anders 提问时间:1/22/2011 最后编辑:VikrantAnders 更新时间:11/2/2016 访问量:1082532
找不到类型或命名空间名称 [duplicate]
The type or namespace name could not be found [duplicate]
问:
我有一个解决方案,其中包含 中的几个项目。
一个是测试项目(我称之为“PrjTest”),另一个是项目(我称之为“PrjForm”)。PrjForm 还引用了第三个项目,它能够成功引用和使用。C#
Visual Studio 2010
Windows Forms Application
PrjForm 引用了 PrjTest,PrjForm 有一个带有语句的类:using
using PrjTest;
- 已正确添加引用
using
语句正确到位- 拼写正确
- PrjTest 构建成功
- PrjForm 几乎构建,但断行并出现错误:
using PrjTest;
找不到类型或命名空间名称“PrjTest”(是否缺少 using 指令或程序集引用?
我尝试了以下方法来解决这个问题:
- 删除了 Resharper(因为 Resharper 在识别引用的项目时没有问题,我认为它可能值得一试)
- 删除并重新添加了引用和 using 语句
- 从头开始重新创建 PrjForm
- PrjForm 目前位于 PrjTest 文件夹中,我尝试将其移动到外部文件夹
- 将解决方案加载到另一台计算机上,并添加了
VS 2010
我已经做好了功课,花了很长时间在网上寻找答案,但没有任何解决方案有帮助。
我还能尝试什么?
答:
using 语句引用命名空间,而不是项目。
请确保引用的项目中具有适当命名的命名空间:
namespace PrjTest
{
public class Foo
{
// etc...
}
}
在 MSDN 上阅读有关命名空间的详细信息:
评论
请参阅此问题。
事实证明,这是一个客户端分析问题。
PrjForm 设置为“.Net Framework 4 客户端配置文件” 我将其更改为“.Net Framework 4”,现在我有一个成功的构建。
谢谢大家! 我想它认为,在网上搜索了这么多时间之后,我在发布几分钟后就找到了解决方案,我想诀窍是知道要问的正确问题。
评论
如果项目 (PrjTest) 未在命名空间中公开任何公共类型,则会导致该错误。PrjTest
项目 (PrjTest) 是否在“PrjTest”命名空间中包含任何公共类或类型?
评论
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)
评论
引用的项目也可能面向 .NET 4.0,而控制台应用项目面向 .NET 4.0 客户端库。
虽然它可能与这个特殊情况无关,但我认为其他人会发现这些信息很有用。
刚刚将应用程序的目标框架更改为“.Net Framework 4”。
错误消失了。
祝你好运; :D
评论
我有同样的问题。目标框架对我来说很好。它仍然没有工作。 我安装了 VS2010 sp1,并在 PrjTest 上进行了“重建”。然后它开始为我工作。
将框架更改为
.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 编码的,另一个项目是用 4.0 编码的
评论
我遇到了这个问题,原来是这样。
项目 B 引用项目 A。
项目 A 编译为 A.dll(程序集名称 = A)。
项目 B 编译为 A.dll(程序集名称 A)。
Visual Studio 2010 没有捕捉到这一点。Resharper 还可以,但不会编译。WinForms设计器给出了误导性的错误消息,称可能是由于不兼容的平台目标造成的。
在经历了痛苦的一天之后,解决方案是确保程序集没有相同的名称。
可能导致此类行为的其他问题是生成配置。
我有两个项目,其配置设置为构建到特定文件夹。
喜欢 和 和 在第二位是 和 .Debug
Any CPU
Debug
x86
我做了什么,我去了,我将所有项目设置为使用相同的配置,并检查了刻度线。Solution->Context menu->Properties->Configuration properties->Configuration
Debug
x86
Build
然后,项目开始正确构建,并能够看到命名空间。
编译的 dll 应具有 public Class。
可能导致此错误的另一件事是具有使用较新版本的 .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
评论
.NET Framework
Error List