2010-08-22 61 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