0

我有 Common.dll 由(远远超过)两个 SharePoint 包共享/使用,这些包部署到单个 SharePoint 实例使用的同一个 GAC。共享程序集从产品部署演变为产品部署,它本身并不被视为产品。它本身没有发布。它仅在其他 SharePoint 产品/包的上下文中发展。

通用程序集主要只是高度可重用代码的存储库。它仅由一小部分内部开发人员团队使用。

分支/合并允许各种产品在适合开发人员时采用最新版本的 Common.dll。每个产品的开发工作都安排了承担新版本 Common.dll 的风险。

我的需要是让这些程序集从产品到产品——从 SharePoint 包到 SharePoint 包,独立运行。

但这并没有发生。相反,每次我部署时,Common.dll 都会在 GAC 中被覆盖,这样所有使用它的产品都会收到这个最新版本的 Common.dll 的行为。根据该行为是什么,它可能会破坏一段时间未部署的产品。

我试图阻止这种部署“惊喜!” 可能无需将 Common.dll 视为必须小心避免破坏性更改/等的公共产品。

在将各种 SharePoint 包部署到单个 SharePoint 实例的 GAC 时,您使用什么技术来保留不同版本的通用程序集?

4

2 回答 2

0

我们在通用程序集的 Visual Studio 项目的预构建事件中使用此命令:

if not "$(SolutionName)" == "ABC" if not "$(TargetFileName)" == "$(ProjectName).$(SolutionName).dll" exit 1

当通用程序集被各种产品消耗时,此预构建命令不必更改。当您将“ABC”替换为通用程序集的解决方案文件的名称时,它的内容如下:

如果我们在自己的解决方案中编译通用程序集(这种情况很少见,但确实会发生),则无需考虑 - 编译掉!否则,除非有人根据消费产品的 Visual Studio 解决方案文件名重命名公共程序集,否则生成失败。

为了避免构建失败,我们在将公共程序集分支到消费产品的代码库后重命名它(通过公共程序集项目的属性页)。公共程序集的项目名称在解决方案资源管理器中更改,其默认命名空间在其属性页中也未更改。只有“程序集名称”更改。因此,除了已经做出的特定于产品的更改之外,维护和使用公共代码总是让人感觉很熟悉:无论您正在开发什么产品,解决方案资源管理器和命名空间都保持不变。

重命名会更改通用程序集项目文件中的一行,这会在您合并回主干(和/或稍后,当您主干合并到其他产品时)产生摩擦。

如果公共项目文件进入 ProductB 的代码库,同时仍将其程序集命名为 ProductA,则其预构建命令将阻止在 ProductB 中编译,那里的开发人员可以轻松更改“程序集名称”以允许编译。这种摩擦机会增加的越多,你合并的越多。

每次新的 SharePoint 产品到达 GAC 时,通用程序集都会在 GAC 中获得一个唯一的名称(和实例)。各种产品可以使用、发展和部署通用程序集,而不必担心在部署时突然破坏其他产品/包。

于 2012-04-18T20:47:46.683 回答
0

版本控制和绑定重定向在这里可能会有所帮助。根本问题似乎是 Visual Studio 对强名称缺乏一致的标记化。与其创建一个涉及源代码控制的复杂解决方法,不如创建一个简单的工具来更新给定项目文件中的所有公共程序集引用。这解决了根本问题,而不会产生其他不必要的成本。

于 2012-04-20T06:30:30.917 回答