我在VS 2010中有一个解决方案。
我们在此解决方案中有项目A,B和C.
项目A包括项目B作为参考。当我在项目C中包含项目A作为参考时,除非我也引用它,否则C不理解项目B中的任何内容。对我来说似乎是因为项目A包括项目B而项目C包括A,C应该理解B是什么。难道我做错了什么?在将项目B引用到A中时,我应该设置一个设置吗?
我希望将Project B分开,因为它可以被许多项目用作类设置的基础,因此只能将该代码作为A的一部分。
答案 0 :(得分:0)
我认为约翰是对的,如果你直接使用C中的B中的东西,你需要明确地引用B,并且你应该是合理的。相反,如果你只是通过使用A中内容使用B中的东西来间接使用B中的东西,那么你就不需要额外的引用。一个例外是用户控制项目,如果所有引用都没有被制作,即使只是间接使用,我也看到了设计器/编译器问题。
使用项目作为多个其他项目的基础是个好主意,并且可能希望同时添加到多个解决方案文件中,或者更加健壮,构建和部署为编译库以供参考。通过这种方式,您可以使用版本控制来保持库中的更改可跟踪,并且更容易管理其依赖项中的更改。
答案 1 :(得分:0)
项目C必须使用项目B中定义的类型成员,因此它需要对项目B的引用。为避免这种情况,您需要在功能内完全封装您想要的项目B功能项目A。
作为简化示例,我们假设:
DogWalker
,一个管理狗步行业务的项目RouteCalculator
,是一个寻找不同地方之间最有效路线的项目MyDogWeb
,一个用于狗步行者的ASP.NET网络项目您在MyDogWeb
中有一个页面,可以计算并显示最快的路线来挑选您需要行走的所有狗。它使用DogWalker
和DogWalker
在内部使用RouteCalculator
。如果要显示路径,可能有两个选项:
DogWalker.Routes.GetPickupRoute As RouteCalculator.RouteTable
DogWalker.Routes.MapPickupRoute(writer As HtmlTextWriter)
如果您使用第一个选项,MyDogWeb
将要求引用RouteCalculator
,因为它直接与RouteCalculator.RouteTable
类进行交互。如果您使用第二个选项,MyDogWeb
将不会需要引用RouteCalculator
,因为它永远不会与RouteCalculator
类进行交互。