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

时间:2010-11-19 20:13:25

标签: 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>();
        }

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

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

我错过了什么?

我试过了:

  1. 重新启动Visual Studio
  2. 没有使用声明(即AutoMapper.Mapper.CreateMap
  3. 的引用
  4. 清理并重建
  5. 还有其他想法吗?

21 个答案:

答案 0 :(得分:244)

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

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

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

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

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

答案 1 :(得分:27)

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

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

答案 2 :(得分:17)

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

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

答案 3 :(得分:8)

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

答案 4 :(得分:7)

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

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

答案 5 :(得分:5)

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

答案 6 :(得分:3)

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

我在使用VS 2005时遇到了这个问题,但是现在期望 MS已经修复了这个特定的问题了。

答案 7 :(得分:3)

这个问题已经被授予,但还有其他细节需要检查。

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

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

答案 8 :(得分:3)

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

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

重新启动Visual Studio 而且有效

答案 9 :(得分:2)

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

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

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

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

答案 12 :(得分:1)

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

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

答案 13 :(得分:1)

疯狂。我知道。

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

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

答案 14 :(得分:1)

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

就我而言,删除/添加该程序集是可行的。

答案 17 :(得分: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

答案 18 :(得分:0)

重新启动Visual Studio 2019-做到了。

答案 19 :(得分:0)

承认这是一个较旧的帖子,但仍然认为我会将此建议添加到答复列表中,因为我没有看到它被提及。

如果未解决的引用存在于解决方案中另一个项目的上下文中:

右键单击有问题的项目,选择“构建依赖关系->项目依赖关系”,并确保选择了所需的项目作为参考。

我遇到了与帖子中所述相同的问题,但是没有建议的解决方法起作用。我以前从未在VS中看到过这样的怪癖(目前正在运行VS 2019)

我检查了潜在的名称空间问题以及过多的较明显原因,没有任何意义。 Intellisense甚至承认另一个项目的存在,并建议使用using语句,即使添加了using引用之后也是如此; VS 2019仍然不认可其他项目。

以上述方式强制依赖解决了该问题。

答案 20 :(得分:0)

我的解决方案是从我的解决方案文件夹中删除 .vs 文件夹。这会重置解决问题的智能感知。您需要打开“隐藏项目”(如果运行的是 Windows),因为它是一个隐藏文件夹。

此处找到解决方案 - https://weblog.west-wind.com/posts/2018/Aug/07/Fixing-Visual-Studio-Intellisense-Errors