2010-08-22 60 views
0

我有一些奇怪的問題。我有以下結構在c中添加項目引用#

http://i33.tinypic.com/10fbzbq.jpg

的解決方案正如你可以看到,當我wonna導入它給出了一個錯誤的VDB.Common.RequestAndResponses。 dat類庫的命名空間是VDB.Common.RequestAndResponses。

我是新來的c#,所以它可能是我忘了一些愚蠢的東西。

+0

你的文件沒有保存,你認爲這可能是問題嗎? – 2010-08-22 20:14:48

回答

2

我強烈懷疑Base.cs(在VDB.Common.RequestAndResponses項目顯示的只有C#文件)不實際上VDB.Common.RequestAndResponses命名空間聲明類型 - 或者說,它只是聲明瞭一個內部(而不是公共)類型。例如,請注意您要創建的代碼位於VDB.Client.Infrastructure項目下,但僅在Agatha名稱空間中聲明類 - 不是VDB.Client.Infrastructure.Agatha,這可能是您的意圖。也許你在Base.cs中有類似的東西嗎?

沒有看到Base.cs中的代碼,我們看不到有什麼問題。如果你只是發佈一個片段 - 只是名稱空間和類聲明 - 這將是有益的。

請注意,雖然類庫具有默認名稱空間,但不會將其作爲源文件實際聲明的任何內容的前綴。換句話說,在Acme.Widgets圖書館,如果你有一個聲明:

namespace Web 
{ 
    public class Button {} 
} 

,只會聲明的類型Web.ButtonAcme.Widgets.Web.Button

編輯:OP的「答案」證實了我的想法...基本上它根本沒有聲明一個名稱空間。它應該是這樣的:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Agatha.Common; 

namespace VDB.Common.RequestAndResponses 
{ 
    public abstract class BaseRequest :Request 
    { 
     // Code 
    } 

    public abstract class BaseResponse : Response 
    { 
     // Code 
    } 
} 

我也要強烈提醒,這些類應放在兩個單獨的文件,BaseRequest.csBaseResponse.cs。我也很驚訝地看到Agatha.Common的參考 - 不應該是VDB.Common.Agatha或類似的東西?

+1

+1從問題 – 2010-08-22 20:22:56

0

右鍵單擊解決方案資源管理器中的「VDB.Common.RequestAndResponses」引用,然後選擇「在對象瀏覽器中顯示」,確保在其中找到具有精確拼寫和大小寫的名稱空間。

0

嘗試在客戶端代碼中使用Base類並將其懸停在其上,並允許Visual Studio IDE提示您添加適當的名稱空間。 Base類中定義的名稱空間可能與您的想法不同。

編輯 作爲喬恩爲證明他的回答的第二部分 - 代碼文件的名稱不會自動對應的命名空間。

0

Base.cs文件看起來像這樣。

using System; 

    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using Agatha.Common; 

    public abstract class BaseRequest :Request 
     { 
     public string UserName { get; set; } 
     public string UserDomainName { get; set; } 

     public string ClientLanguageCode { get; set; } 
     public DateTime ClientCreated { get; set; } 
     public DateTime ClientSent { get; set; } 
     public DateTime ServerReceived { get; set; } 
     public DateTime ServerProcessed { get; set; } 

     public void BeforeSend(IUserContext context) 
     { 
      ClientSent = DateTime.UtcNow; 
      UserName = context.UserName; 
      UserDomainName = context.UserDomainName; 
      ClientLanguageCode = context.LanguageCode; 
     } 
    } 

public abstract class BaseResponse : Response 
{ 
    public DateTime ServerCreated { get; set; } 
    public DateTime ServerProcessed { get; set; } 

    public string[] ValidationErrors { get; set; } 

    public bool IsValid 
    { 
     get { return Exception == null & !ValidationErrors.Any(); } 
    } 

} 
+0

@SvenVdb推斷出的答案非常好:這應該是對問題的修改,但它基本上證實了我的想法。這沒有聲明一個命名空間,所以它在「根」命名空間中。你應該在整個事情上有「命名空間VDB.Common.RequestAndResponses」。 – 2010-08-22 21:05:18