命名空间无法识别(即使存在)


145

我收到此错误:

找不到类型或名称空间名称“ AutoMapper”(是否缺少using指令或程序集引用?)

有趣的是,我的项目中已经有该参考:

失败的计划

这是我的代码:

using System.Collections.Generic;
using DataContract;
using SelectorDAL;
using AutoMapper;

namespace SpecimenSelect
{
    public class SpecimenSelect : ISpecimenSelect
    {
        public SpecimenSelect()
        {
            SetupMaps();
        }

        private static void SetupMaps()
        {
            Mapper.CreateMap<SpecimenDetail, SpecimenDetailContract>();
        }

另一个奇怪的是,我的解决方案中还有两个其他项目都使用AutoMapper并引用了完全相同的AutoMapper.dll文件。他们俩都工作得很好。

这是一个的屏幕截图:

那个工程

这是该代码(可以正常编译):

using System.Collections.Generic;
using AutoMapper;
using DataContract;
using SelectorDAL;

namespace PatientSelect
{

    public class PatientSelect : IPatientSelect
    {
        public PatientSelect()
        {
            SetupMaps();
        }

        private void SetupMaps()
        {
            Mapper.CreateMap<Patient, PatientContract>();
            Mapper.CreateMap<OrderedTest, OrderedTestsContract>();
            Mapper.CreateMap<Gender, GenderContract>();
        }

这两个引用似乎在属性页上具有相同的数据。

我想念什么?

我试过了:

