我正在编写一个需要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库所需的库)可以重新分发。但是,一个精简的100KB独立EXE和安装了很多先决条件的完整安装程序之间有很大的区别。
免责声明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中,开发人员对目标系统也有控制权(而我也没有)。