Visual Studio项目组织和参考

时间:2014-05-15 14:09:18

标签: visual-studio-2010 organization

我在VS 2010中有一个解决方案。

我们在此解决方案中有项目A,B和C.

项目A包括项目B作为参考。当我在项目C中包含项目A作为参考时,除非我也引用它,否则C不理解项目B中的任何内容。对我来说似乎是因为项目A包括项目B而项目C包括A,C应该理解B是什么。难道我做错了什么?在将项目B引用到A中时,我应该设置一个设置吗?

我希望将Project B分开,因为它可以被许多项目用作类设置的基础,因此只能将该代码作为A的一部分。

2 个答案:

答案 0 :(得分:0)

我认为约翰是对的,如果你直接使用C中的B中的东西,你需要明确地引用B,并且你应该是合理的。相反,如果你只是通过使用A中内容使用B中的东西来间接使用B中的东西,那么你就不需要额外的引用。一个例外是用户控制项目,如果所有引用都没有被制作,即使只是间接使用,我也看到了设计器/编译器问题。

使用项目作为多个其他项目的基础是个好主意,并且可能希望同时添加到多个解决方案文件中,或者更加健壮,构建和部署为编译库以供参考。通过这种方式,您可以使用版本控制来保持库中的更改可跟踪,并且更容易管理其依赖项中的更改。

答案 1 :(得分:0)

项目C必须使用项目B中定义的类型成员,因此它需要对项目B的引用。为避免这种情况,您需要在功能内完全封装您想要的项目B功能项目A。

作为简化示例,我们假设:

  1. 项目A是DogWalker,一个管理狗步行业务的项目
  2. 项目B是RouteCalculator,是一个寻找不同地方之间最有效路线的项目
  3. 项目C是MyDogWeb,一个用于狗步行者的ASP.NET网络项目
  4. 您在MyDogWeb中有一个页面,可以计算并显示最快的路线来挑选您需要行走的所有狗。它使用DogWalkerDogWalker在内部使用RouteCalculator。如果要显示路径,可能有两个选项:

    1. DogWalker.Routes.GetPickupRoute As RouteCalculator.RouteTable
    2. DogWalker.Routes.MapPickupRoute(writer As HtmlTextWriter)
    3. 如果您使用第一个选项,MyDogWeb要求引用RouteCalculator,因为它直接与RouteCalculator.RouteTable类进行交互。如果您使用第二个选项,MyDogWeb 将不会需要引用RouteCalculator,因为它永远不会与RouteCalculator类进行交互。