在c#中添加对项目的引用

时间:2010-08-22 20:11:37

标签: c# reference

我有一些奇怪的问题。我有一个具有以下结构的解决方案

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

正如您所看到的,当我想要导入VDB.Common.RequestAndResponses时,它会出错。 dat Class Library的名称空间是VDB.Common.RequestAndResponses。

我是c#的新手,所以我可能会忘记一些愚蠢的东西。

4 个答案:

答案 0 :(得分:2)

我强烈怀疑Base.csVDB.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

编辑: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 :(得分: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(); }
    }

}