【问题标题】:How should I reference assemblies from another solution?我应该如何从另一个解决方案中引用程序集?
【发布时间】:2012-03-05 14:14:13
【问题描述】:

我有两种情况:

  1. 公司有一个框架项目,所有项目我们都将使用这个框架。

  2. 有一个特定于客户的自定义框架项目,只有公司中的某些人需要使用此 DLL。

两个框架都存储在 TFS 上的单独解决方案中。

应该如何将引用用于其他项目?我应该把这两个程序集都放在 GAC 上吗?我应该手动复制输出程序集吗?推荐什么,为什么以及如何使用它?

【问题讨论】:

  • 虽然这对您的情况可能没有价值,但如果您使用的是颠覆,svn:externals 将是解决这种情况的一个相当简单的方法。

标签: c# architecture tfs assemblies


【解决方案1】:

自定义框架

为自定义项目手动复制输出程序集,除非您可以将其源代码直接包含在解决方案中。

共享框架

我会随时使用 nuget 而不是 GAC,因为您摆脱了任何版本控制问题或必须为框架创建单独的安装包(因为您是 GAC)

创建私有 nuget 服务器很容易。只需创建一个新的 MVC3 项目并安装一个 nuget 服务器包:http://docs.nuget.org/docs/creating-packages/hosting-your-own-nuget-feeds

【讨论】:

    【解决方案2】:

    在我看来,这是一个经典的项目参考与二元参考决策。将 GAC 排除在外。

    在类似于您的要求的拓扑中,我们使用如下内容:

    |___$/第三方/ | |__BaseFramework.dll | |__CustomFramework.dll | |__log4net.dll | |__WPFToolkit.dll | |___$/Sources/ProjectName/NormalProject.sln | | | |__[二进制参考]“../../3rdParty/BaseFramework.dll” | |__[项目参考] | |__[项目参考] | |___$/Sources/Common/BaseFramework.sln | | | |__[项目参考] | |__[项目参考] | |__[项目参考] | |__[项目参考] | |___$/Sources/Custom/Acme/AcmeProject.sln | | | |__[二进制参考] "../../../3rd-party/CustomFramework.dll" | |__[项目参考] | |__[项目参考] | |___$/Sources/Custom/CustomFramework.sln | |__[项目参考] |__[项目参考] |__[项目参考] |__[项目参考]

    【讨论】:

      【解决方案3】:

      将引用的程序集添加到其他项目中的库文件夹并手动更新它。 如果经常更新,请考虑使用您自己的 NuGet 提要。

      【讨论】:

        【解决方案4】:

        您应该仅在需要时将程序集安装到全局程序集缓存中来共享程序集。作为一般准则,保持程序集依赖项私有,并将程序集定位在应用程序目录中,除非明确需要共享程序集。此外,无需将程序集安装到全局程序集缓存中以使 COM 互操作或非托管代码可以访问它们

        由于上述原因,我会将第一个框架 ddl 放入 GAC。

        我会将第二个框架放入您的 TFS 下的一个设计文件夹中,该文件夹由实例“库”调用,您将从该文件夹中添加引用(您的所有团队必须具有相同的文件夹结构以避免丢失引用)

        【讨论】:

          【解决方案5】:

          所以 #2 自定义框架项目与 #1 相同,但为特定客户定制?

          将自定义框架源代码作为普通框架源代码的一个分支,而不是将其保留为实际的单独解决方案是否有意义?我想这取决于差异有多大。

          在我看来,将其设为分支的好处是您应该能够更轻松地合并两个分支之间的更改。想象一下,#1 中做了一个 bug 修复或一个新功能,也需要应用到 #2;如果 TFS 知道 #2 只是 #1 的一个分支,TFS 应该能够使这更容易。

          无论如何,为了解决您的问题,我的想法是您的其他项目应该引用这些项目的输出程序集。

          我会将框架程序集复制到您其他项目的解决方案文件夹下的文件夹中。我通常称我的“依赖项”,但这并不重要。让您的项目添加对这些程序集文件的引用。我假设您的自定义框架程序集将与普通框架程序集具有相同的名称,因此您可以根据需要轻松交换这些文件(或创建使用自定义框架的项目的单独分支)。

          我不鼓励将程序集放入 GAC,因为如果您忘记从 GAC 卸载旧版本的程序集,很容易在开发过程中绊倒自己。

          【讨论】:

            猜你喜欢
            • 2023-03-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-15
            相关资源
            最近更新 更多