【问题标题】:VS2005 Configure "fallback" DLLVS2005 配置“回退”DLL
【发布时间】:2008-12-30 16:29:20
【问题描述】:

我正在尝试将 SQL2008 支持添加到 .NET 2.0 应用程序。但是,我唯一的限制是一些用户仍然会使用 SQL2005,我不想要求他们安装 SQL2008 客户端组件。

SQL2008 所需的实际 DLL 集与 SQL2005 不同。代码可以保持不变。

底线,我需要在VS2005中的方式(或者手动编辑汇编文件)说:

如果用户有 DLL_1 v2、DLL_2 v2 和 DLL_3 v2,请使用它们。如果没有,请使用 DLL_1 v1 和 DLL_2 v1。


我会考虑使用反射来加载 DLL,听起来这对我来说几乎是唯一的选择,除了需要 SQL 2008 客户端组件。

至于重新分发 DLL,我确实阅读了许可证。那里有几个适用于我们的可疑术语(例如,对于托管软件)。此外,这是一个更加复杂的问题,因为我们的客户数据非常敏感,因此他们需要经过广泛的审批流程才能允许安装任何东西,例如我们包含的 DLL。

感谢您的帮助!


感谢您的想法!但是我们还没有完全到那里......

  1. 不,用户没有选择他们要安装到哪个数据库版本。目的是允许 SQL2005 和/或 SQL2008,即使在同一个安装中。例如,我们有一个管理应用程序,允许用户跨不同的 SQL 服务器管理数据库实例。

  2. 我意识到我们可以添加一个对话框来选择是否需要 SQL2008 支持。但是,这会进一步扩展我们的测试矩阵,这是我们试图避免的。

  3. 我相信我确实需要直接引用 DLL。除了连接和查询之外,我还对数据库做更多的事情。

我需要的 DLL 是:

  • Microsoft.SqlServer.ConnectionInfo
  • Microsoft.SqlServer.Management.Sdk.Sfc
  • Microsoft.SqlServer.Smo
  • Microsoft.SqlServer.SmoExtended
  • Microsoft.SqlServer.SqlEnum

还有其他想法、想法吗?

【问题讨论】:

    标签: .net visual-studio sql-server-2008 dll


    【解决方案1】:

    反射将允许您在运行时动态加载所需的 DLL 集。因此,您可以检测到可用的内容并加载它。

    唯一的缺点是使用反射会使您的工作更加困难和耗时。

    【讨论】:

      【解决方案2】:

      您可以在代码中更改表适配器的连接字符串,那么是否有必要为 SQL2008 编写全新的 dll?

      【讨论】:

        【解决方案3】:

        如果你只是做基本的数据访问,你不应该担心它,本地客户端应该可以正常工作,你可以让框架为你挂钩。如果您指定 SQL 客户端,.Net 将使用它可以得到的任何一个。您在使用 SMO 对象吗?在这种情况下,可能存在一些依赖性问题。

        【讨论】:

          【解决方案4】:

          您根本不必直接引用任何 DLL。如果您使用 System.Data.SqlClient 连接到您的数据库,那么 .Net 将知道如何与它们进行通信。如果您没有使用 System.Data.SqlClient 与您的服务器通信,那么下一个问题就是您能否切换到该命名空间进行数据库通信。

          这可能有点超出您想要做的范围,但您可以创建一个服务层抽象,每个人都连接到服务层,服务层处理路由以及与数据库服务器的通信,而您可以通过 SOAP 或 .Net Remoting 与服务层通信。我已经开始将我的所有应用程序切换到这种方法,因为它允许我将我的业务逻辑和数据库抽象集中在一个受控位置并在本地机器上处理演示文稿。

          【讨论】:

            【解决方案5】:

            用户是否选择了他们要安装到哪个数据库版本? (我假设有某种安装过程)。安装时能根据选择的数据库版本换掉bin文件夹下的dll文件吗?

            【讨论】:

              【解决方案6】:

              您可以使用服务容器并在配置文件中连接依赖项。它可能需要将依赖于任一组程序集的代码分离成单独的类和程序集。

              即。两个类库,一个用于 2005,一个用于 2008,两者都包含一组实现一组通用接口的类。然后,应用程序将只向服务容器请求实现其中一个通用接口的对象,并且应用程序配置文件将指示将使用哪个实现。

              这种配置当然也可以在应用程序启动时在代码中完成。

              这种方法还允许您做更多的事情,而不仅仅是使用一组不同的 dll。如果某些事情需要在 2005 年与 2008 年不同地完成,您可以在您的类库中实现这些差异,而应用程序也不会更明智。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-09-18
                • 1970-01-01
                • 1970-01-01
                • 2019-05-23
                • 2020-06-13
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多