首页 文章

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

提问于
浏览
127

我收到此错误:

找不到类型或命名空间名称'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>();
        }

另一个奇怪的事情是我的解决方案中有两个其他项目都使用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>();
        }

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

我错过了什么?

我试过了:

  • 重新启动Visual Studio

  • 没有使用声明的引用(即 AutoMapper.Mapper.CreateMap

  • 清洁和重建

还有其他想法吗?

14 回答

  • 6

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

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

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

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

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

  • 1

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

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

  • 0

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

    • 类名是否完全相同

    • 名称空间是否完全相同

    • 类属性是否显示build action = compile

  • 16

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

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

  • 6

    我通过右键单击包含文件的文件夹并选择 Exclude From Project 然后再次右键单击并选择 Include In Project (首先必须启用 Show All Files 以使排除的文件夹可见)来解决此问题

  • 1

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

  • 28

    也许项目的类型表处于不正确的状态 . 我会尝试删除/添加引用,如果这不起作用,创建另一个项目,导入我的代码,看看是否有效 .

    我在使用VS 2005时遇到了这个问题,人们会期望MS现在已经修复了这个特定的问题了 .

  • 236

    问题已经被授予,但尚未描述的其他细节需要检查 .

    我也有这种行为,其中项目B在项目A中被引用,但项目B的名称空间在项目A中未被识别 . 经过一些挖掘,我发现我的路径太长了 . 通过减少项目的路径(A和B),引用变得可见且可用 .

    我通过在更小的路径深度创建项目C来测试该理论 . 我在项目A中引用了项目C.引用按预期正常工作 . 然后我从解决方案中删除了项目C,只是将项目C移动到一个深层路径,与项目B相同,并将项目C添加回解决方案,并尝试编译 . 然后我再也无法看到C项目了 .

  • 2

    在我的情况下,我复制了一个类库,并没有更改项目属性中的“程序集名称”,所以一个DLL覆盖了另一个...

  • 3

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

    我正在寻找答案中我的设置有什么问题,尝试了所有这些 - 没有工作,然后我意识到 Visual Studio 2018 是由 Microsoft 开发的 . 所以我做了大多数人做的事,

    Restarted Visual Studio 这很有效

  • 0

    疯 . 我知道 .

    尝试了所有选项 . 重新启动,清理,手动检查生成的DLL(这对于理解它实际上是否真的搞砸了而言非常宝贵) .

    我通过在选项中将MSBuild的详细程度设置为“详细”来实现它 .

  • 5

    原始海报已经回答了这个问题,但是如果有人在MS-Test项目中遇到这个问题:

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

  • 1

    我遇到了类似的命名空间/方法问题,虽然在编译期间没有找到它,但原因似乎是我引用的程序集部署到GAC并且从那时起被更改,所以当我引用程序集时在Visual Studion中,它使用的是最新版本,但在运行期间,使用了GAC版本 .

  • 1

    在我的情况下,我只在VS 2015中收到错误 . 在VS 2017中打开项目时,错误消失了 .

相关问题