2015-11-20 85 views
0

我有一個包含大約14個項目的解決方案,並且遇到了一個我嘗試在兩個項目:命名空間在使用語句中未被識別。 「類型或命名空間'#'不存在於命名空間'#'中您是否缺少程序集引用?

  • Argus.Web(Web應用程序項目)
  • Argus.Domain.Office.Command(一個項目,在本地SQL Server數據庫從API和存儲數據讀取數據)
  • (還有一個名爲Argus.Domain的項目,我提到它可能是問題的一部分,雖然它在我的代碼中沒有在其他類似的地方引起問題。)

Argus.Domain.Office.Command有一個上下文(argusOfficeContext)將其鏈接到我想從Argus.Web訪問的數據庫。 (在其他情況下,此上下文運行良好。)當我嘗試添加using指令以引用Argus.Web中的類中的上下文名稱空間時,我在標題中看到錯誤。

這裏是我的腳手架了(在Argus.Web)發生錯誤的類:在使用中出現

using Argus.Domain.Office.Command.Models; 

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

紅色的波浪線只在「辦公室」,並完全錯誤的是「命名空間'Argus.Domain'中不存在類型或命名空間'Office'。您是否缺少程序集引用?」。

我已檢查Argus.Domain.Office.Command項目是從Argus.Web引用的,當我檢查Argus.Web構建依賴項時,我看到了Argus.Domain.Office.Command(以及其他項目Argus。域),它被設置爲在Argus.Web之前構建。當我檢入Argus.Web References>項目項目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的其他問題以供參考:

如果任何人都可以建議我在做什麼錯了,我真的很感激它。我檢查了很多其他帖子尋找答案,但如果你能提供一個答案的鏈接,我錯過了,這也將是偉大的。

+2

只是爲了迂腐,你的意思是「使用*指令*」而不是「使用*語句*」。他們是兩個完全不同的東西。 –

+0

現貨,糾正,非常感謝。 – Shewan

+0

_「我不相信我錯過了一個程序集參考」__電腦不會信仰。假設名稱空間存在_anywhere_,則缺少對它聲明的程序集的引用。 _「我可以看到它被正確地引用了」_ - 你確定沒有找到名稱空間實際上是在你認爲應該提供的程序集中聲明的嗎?底線,這_is_完全是堆棧溢出的所有其他「命名空間未找到」問題的副本;它們總是歸結爲同一件事情:通過某種機制,失敗包含聲明名稱空間的程序集。 –

回答

0

OK,所以我想出了一個解決方案。

我想我會嘗試刪除並重新創建引用,概括地說,這個工作。詳細信息:

我右點擊在Solution Explorer Argus.Web,然後編譯依賴>項目依賴。我試圖取消選擇Argus.Domain.Office.Command,但得到了錯誤'這個依賴項是由項目系統添加的,無法刪除'。我不知道爲什麼會出現這個錯誤,但我因此試着右鍵單擊Argus.Web中的引用,然後選擇「添加引用」。在出現的窗口的Projects部分,我可以取消選擇Argus.Domain.Office.Command,所以我做了這個,註釋了有問題的使用指令,清理並重建了我的解決方案,添加了引用(右鍵單擊在Argus.Web中引用,並選擇「添加引用」),並且它都可以再次運行。

我想,原來引用必須被錯誤配置,但是目前我看不出這是如何發生的。如果我弄明白這是怎麼發生的,我會補充到這篇文章。

非常感謝所有respondees,所有的意見和答案是有用的。

0

大多數情況下,我看到這個,原因是與名稱空間的一部分具有相同的名稱。這些是在兩個不同的程序集中。

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避免一些衝突。

+0

好想法,這不是我在其他類似問題中找到的解決方法,但恐怕我沒有任何與名稱空間中的任何單詞具有相同名稱的類。 – Shewan

相關問題