构建一个无需访问引用dll的Visual Studio项目
我有一个项目,它有一组二进制依赖项(我没有源代码的程序集dll)。 在运行时,这些依赖项需要预先安装在机器上,并且在编译时它们在源代码树中是必需的,例如在lib文件夹中。 由于我还为此程序提供了源代码,因此我希望为其启用简单的下载和构建体验。 不幸的是,我不能重新分配dll,这使事情变得复杂,因为VS不会在不访问引用的dll的情况下链接项目。
无论如何,在没有真正参考的dll的情况下,能够建立并链接这个项目吗?
也许这是一种方法来告诉VS链接到一个自动生成的dll的存根,以便它可以重建没有原始? 也许有第三方工具可以做到这一点? 这方面的任何线索或最佳实践?
我意识到这个人必须能够访问dll来运行代码,所以他可以将它们添加到构建过程中是有道理的,但我只是想要拯救他们收集所有dll并将它们放入lib文件夹手动。
也许其中一个想法可以帮助你解决这个问题:
对上面所有的好建议,都表示同意。 话虽如此,也许有一个有效的情况下,通常不需要外部DLL? 所以这就是你所做的。 你包装并隔离它们。 (它的抽象层次比创建接口更高,因此更容易维护)。
在Visual Studio中,如果您不重新编译引用外部DLL的特定VS项目,那么您可以在不使用这些DLL的情况下编译VS解决方案项目的其余部分。 因此,如果以某种方式将外部DLL与自己的DLL一起包装,然后将这些包装仅作为二进制分发,那么共享源代码的人将不需要外部DLL来编译主要解决方案。
注意事项 :1.额外的工作将封装代码分离成独立的项目。 2.其他VS项目必须添加对您的包装DLL的引用,作为“文件系统”对“LIB”文件夹的引用,而不是“项目引用”。 3. VS解决方案配置必须禁用包装DLL的编译。 如果需要,应该添加一个新配置以明确重新编译它们。 4.每个Wrapper DLL的VS Project定义都应该包含一个构建后事件,以将它们复制到预期的“LIB”文件夹位置。 5.在运行时,外部DLL必须存在于应用程序的bin目录或机器的GAC中,否则将被明确加载。 注意:如果它们丢失,只有当它们在运行时实际调用时,它们的缺失才会导致运行时错误。 即如果代码在一般情况下没有发生,则不需要拥有它们。 6.在运行时,您可以捕获加载外部DLL的错误,并向用户显示一条错误消息,说“为了使用此功能,请安装以下产品:xyz”。 这比显示“AssemblyLoadException ...请使用FusionLogViewer ...等更好”。7.在应用程序启动时,您可以测试和检测缺少的DLL,然后禁用依赖于它们的特定函数。
例如:根据这种模式,我可以有一个与Microsoft CRM和SAP集成的应用程序,但只适用于特定功能,即导入/导出。
在设计时,如果开发人员从不想改变包装器,他们将能够在没有这些外部DLL的情况下重新编译。 在运行时,如果用户从不调用这个函数,应用程序将永远不会调用这个包装器,因此不需要外部DLL。
那么保存它们收集所有程序集并将它们放在lib文件夹中的痛苦吧。 然后将它们与源代码一起提交到存储库中。 这样,从存储库中检出代码的人也将获得编译该项目所需的所有内容。
链接地址: http://www.djcxy.com/p/45205.html上一篇: Build a Visual Studio Project without access to referenced dlls
下一篇: Unable to capture standard output of process using Boost.Process