  1. 重新启动Visual Studio
  2. 不使用using语句进行引用(即AutoMapper.Mapper.CreateMap
  3. 清理并重建

还有其他想法吗?


1
参考路径不正确吗?也许它是用绝对路径添加的,但是DLL已经被移动了?
kevingessner,2010年

Answers:


259

检查以确保您的项目未设置为使用.NET Framework 4客户端配置文件。

您可以通过右键单击您的项目(而不是解决方案)来检查/更改它,选择Properties- > Application- > Target framework。目标框架是该页面上的下拉列表。

这是Visual Studio中的问题(我什至会称其为错误)。AutoMapper要求从.NET Framework 4客户端配置文件中排除的程序集。由于您的项目正在使用该版本的框架,因此它将中断。

当您所引用项目的.NET Framework版本高于进行引用的项目时,类似的错误会传播到生成过程。即,一个以4.5为目标的项目引用了一个以4.5.1为目标的项目,则会给您同样的错误。

发生这种情况时,需要有更好的错误消息,因为对于错误消息告诉您引用已明确引用的程序集的原因,没有合理的解释,说明为什么它不会生成。


7
这正是问题所在!谢谢!我同意这个错误非常容易引起误解。我也不明白为什么“客户资料”是新项目的默认值。大多数计算机都将拥有完整的.net框架吗?(或者MS只是将客户端框架放在Windows Update上?)无论如何,我为之开发的所有计算机都将具有完整的框架。我希望有一种方法可以更改新项目的默认设置,以便它确实像我这样咬我。无论如何。再次感谢!我被困住了,我没有想到去那里看。
瓦卡诺

我有完全一样的问题!即使我正确添加了引用,Windows服务项目中也无法识别类型。我将目标框架从.NET Framework 4客户端配置文件更改为.NET Framework4。请注意,我还必须重新添加引用以使其能够编译。似乎是Visual Studio 2010中的问题。布达佩斯的感谢和问候。
Varga Tamas

好一个,这也发生在我身上。我的测试项目无法识别引用的名称空间,即使它们在那里。这是因为我将库更改为.NET 4.5平台,但测试项目仍为4.0。无论如何,您的回答都会使我走上正确的道路。谢谢您解决这个问题。
Jukka Puranen

当我尝试在.Net 3.5客户端配置文件项目中使用.Net 2.0程序集时遇到相同的问题。并切换到3.5完整个人资料即可解决此问题。
Palani

我的问题是相似的。这些项目使用了不同的Framework版本。主项目使用4.5,新创建的项目使用4.5.1。如果错误消息更好,那就更好了。
L_7337

27

让我问一个愚蠢的问题:是否可以有两个automapper.dll文件?一个带有AutoMapper命名空间,一个没有命名空间?确认两个项目中的路径。

我还注意到using命令的顺序是不同的。没关系,但是您是否尝试过洗牌?


18

如果您的类没有编译,即使它在项目中,请检查以下内容:

  1. 类名是否完全相同
  2. 名称空间是否完全相同
  3. 类属性是否显示生成操作=编译

6
我使用资源管理器复制了.cs文件,然后将其包含在项目中。VS.Net将生成操作设置为“内容”,而不是“编译”,因此无法识别名称空间。接得好!
AUSteve

1
我通过“添加”->“类”功能添加了该类,然后将构建操作设置为内容。只是好奇为什么?无论如何,这帮助了我,虽然如此简单,但从未遇到过。这就是为什么我什至不去看那里,而是用Google搜索它的原因。
异常

14

如果所有其他答案都无法帮助您,这必须是最简单的解决方案

我正在寻找答案中设置的问题,尝试了所有答案-没有用,然后我意识到Visual Studio 2018Microsoft开发。所以我做了大多数人所做的

重新启动Visual Studio, 并且可以正常工作


为我工作,但在重新启动之前删除了bin和obj文件夹。
Chandan YS

在我关于stackoverflow的所有年份中,这是对错误(实际上提供了解决方案)的最好的回应,并且在第一次重新启动时起作用。失眠了!
科林·怀特

12

我通过右键单击包含文件的文件夹并选择“ 从项目中排除”,然后再次右键单击并选择“ 包含在项目中”解决了此问题(首先必须启用“ 显示所有文件”以使排除的文件夹可见)


对于大量文件,我遇到了这个错误,只是删除了一个文件,然后重新包含它就解决了整个解决方案的问题。
达里尔

右键点击什么?“从项目中排除”将从解决方案资源管理器中删除该文件夹。没有“包含在项目中”
Florian Winter

2
@FlorianWinter要右键单击排除的文件夹,您需要打开“ 显示所有文件 ”。可以通过“解决方案资源管理器”将其打开,位于“全部折叠”按钮旁边。
user3251328

不知道为什么,但是当我在项目中添加了一个包含新类的新文件,但是在已经引用了该新类包含项目的另一个项目中无法创建该类的新实例时,这在VS2019中起作用。 ..¯\_(ツ)_/¯
matt.fc

7

我在VS2010中无法识别参考文献时遇到了类似的问题,此处的答案无法对其进行更正。

我的解决方案中的问题与所引用项目所在的路径的扩展有关。在使用SVN时,我创建了一个存储库分支来进行一些测试,并且该分支在路径结构中增加了两个级别,因此该路径变得太长而无法在Windows中使用。这不会引发任何错误,但是无法识别项目引用的名称空间。当我将项目的位置更改为较小的路径时,一切都很好。


2
对我们来说,这也是一个问题,而导致问题的原因是路径长度。在这种情况下,VS需要做的更好,以提供更好的错误,因为我们得到的错误非常容易引起误解。
VoodooChild

多亏您的回答,我想到了一个主意。我查看了项目的路径,发现根文件夹(由源树创建的根文件夹)的名称中包含“%20”而不是_。我将其更改为_,现在一切正常。
费尔南多·沃尔夫

5

就我而言,所引用的dll是在.Net Framework的更高版本中构建的。添加参考之后,就可以使用它了。但是,一旦我完成构建,就会弹出“缺少参考”错误。我刷新dll,错误将消失,但它永远不会生成。这篇文章使我检查了框架版本,因此可以通过在相同版本中构建引用的项目来解决它。


3

项目的类型表可能处于错误状态。我会尝试删除/添加引用,如果该引用不起作用,请创建另一个项目,导入我的代码,然后查看是否可行。

我在使用VS 2005时遇到了这个问题,但是现在人们希望 MS可以解决该特定问题。


你能解决这个问题吗?
Fran_gg7 2015年

3

该问题已被授予,但还有其他尚未描述的细节需要检查。

我也有这种行为,在项目A中引用了项目B,但是在项目A中无法识别项目B的名称空间。经过一番挖掘,我发现我的路径太长了。通过减少项目的路径(A和B),引用变得可见并可用。

我通过以较小的路径深度创建项目C来测试该理论。我在项目A中引用了项目C。这些引用按预期正常工作。然后,我从解决方案中删除了项目C,仅将项目C移至与项目B相同的深层路径,然后将项目C添加回解决方案中,并尝试进行编译。然后,我再也无法看到C项目。



2

这在Visual Studio 2019中发生在我身上。对我来说,我正在尝试引用解决方案中的另一个项目。这是我采取的步骤,以防其他任何人:

  1. 确保要引用的项目列在“引用”下
  2. 确保两个项目都使用正确版本的.NET Framework
  3. 生成项目(单击绿色的“开始”箭头)

我很困惑,因为在步骤1和2之后仍然出现错误,但是构建项目似乎可以解决该问题。


1

我遇到了类似的问题,尽管在编译过程中很好,但在执行过程中找不到命名空间/方法,其原因似乎是我要引用的程序集已部署到GAC,然后又进行了更改,因此当我引用程序集时在Visual Studion中,它使用的是最新版本,但在运行时使用了GAC的版本。


1

就我而言,我仅在VS 2015中遇到错误。在VS 2017中打开项目时,错误消失了。


1

疯。我知道。

在这里尝试了所有选项。重新启动,清理,手动检入生成的DLL(这对于了解实际上是否是您自己造成的麻烦非常有用)。

我通过在选项中将MSBuild的详细程度设置为“详细”来使其工作。


对我来说,这是一个在Configuration Name为x86时在PlatformTarget上设置为AnyCpu的构建配置。此设置帮助我找到了答案。
Dbl

1

原始海报已经回答了这个问题,但是如果有人在MS-Test项目中遇到此问题,请执行以下操作:

在Visual Studio中,单击“测试”菜单->“测试设置”->“默认处理器体系结构”,并确保该体系结构与您引用的其他程序集的体系结构匹配。如果另一个程序集是x64,而您的测试设置是x86,则您可能会遇到原始海报的症状。


0

我正在Xamarin项目上工作,和往常一样,删除obj文件夹并重建解决了我的问题,我的VS无法识别的命名空间是我自己的项目BTW中的代码



0

我有一个类似的问题,需要一些时间进行故障排除,所以我想分享一下:

在我的情况下,无法解析的名称空间是Company.Project.Common.Models.EF。我已经在新的Company.Project.BusinessLogic.Common命名空间中添加了一个文件。

大多数文件都有

using Company.Project;

然后将模型引用为Common.Models.EF。所有具有

using Company.Project.BusinessLogic;

之所以失败,是因为VS无法确定要使用哪个名称空间。

解决方案是将第二个命名空间更改为Company.Project.BusinessLogic.CommonServices


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.