如何定位DLL以进行组件间引用

时间:2009-06-25 19:11:30

标签: c# .net dll reference modularity

我的SAAS公司有两个C#.NET产品,称为Application Alpha和Application Beta。它们都引用了一些我们称之为Core的库。

目前,代码库是单片的,存储在一个带有单个.NET解决方案的SVN存储库中,我们正在尝试使其更加模块化/组件化。我们已经拆分为两个应用程序和核心库的单独存储库,但我们现在遇到了以下问题:

Alpha和Beta必须引用Core,但我们试图避免使用直接代码引用,因为我们实际上已经回到原点:您需要检查并共同定位所有存储库。那么我们应该如何引用这些组件之间的程序集?

每个组件都可以有一个目录,其中包含需要引用的其他组件的DLL,存储在SVN中,但这意味着每次更新Core以将新DLL推送到Alpha和Beta时都需要额外的工作。

或者我们可以将DLL存储在SVN的中央位置(和/或GAC中),但这意味着每次更新Core以便为其他所有人提取额外的工作量。

我们忽略了第三种选择吗?

3 个答案:

答案 0 :(得分:0)

我有类似的东西,我有5个应用程序利用我建立的一系列Web控件。控件被编译成一系列用于模块化的DLL,并且使用它们的应用程序位于不同的服务器上。

我所做的是利用VS2008的构建实用程序来执行批处理文件,该文件在发布版本执行时将已编译(更新)的DLL复制到生产服务器。

您可以通过转到构建到DLL(或DLL)中的项目并右键单击该项目并转到“属性”来执行此操作。然后转到BUILD EVENTS选项卡。在那里,您可以看到Pre-Compile命令行和Post-Compile命令行文本框。

因此,您的发布版本可以完全自动化,您永远不必担心生产DLL版本之间的DLL地狱差异。

希望这有帮助, JP

答案 1 :(得分:0)

您可以拥有Alpha的重建脚本,并创建工件(即构建核心),并将核心构建的结果放在引用该位置的特定位置。

答案 2 :(得分:0)

您可以使用SVN:externals。它是为这种情况而设计的。

如果你想避免这种情况,这些可能是你更好的选择。但是,我会避免将文件放在GAC中,除非您的核心项目非常稳定,并且不会经常更改。让DLL本地化提供了更大的灵活性。

  

每个组件都可以有一个目录,其中包含需要引用的其他组件的DLL,存储在SVN中,但这意味着每次更新Core以将新DLL推送到Alpha和Beta时都需要额外的工作。

使用良好的构建系统可以很容易地处理这个问题。这种方法有一些缺点(即:构建系统中可执行的depdesnencies),但有一些优点,包括允许每个依赖项目根据需要有不同的版本等。