我有一些奇怪的问题。我有一个具有以下结构的解决方案
http://i33.tinypic.com/10fbzbq.jpg
正如您所看到的,当我想要导入VDB.Common.RequestAndResponses时,它会出错。 dat Class Library的名称空间是VDB.Common.RequestAndResponses。
我是c#的新手,所以我可能会忘记一些愚蠢的东西。
答案 0 :(得分:2)
我强烈怀疑Base.cs
(VDB.Common.RequestAndResponses
项目中显示的唯一C#文件)实际未在VDB.Common.RequestAndResponses
命名空间中声明类型 - 或者它只声明内部(而不是 public )类型。
例如,请注意您创建的代码位于VDB.Client.Infrastructure
项目下,但仅在Agatha
命名空间中声明了一个类 - 而不是VDB.Client.Infrastructure.Agatha
,这可能是什么你打算。你可能在Base.cs
中有同样的事情吗?
如果没有看到Base.cs中的代码,我们就看不出有什么问题了。如果你只是发布一个片段 - 只是命名空间和类声明 - 那将是有帮助的。
请注意,尽管类库具有默认命名空间,但这并不是源文件实际声明的任何内容。换句话说,在Acme.Widgets
的库中,如果您声明了:
namespace Web
{
public class Button {}
}
只会声明类型Web.Button
,不是 Acme.Widgets.Web.Button
。
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.cs
和BaseResponse.cs
中。我也很惊讶地看到对Agatha.Common
的引用 - 不应该是VDB.Common.Agatha
或类似的内容吗?
答案 1 :(得分:0)
右键单击解决方案资源管理器中的“VDB.Common.RequestAndResponses”参考,然后选择“在对象浏览器中显示”,确保在那里找到具有确切拼写和大小写的命名空间。
答案 2 :(得分:0)
尝试在客户端代码中使用Base类并将鼠标悬停在它上面,并允许Visual Studio IDE提示您添加适当的命名空间。 Base类中定义的命名空间可能与您的想法不同。
<强> 修改 强> 正如Jon在答案的第二部分中所展示的那样 - 代码文件的名称不会自动对应于命名空间。
答案 3 :(得分: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(); }
}
}