使用公用/公用程序库
在我为之工作的公司中,我们有一个"实用程序"项目,我们构建的几乎所有应用程序都引用该项目。它有很多东西,例如NullHelpers,ConfigSettingHelpers,Common ExtensionMethods等。
我们的工作方式是,当我们要创建一个新项目时,我们从源代码管理中获取该项目的最新版本,并将其添加到解决方案中,然后从任何添加到该解决方案中的新项目中引用该项目。
这行之有效,但是在某些情况下,人们对通用项目进行了"重大更改",这对他们有用,但对其他人却无效。
我一直在思考,与其将公共库添加为项目参考,不如我们应该开始将公共库开发为独立的dll并发布不同版本并针对特定项目指定特定版本,以便可以进行更改而没有任何风险使用公共库访问其他项目。
说了这么多,我很想看看其他人如何引用或者使用他们的公共库。
解决方案
回答
这正是我们正在做的。我们有一个Utility项目,该项目具有一些非项目专用的有用功能。我们手动(次要)增加版本,在Release版本中构建项目,对其进行签名并将其放置在共享位置。
人们然后使用该库的特定版本。
如果在某些特定的项目中实现了一些有用的方法,这些方法可以进入主Utility项目,则将放到项目中的特殊帮助程序类中,并将它们标记为可能的Utility候选对象(简单// TODO)。在项目结束时,我们会审查候选人,如果他们坚持下去,我们会将其移至主图书馆。
重大更改是禁止的,如果需要,我们将方法和类标记为[已过时]。
但是,这并不重要,因为我们会在每次发布时都会增加版本。
希望这可以帮助。
回答
我遇到了完全相同的问题!
我曾经使用项目引用,但是当我们说很多项目都在引用它时,一切似乎都变得很糟。
现在,我编译为一个DLL,并在首次构建后将DLL引用的CopyLocal属性设置为false(否则,我发现它可以覆盖子项目并且变得一团糟)。
我想从理论上讲应该是GAC编写的,但是如果它的问题发生了很大的变化(就像我的一样),则可能会出现问题。
回答
我们在源代码管理中使用分支;每个人都使用head分支,直到发布为止。当他们分支发行版时,他们还将分支通用实用程序项目。
此外,我们的公用事业项目具有自己的单元测试。这样,其他团队可以知道是否会破坏其他团队的构建。
当然,我们仍然有我们偶尔提到的问题。但是,当一个团队签入可能中断另一团队构建的变更时,通常意味着该方法/对象的合同已在某个地方被打破。我们将这些视为改善公共事业项目设计的机会……或者至少编写更多的单元测试:/