【发布时间】:2011-10-16 00:59:40
【问题描述】:
我正在编写一个需要 SQL Server SMO 库的 .NET 工具。我不在乎它是来自 Server 2005 (9.0)、2008 (10.0) 还是 2008 R2(可能是 10.5,没有检查)的版本。 SMO 库与 SQL Server 一起安装,因此我可以放心地假设在任何安装了 SQL Server 的系统上,SMO 库的某些版本也可用。
不幸的是,SMO 库是强命名的:如果我在我的项目中添加对 SMO 9.0 的引用,如果客户系统上只有 SMO 10.0,它将失败 (FileNotFoundException),反之亦然。
有什么方法可以告诉编译器 任何 版本的库都适合我吗? 或者我真的必须分发 3 个相同版本的工具,每个都编译成不同版本的 SMO?
免责声明:我知道 SMO 库(以及 SMO 库所需的库)可以重新分发。但是,(a) 一个 100KB 的独立 EXE 和 (b) 安装一大堆先决条件的完整安装包之间存在很大差异。
免责声明 2:我知道以下重复:
- c# - can you make a “weak” assembly reference to a strong named assembly
- Need a C# Assembly to reference a strongly named assembly loosely
但是,提供的解决方案不适合。在问题 1 中,开发人员可以控制引用的 DLL(我没有);在问题 2 中,开发人员可以控制目标系统(我也没有)。
【问题讨论】:
-
有趣的问题。对这个主题一无所知,对依赖注入几乎一无所知,可以这样实现吗?我的意思是,不同版本的程序集是您打算注入的依赖项?只是一个想法..
-
对不起,我的回答完全错误,具体版本是build-time only setting。
-
@Smudge202 有趣的想法,但有一个绊脚石。 DI 将取决于可以作为注入基础的某种类型(例如接口)。鉴于此的第 3 方性质,该类型将存在于第 3 方库中 - 砰 - 你依赖于第 3 方库的特定版本。
标签: .net reference assemblies strongname