繁体   English   中英

VS2005配置“后备”DLL

[英]VS2005 Configure “fallback” DLL

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

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

Botton线,我在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

还有其他想法,想法吗?

反射将允许您在运行时动态加载所需的DLL集。 所以你可以检测出什么是可用的并然后加载它。

唯一的缺点是使用Reflection可以使您的工作更加困难和耗时。

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

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

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

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

用户是否选择要安装的数据库版本? (我假设有某种安装过程)。 您可以根据所选的数据库版本替换安装中bin文件夹中的dll文件吗?

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

IE浏览器。 两个类库,一个用于2005,一个用于2008,两个类都包含一组实现一组公共接口的类。 然后,应用程序将向服务容器询问实现其中一个公共接口的对象,并且应用程序配置文件将指示将使用哪个实现。

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

这种方法还可以让你做的不仅仅是使用一组不同的dll。 如果2005年的某些事情需要以与2008年不同的方式完成,那么您可以在类库中实现这些差异,并且应用程序将更加明智。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM