名称空间无法识别(即使它在那里)

Vac*_*ano 141 c# reference

我收到此错误:

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

有趣的是,我已经在我的项目中有了这个参考:

ProjectThatFails

这是我的代码:

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>();
        }
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的事情是我的解决方案中有两个其他项目都使用AutoMapper并引用完全相同的AutoMapper.dll文件.他们都完美无缺.

这是一个屏幕截图:

ProjectThatWorks

这是代码(编译好):

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>();
        }
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

我试过了:

  1. 重新启动Visual Studio
  2. 没有使用声明的引用(即AutoMapper.Mapper.CreateMap)
  3. 清洁和重建

还有其他想法吗?

And*_*are 249

检查以确保您的项目未设置为使用.NET Framework 4 Client Profile.

您可以通过右键单击项目(而不是解决方案)来检查/更改此项,选择" 属性" - >" 应用程序" - >" 目标框架".目标框架是该页面的下拉列表.

这是Visual Studio中的一个问题(我甚至会把它称为bug).AutoMapper需要从.NET Framework 4 Client Profile中排除的程序集.由于您的项目正在使用该版本的框架,因此它会中断.

当您引用的项目的.NET Framework版本高于进行引用的项目时,类似的错误将传播到构建过程.即一个针对4.5的项目,它引用了一个针对4.5.1的项目,它会给你同样的错误.

发生这种情况时需要有一个更好的错误消息,因为没有合理的解释,为什么它不会构建,因为错误消息告诉您引用您已明确引用的程序集.

  • 这正是问题所在!谢谢!我同意这个错误是非常误导的.我也不明白为什么客户端配置文件是新项目的默认设置.大多数计算机都将拥有完整的.net框架吗?(或者MS只是将客户端框架放在Windows Update上?)无论如何,我开发的所有计算机都将拥有完整的框架.我希望有一种方法可以改变新项目的默认值,所以它确实像我一样咬了我.无论如何.再次感谢!我被困住了,我不想去看那里. (7认同)

n8w*_*wrl 27

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

我还注意到using命令的顺序是不同的.这应该没关系,但是你试着改变它们吗?


小智 17

如果你的类没有编译,即使它在项目中检查这些:

  1. 类名是否完全相同
  2. 名称空间是否完全相同
  3. 类属性是否显示build action = compile

  • 我用资源管理器复制了一个.cs文件,然后将其包含在项目中.VS.Net将构建操作设置为"内容"而不是"编译",因此无法识别命名空间.接得好! (6认同)

use*_*328 10

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

  • @FlorianWinter要右键单击您需要的排除文件夹**显示所有文件**.这可以通过解决方案资源管理器切换,它位于**全部折叠**按钮旁边. (2认同)

ins*_*iac 9

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

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

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

  • 在我使用 stackoverflow 的这些年里,这是对 bug 的最好的咸味响应(实际上提供了解决方案),并且它在第一次重新启动时就起作用了。失眠了ftw! (3认同)
  • 为我工作,但在重新启动之前删除了 bin 和 obj 文件夹。 (2认同)

小智 7

我有类似的问题,在VS2010中没有被识别的参考文献,这里的答案无法纠正它.

我的解决方案中的问题与引用项目所在路径的扩展有关.当我使用SVN时,我创建了一个存储库的分支来进行一些测试,并且该分支在路径结构中增加了两个级别,因此路径变得太长而无法在Windows中使用.这没有抛出任何错误,但没有识别项目引用的命名空间.当我纠正项目的位置以获得更小的路径时,一切都很顺利.

  • 对我们来说这也是一个问题,而且是引起问题的路径长度.在这种情况下,VS需要做出更好的错误,因为我们得到的错误是非常误导的. (2认同)

Ank*_*r-m 5

就我而言,引用的dll是在更高版本的.Net Framework中构建的.添加引用后,我可以使用它.但是一旦我进行了构建,就会弹出"缺少引用"错误.我刷新了错误将会发生的DLL,但它永远不会构建.这篇文章让我检查了框架版本,因此我可以通过在同一版本中构建引用的项目来解决它.