[英]Is it slower to reference projects rather than DLLs for open-source projects, in Visual Studio?
[英]How do you organise open-source Visual Studio projects with open-source dependencies?
我已经开始使用一些其他开源项目作为依赖项的开源MVC4项目。 我已经分叉了另一个项目,并将根据我的需要对其进行修改。 我面临的问题是如何保持这些项目相互依赖,但需要单独维护。 然而,git拉动我的项目的人也会得到依赖项目吗?
在这种情况下,您如何组织代码?
通常我会将nuget用于所有依赖项。 当我分叉一个项目时,我会将它部署在nuget和符号源上 。 通过这种方式,您可以毫无问题地进入依赖关系源。
有关符号源和nuget的更多信息,另请参阅: 创建和发布符号包 。 要启用符号源调试,请参阅http://www.symbolsource.org/Public/Home/VisualStudio 。
您还必须记住启用Nuget包还原 。
使用此解决方案,您无法修改源代码,但至少可以调试它。
我在概念上使用类似于CMake的东西,但完全在Visual Studio中。 属性文件的功能相对未知,可以包含在解决方案中。 这允许您创建仅包含依赖项路径的文件,包括可以使用的库并设置相对路径,然后要求人们为您不想/不想包含的其他依赖项设置适当的路径。
通过一些工作,它相当干净,并且通过TeamCity和其他类似工具非常容易自动化(每个构建代理可以设置变量以指示它保持依赖的位置)。
对于小型依赖项和已经调整为与我的项目一起使用的依赖项,我将存档或松散文件保存在存储库中,并使用属性文件来引用它们。 其他人有关于在哪里找到它们以及如何编辑路径的说明。
如果您对这种方法感兴趣,我可以进一步了解一下。 需要花费一些工作才能弄明白,因为属性文件并没有很好地记录在案,但是工作得非常整齐。
如果您没有创建循环依赖项 ,以下是一个想法:
向解决方案添加一个具有唯一名称的新Class Library
项目,例如ClassLibrary1
在其项目设置的Build
页面中,config Output path
到应用程序输出路径
在Build Events
页面中,将以下行添加到Post-build event command line
块:
del "$(TargetPath)"
重复步骤1到3,但给出另一个名称,比如ClassLibrary2
,并将Output path
配置为ClassLibrary1
的源路径
设置ClassLibrary1
Project Dependancies
,检查ClassLibrary2
将所有其他项目添加为ClassLibrary2
项目引用 ,将Copy Local
保留为默认值true
构建ClassLibrary2
一次,所有DLL现在都在ClassLibrary1
的源路径中
将它们添加到ClassLibrary1
引用中,并将Copy Local
保留为默认值true
设置应用程序的Project Dependancies
项和所有其他不导致循环依赖项的项目 ,检查ClassLibrary1
从DLL放在ClassLibrary1
的路径添加其他项目的引用
将其他项目中所有这些添加的DLL的Copy Local
设置为false
因此,项目ClassLibrary1
是解决方案的外部库的中央控件。 每次Rebuild Solution
(或只是构建应用程序)时, ClassLibrary1
复制最新的DLL添加到其对应用程序输出文件夹的引用,并删除它自己生成的名为ClassLibrary1.DLL
的DLL。 编译时或运行时的应用程序和依赖项将使用相同版本的DLL,您无需执行额外的部署或检查每个部署。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.