关于c#:找不到类型或命名空间名称

The type or namespace name could not be found

本问题已经有最佳答案,请猛点这里访问。

我有一个C#解决方案,在Visual Studio 2010中有几个项目。一个是测试项目(我称之为"prjtest"),另一个是Windows Forms Application项目(我称之为"prjform")。还有一个被prjform引用的第三个项目,它能够成功地引用和使用。

prjform引用prjtest,prjform有一个带有using语句的类:

1
using PrjTest;
  • 已正确添加引用
  • using报表正确就位
  • 拼写正确
  • prjtest成功生成
  • prjform几乎可以构建,但在using PrjTest;行中断,错误为:
  • 找不到类型或命名空间名称"prjtest"(是否缺少using指令或程序集引用?)

    我已尝试以下方法解决此问题:

  • 删除了resharper(因为resharper识别引用的项目没有问题,所以我认为值得一试)
  • 删除并重新添加引用和使用语句
  • 重新创建了prjform
  • prjform当前位于prjtest文件夹中,我尝试将其移动到外部文件夹中
  • 将解决方案加载到另一台计算机上,新拷贝的VS 2010
  • 我做了家庭作业,花了太长时间在网上寻找答案,但所有的解决方案都没有帮助。

    我还可以试试什么?


    看看这个问题。

    结果发现这是一个客户端分析问题。

    prjform设置为".NET Framework 4客户端配置文件"我把它改为".NET Framework 4",现在我有了一个成功的构建。

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


    就我而言,我有:

    引用的dll:.NET 4.5

    项目:.NET 4.0

    由于上述不匹配,4.0项目在4.5.dll的命名空间中看不到。我将.dll重新编译为target.net 4.0,我很好。


    PrjForm was set to".Net Framework 4 Client Profile" I changed it to".Net Framework 4", and now I have a successful build.

    这对我也很管用。谢谢。我尝试了一个dotnet的RDF示例,其中我从dotnetrf下载了工具包。

    Net4客户端配置文件:始终针对所有客户端桌面应用程序(包括Windows窗体和WPF应用程序)的Net4客户端配置文件。

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

    • ASP.NET应用程序
    • 基于ASMX的服务器端Web服务

    如果使用传统客户端方案,例如:o使用net4中已弃用但不包含在客户机配置文件中的system.data.oracleclient.dll。

    • 使用旧的Windows工作流基金会3或3.5(WF3.0,WF3.5)

    如果以开发人员方案为目标,并且需要诸如msbuild之类的工具,或者需要访问诸如system.design.dll之类的设计程序集


    可能导致此错误的另一个原因是使用较新版本的.NET生成的nuget包。

    原始错误:

    1
    2
    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
    elease\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


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


    我遇到了这个问题。

    项目B参考项目A。

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

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

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

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


    引用的项目也可能以.NET 4.0为目标,而控制台应用程序项目以.NET 4.0客户端库为目标。

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


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

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

    1
    2
    3
    4
    5
    6
    7
    namespace PrjTest
    {
         public class Foo
         {
              // etc...
         }
    }

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

    • 使用命名空间


    我也有同样的问题。目标框架对我来说很好。但它仍然不起作用。我安装了VS2010 SP1,并在prjtest上进行了"重建"。然后它开始为我工作。


    编译的dll应具有公共类。


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

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


    将框架更改为

    1
    .NET Framework 4 Client Profile

    为我做了这项工作。


    刚刚将应用程序的目标框架更改为".NET Framework 4"。

    错误消失了。

    祝你好运;D


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

    Project Properties

    当做


    如果您的项目(prjtest)没有在PrjTest名称空间中公开任何公共类型,它将导致该错误。

    项目(prjtest)是否包括"prjtest"名称空间中公共的任何类或类型?


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

    我有两个项目的配置设置为构建到特定的文件夹中。像以东十一〔0〕和以东十一〔1〕一样,第二个是以东十一〔0〕和以东十一〔3〕。

    我做了什么,我去了Solution->Context menu->Properties->Configuration properties->Configuration,我把我所有的项目都设置为使用相同的配置Debugx86,还检查了Build的勾号。

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