zoukankan      html  css  js  c++  java
  • 大型.NET项目的目录、编译和版本管理实践 二

    代码项目文件规划

    这里特别使用“代码项目文件”规划,我怕大家误解成在讲大型项目的项目规划,这里讲的是代码项目文件的规划,例如你使用C#开发,就是指那个*.csproj文件。

    项目的输出

    首选,你需要保证project输出到此产品单元的bin目录下,而不是默认的bin\debug这样的目录。打开项目的属性,下图是C#项目的设置:

    image20

    1、选择“Build 生成”;

    2、选择“All Configurations 所有配置”,保证Debug和Release都使用此配置;

    3、选择“Output path 输出路径”,指向产品单元的bin目录。

    4、如果你还有xml帮助输出,可以选择“XML documentation file XML文档文件”,也指向产品单元的bin目录对应的文件名。

    Virtual Basic大同小异,我这里仅给出一幅图,注意Basic不需要专门设置XML文档文件名。

    image23

    这些设置我强烈不建议手工操作,项目居多时,费时费力又容易有疏漏,建议开发小工具自动完成。

    引用组件

    毫无疑问,项目都应该引用bin目录下的dll,那么还有哪些注意的事项呢。下图演示了在一个C#项目中,一个引用的属性(他通过在项目引用上点击右键,选择属性获得)。

    image2

    这里我将“复制本地”设置为false,因为我们从此目录引用文件,然后又复制到这个目录,是没有必要的。

    我还喜欢把“特定版本”设置为false,这样只是为了方便,虽然不严谨,但很实用。

    如果是引用产品单元内部的组件,是引用dll还是引用项目文件?

    应该引用DLL,而不是项目文件。

    我们知道,如果引用项目文件的话,好处是Visual Studio会自动分析项目的引用关系,并决定编译的先后顺序,这是一个非常好的功能。但请注意,我们这里讲的是大型.net项目,他们动辄几百个项目,如果放在一个解决方案中,显然太大了。我们总是仅加载几个我们需要的项目来调试,而这个时候Visual Studio就会在你的项目引用图标上显示一个感叹号,告诉你他找不到这个项目。虽然实践证明,VS仍然可以正常编译,但由于没有加载被引用的项目,所以VS也就不能自动调整编译顺序了。另外一个已知的问题是,如果你在解决方案中删除一个项目,那么在其他项目引用了他,VS会自作聪明的将引用删除掉。所以引用项目形同虚设。

    回到引用DLL,首先引用DLL的行为变得一致。关键是在自定义的解决方案文件中,我们可以随时删除一个项目,或增加一个项目,VS不会自作聪明的删除引用了。那么如何定义编译的顺序呢?总不能程序员每次自己维护吧,当然不是,这就不得不使用文章开头提到的“项目工具”了,你必须使用此工具添加和删除项目,他会自动设置项目的编译顺序。

    下图演示了“项目工具”中,引用功能的样子。

    image11

    此工具的工作原理是,他事先分析此产品单元的所有引用,这样就知道先后顺序,当你在VS中添加个别项目时,他设置项目的依赖性达到此功能。还是那句话,你需要一个工具而不是手工操作。

    解决方案文件

    程序员在调试时,是自己建立一个解决方案文件,当他需要调试某个项目时,把他加入进来,如果调试完毕,从解决方案中移除即可。这样做显而易见的好处是内存消耗更小,编译和运行更加的快速。

    此解决方案并不需要上传到TFS服务器上,那如果要编译所有的解决方案该怎么办呢?通常,我们的“项目工具”,提供一个功能,扫描产品单元的源代码目录,将所有的项目集合到一个解决方案中,分析依赖关系,最后自动创建一个all.sln文件,我们就是编译这个项目文件,TFS也是编译这个解决方案。

    在VS中,新增一个Project也是通过这个工具完成的,而不是使用VS自带的新增项目功能,他主要是完成以下功能:

    • 自动设置项目的输出等信息;
    • 包含产品统一的版权申明,版本等信息;
    • 签出all.sln文件,并加入这个项目到解决方案;

    这个工具的界面看起来这个样子的,这仅是一个示例,你可以为了易用性,增加诸如搜索这样的功能。

    image8

  • 相关阅读:
    题解-CF617E XOR and Favorite Number
    题解-P3174 [HAOI2009]毛毛虫
    数论相关
    力扣 403 青蛙过河 搜索 || 动态规划
    【转载】剑指Offer 26 树的子结构
    三元组 蓝桥杯
    剑指 Offer 14- I. 剪绳子
    【转载】剑指 Offer 43. 1~n整数中1出现的次数
    n个节点的二叉树有几种情况
    1044. 最长重复子串 二分 + Rabin-Karp | | 后缀数组
  • 原文地址:https://www.cnblogs.com/tansm/p/DotProjectPractice_2.html
Copyright © 2011-2022 走看看