构建时更改引用DLL

问题描述:

我有一个创建自定义SSIS任务的项目。每个版本的SQL Server都需要不同的DTS Dll参考。构建时更改引用DLL

SQL 2008 - 100
的Sql 2012 - 110
的Sql 2014 - 120
....

对于我建立我的应用程序以支持SQL服务器有多种不同版本的代码需要略有不同,因为我不会使用Predecessor directives

我没有想到如何做的是如何改变引用时,我建立不同版本的Dll。

是否可以在构建时更改引用dll?如果是这样如何?

注意:目前我们有一个构建脚本,该脚本复制了一些花哨的字符串替换并更改引用的项目。这确实有用,但我个人觉得它很丑陋。

不知道这是否会工作,但搏一搏:

  • 本地拷贝所有需要的依赖于MS SQL Server的所有版本。在运行时解析版本并加载相应的dll,或者

  • 创建一个构建时间变量,该变量定义了因变量的版本。添加对一个库的引用,例如2008年。手动编辑C#项目文件,并将引用替换为2008年的构建时变量。现在通过更改构建时间变量,您将能够控制使用哪个库。

+0

ohhh这听起来像一个有趣的想法。 – DaImTo

如果代码需要“不同”,那么你可以将你的应用程序链接到所有不同的库。最后,.NET只会在方法需要时(或者有一些字段的类)加载程序集。

+0

这不会工作客户与SQL Server 2008应该不需要有系统上的其他DLL。这些DLL必须在GAC – DaImTo

+0

@DaImTo中感谢“延迟加载”,.NET不会加载dll,除非它们被使用。我甚至在响应中写了它*最后.NET只会在方法需要时加载程序集*。如果你有一个使用不同程序集的'DoSomething2008()'和'DoSomething2012()',那么你不应该有任何问题。 .NET没有执行“预检”来查看是否存在所有可能需要的程序集。 – xanatos