我已经开始使用一些其他开源项目作为依赖项的开源MVC4项目。我已经分叉了另一个项目,并将根据我的需要对其进行修改。我面临的问题是如何保持这些项目相互依赖,但需要单独维护。然而,git拉动我的项目的人也会得到依赖项目吗?
在这种情况下,您如何组织代码?
答案 0 :(得分:5)
通常我会将nuget用于所有依赖项。当我分叉一个项目时,我会在nuget和symbol source上部署它。通过这种方式,您可以毫无问题地进入依赖关系源。
有关符号源和nuget的更多信息,另请参阅: Creating and Publishing a Symbol Package。 要启用符号源调试,请参阅http://www.symbolsource.org/Public/Home/VisualStudio。
您还必须记得启用Nuget package restore。
使用此解决方案,您无法修改源代码,但至少可以对其进行调试。
答案 1 :(得分:1)
我在概念上使用类似于CMake的东西,但完全在Visual Studio中。属性文件的功能相对未知,可以包含在解决方案中。这允许您创建仅包含依赖项路径的文件,包括可以使用的库并设置相对路径,然后要求人们为您不想/不想包含的其他依赖项设置适当的路径。
通过一些工作,它相当干净,并且通过TeamCity和其他类似工具非常容易自动化(每个构建代理可以设置变量以指示它保持依赖的位置)。
对于小型依赖项和已经调整以使用我的项目的依赖项,我将存档或松散文件保存在存储库中,并使用属性文件来引用它们。其他人有关于在哪里找到它们以及如何编辑路径的说明。
如果您对这种方法感兴趣,我可以进一步了解一下。需要花费一些工作才能弄清楚,因为属性文件没有很好的记录,但工作得非常整齐。
答案 2 :(得分:0)
如果您没有创建循环依赖,以下是一个想法:
向解决方案添加一个名为Class Library
的唯一名称的新ClassLibrary1
项目
在其项目设置的Build
页面中,将Output path
配置为应用程序输出路径
Build Events
页面中,将以下行添加到Post-build event command line
块:
del "$(TargetPath)"
重复步骤1到3,但是给ClassLibrary2
Output path
和ClassLibrary1
设置Project Dependancies
的{{1}},查看ClassLibrary1
将所有其他项目添加为项目参考至ClassLibrary2
,将ClassLibrary2
保留为默认值Copy Local
构建true
一次,所有DLL现在都位于ClassLibrary2
将其添加到ClassLibrary1
的引用中,并将ClassLibrary1
保留为默认值Copy Local
设置应用程序的true
以及所有其他不是循环依赖的项目,请查看Project Dependancies
添加其他项目的引用,从DLL放入ClassLibrary1
将其他项目中所有这些添加的DLL的ClassLibrary1
设置为Copy Local
因此,项目false
是解决方案外部库的中央控件。每次ClassLibrary1
(或只是构建应用程序)时,Rebuild Solution
都会复制最新的DLL添加到其对应用程序输出文件夹的引用,并删除它自己生成的名为ClassLibrary1
的DLL。编译时或运行时的应用程序和依赖项将使用相同版本的DLL,您无需执行额外的部署或检查每个部署。