代码之家  ›  专栏  ›  技术社区  ›  smartcaveman

两个VS2008 C类库项目是否可以共享一个名称空间?

  •  0
  • smartcaveman  · 技术社区  · 15 年前

    我试图在一个解决方案中共享两个项目之间的公共命名空间。这些项目是“蓝图”和“仓库”。蓝图包含整个应用程序的接口,并作为应用程序结构的参考。

    在Blueprint项目中,我有一个与以下声明的接口:

    namespace Application.Repositories{
        public interface IRepository{
            IEntity Get(Guid id);
        }
    }
    

    在“存储库”项目中,我有一个类,它是以下类:

    namespace Application.Repositories{
        public class STDRepository: IRepository
        {
            STD Get(Guid id){
                 return new SkankyExGirlfriendDataContext()
                               .FirstOrDefault<STD>(x=>x.DiseaseId == id);
            }
        }
    }
    

    但是,这不起作用。存储库项目引用了蓝图项目。我收到一个vs错误:“找不到类型或命名空间名称'IRepository'(是否缺少using指令或程序集引用?)-通常,这很容易修复,但是添加using语句是没有意义的,因为它们具有相同的名称空间。我还是试过了,但没用。引用已添加,如果没有引用该接口的代码行,两个项目都将成功编译。我在这里迷路了。我搜遍了所有地方,没有发现任何东西,所以我假设我所做的事情有根本性的错误…但我不知道是什么。所以,对于如何解决这个问题,我会有一些解释或指导。希望你们能帮忙。

    注意:我之所以要这样做并将接口保持在同一名称空间下,是因为我希望一个实体项目将所有接口保持在其中,以便为应用程序的完整体系结构提供参考。我已经考虑了一些解决方法,例如将所有接口放在blueprint.application命名空间中,而不是应用程序命名空间中。但是,这需要我在应用程序的几乎每一页上编写using语句……我的手指会感到疲劳。再次感谢各位…

    3 回复  |  直到 15 年前
        1
  •  1
  •   SLaks    15 年前

    这是可能的。

    例如,mscorlib.dll和system.dll是两个不同的C项目,它们都定义了 System 命名空间。(除其他)

    如果 Repositories 项目没有引用 Blueprint .

        2
  •  1
  •   smartcaveman    15 年前

    好吧-所以,我把Slaks标为对的,因为他的回答是正确的,很可能是将来任何人看到这个问题的解决方案。我的问题与解决方案中的其他6个项目文件有关。我卸载了它们,只使用两个已发布的实例重新构建了解决方案,突然我的IntelliSense开始工作。尽管这两个项目没有错误,但其他项目中的错误在编译过程中也造成了一些问题。该死。。。谢谢大家。

        3
  •  0
  •   Jouke van der Maas    15 年前

    对于您试图归档的内容,您还可以尝试将所有内容放入一个程序集中,并将所有类声明为 internal 而不是 public . 这样,使用它的程序将只看到接口。您必须创建一组工厂类,这些类根据某些参数创建特定接口的实例。这是真正的方法,因为小程序集会导致大量开销。见 Microsoft Performance Guidelines .