【问题标题】:Namespace not recognised in using statement. "The type or namespace '#' does not exist in the namespace '#'. Are you missing an assembly reference?在 using 语句中无法识别命名空间。 “命名空间‘#’中不存在类型或命名空间‘#’。是否缺少程序集引用?
【发布时间】:2016-02-23 08:32:24
【问题描述】:

我有一个包含大约 14 个项目的解决方案,但在尝试在其中两个项目之间建立链接时遇到问题:

  • Argus.Web(一个网络应用项目)
  • Argus.Domain.Office.Command(从 API 读取数据并将数据存储在本地 SQL Server 数据库中的项目)
  • (我还提到了一个名为 Argus.Domain 的项目,因为它可能是问题的一部分,尽管它在我的代码中的其他类似位置没有引起问题。)

Argus.Domain.Office.Command 有一个上下文 (argusOfficeContext) 将它链接到我想从 Argus.Web 访问的数据库。 (此上下文在其他情况下也很有效。)当我尝试在 Argus.Web 的一个类中添加一个 using 指令来引用上下文的命名空间时,我得到了标题中的错误。

这是我正在搭建的类(在 Argus.Web 中)发生错误的地方:

using Argus.Domain.Office.Command.Models;

namespace Argus.Web
{ 
    public partial class Calculator
    {
    }
}

红色的摆动线只出现在使用中的“Office”下,完整的错误是“名称空间'Argus.Domain'中不存在类型或名称空间'Office'。您是否缺少程序集引用? ”。

我检查了 Argus.Domain.Office.Command 项目是从 Argus.Web 引用的,当我检查 Argus.Web 构建依赖项时,我看到 Argus.Domain.Office.Command(以及其他项目 Argus.Domain ),并且它被设置为在 Argus.Web 之前构建。当我签入 Argus.Web References > Projects 时,项目 Argus.Domain.Office.Command 旁边有一个勾号,我得出结论认为它被引用了。

根据 Peter D 的评论,我检查了命名空间声明,它在项目 Argus.Domain.Office.Command 中声明。

(可能无关紧要:)这是我要引用的类

using System.Data.Entity;
using Argus.Domain.Office.Command.Models.Mapping;

namespace Argus.Domain.Office.Command.Models
{
    public partial class argusOfficeContext : DbContext
    {
        static argusOfficeContext()
        {
            Database.SetInitializer<argusOfficeContext>(null);
        }

        public argusOfficeContext()
            : base("Name=argusOfficeContext")
        {
        }

        public DbSet<Location> Locations { get; set; }
        public DbSet<LocationPeriodReport> LocationPeriodReports { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Configurations.Add(new LocationMap());
            modelBuilder.Configurations.Add(new LocationPeriodReportMap());
        }
    }
}

这两个项目都以 .NET Framework 4.5.1 为目标,我已经在各个地方寻找答案,但以下其他问题的修复似乎无法解决我的问题。我正在运行 Visual Studio 2015。其他问题供参考:

如果有人能建议我做错了什么,我将不胜感激。我检查了许多其他帖子以寻找答案,但是如果您可以提供指向我错过的答案的链接,那也很棒。

【问题讨论】:

  • 只是为了迂腐,您的意思是“使用 directive”而不是“使用 statement”。它们是两个完全不同的东西。
  • 正确,更正,非常感谢。
  • “我不相信我缺少汇编参考” -- 计算机不是根据信念运行的。假设命名空间存在于anywhere,您将缺少对声明它的程序集的引用。 “我可以看到它被正确引用” -- 你确定没有找到的命名空间实际上是在你认为应该提供它的程序集中声明的吗?最重要的是,这 is 与 Stack Overflow 上所有其他“未找到命名空间”问题完全相同;它们总是归结为同一件事:通过某种机制未能包含声明命名空间的程序集。
  • 嗨,彼得,感谢您使用松散的措辞,我做了一个修改,希望它更有用。针对您评论的后半部分,有很多关于这种错误的问题,但是我还没有找到一个可以用来解决我的问题的答案,否则我不会暴露通过发布这个问题来批评自己。如果您能指出一个可以为我的特定问题提供解决方案的问题,我将不胜感激。否则,我建议它不是完全重复的。再次感谢。

标签: c# .net visual-studio namespaces


【解决方案1】:

大多数时候我看到这个,原因是一个与命名空间的一部分同名的类。它们位于两个不同的程序集中。

namespace Library.Foo // assembly 1
{
  using Library.Foo.Bar; // error here

  public class Bar
  {
    public void DoIt()
    {
      new Bell(); // and here
    }
  }
}

namespace Library.Foo.Bar // assembly 2
{
    public class Bell
    {
    }
}

这可能是一个真正的皮塔饼。我建议对命名空间中的每个单词进行测试搜索。您正在寻找一个同名的类。

作为一方(对此存在争议),您可以通过移动using inside the namesapce 来避免其中一些冲突。

【讨论】:

  • 好主意,这不是我在任何其他类似问题中找到的解决方法,但恐怕我没有任何与命名空间中的任何单词同名的类.
【解决方案2】:

好的,所以我想出了一个解决方案。

我想我会尝试删除并重新创建引用,简而言之,这很有效。详情:

我在解决方案资源管理器中右键单击 Argus.Web,然后单击 Build Dependencies > Project Dependencies。我尝试取消选择 Argus.Domain.Office.Command,但收到错误“此依赖项已由项目系统添加,无法删除”。我不确定为什么会出现此错误,但我因此尝试右键单击 Argus.Web 中的引用,然后选择“添加引用”。在出现的窗口的“项目”部分中,我能够取消选择 Argus.Domain.Office.Command,所以我这样做了,注释掉了有问题的 using 指令,清理并重建了我的解决方案,添加了参考(右键单击Argus.Web 中的引用,然后选择“添加引用”),一切都会再次起作用。

我猜原来的引用一定是配置错误,但目前我看不出这是怎么发生的。如果我弄清楚这是怎么发生的,我会添加到这篇文章中。

非常感谢所有回复者,所有 cmets 和答案都很有用。

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 2017-05-04
    • 2018-07-15
    • 1970-01-01
    • 2021-08-12
    • 2021-07-27
    • 2012-07-26
    • 2019-03-19
    相关资源
    最近更新 更多