繁体   English   中英

使用控制台应用程序组织第三方库的最佳方法

[英]Best way to organize third party libraries with console applications

我构建了大量的控制台应用程序来运行这里的业务流程。 大多数都具有相同的性质,它们被部署到应用程序服务器,访问源数据库并将分阶段数据放入目标数据库。 一些访问文件共享等。

鉴于该设置,我喜欢一遍又一遍地使用SAME日志包(log4net)。 我在每个app.config中保留配置。 但是,我一直发现我随身携带了“log4net”的DLL。

我的意思是,当我开始一个新项目时,我必须引用log4net。 我选择不将log4net放入GAC或将其完全安装到我的开发机器上。 相反,我将整个下载包放在一个目录中,通常这样做:

我抓住DLL并在我的控制台应用程序项目中创建一个/ lib目录,我引用它。

这个接缝的好处是我总是知道我有正确的版本因为我复制到本地DLL。 我也检查了项目。

但是,缺点是我最终得到了大量项目,每个项目都有一个/ lib目录,通常存在相同的DLL。

我究竟做错了什么? 我只是错过了解决方案/项目开发背后的整个想法吗? 我觉得我的项目是如此完全不同,以至于我不希望所有项目都加载到一个解决方案中。

我很想知道别人如何解决这个问题。

为每个控制台项目创建一个lib文件夹只是为了容纳DLL,除了确保它存在于你的机器本地之外,它不会用于任何真正的目的。 如果您担心组织,那可能会使事情变得更糟,因为现在您的开发计算机和应用服务器上有多个DLL副本,所有这些都是相同的。

当log4net发布更新时会发生什么? 然后,您必须更新log4net,重建和重新部署的每个独立/物理副本和引用。 如果你使用除log4net之外的多个第三方DLL,问题只会变得更糟。

话虽这么说,当您添加第三方引用时,默认情况下,每次编译时它都会将DLL复制到本地DLL到构建文件夹,并且您的控制台程序将使用该本地副本。 您可以通过自己添加一个,并查看引用的Copy Local属性(应该设置为true)来验证这一点。 所以基本上,你已经做了VS已经为你做的额外工作。

我要做的是将所有第三方DLL放在dev机器的中央目录中,只需在每次创建控制台应用程序时添加对这些DLL的引用。 每次部署时,它都会随身携带DLL的本地副本。 如果有新的第三方dll版本,您仍然需要更新每个解决方案中的每个引用,重建并重新部署到您的应用程序到应用程序服务器... 但是 ,区别在于您只更新一个实物复制!

你看过ilmerge吗? 您应该能够将log4net.dll文件化为可执行文件,以使其独立。

示例用法(作为构建后步骤):

"$(SolutionDir)Lib\ilmerge" /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:$(ProjectDir)bin\Merged\MyExe.exe MyExe.exe log4net.net40.dll

暂无
暂无

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

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