C#之回到了最初的起点----解决方案、项目、程序集、命名空间
——Percy

  初学者很容易把这些概念搞混淆。先说说项目(Project),通俗的说,一个项目可以就是你开发的一个软件。在.Net下,一个项目可以表现为多种类型,如控制台应用程序,Windows应用程序,类库(Class Library),Web应用程序,Web Service,Windows控件等等。如果经过编译,从扩展名来看,应用程序都会被编译为.exe文件,而其余的会被编译为.dll文件。既然是.exe文件,就表明它是可以被执行的,表现在程序中,这些应用程序都有一个主程序入口点,即方法Main()。而类库,Windows控件等,则没有这个入口点,所以也不能直接执行,而仅提供一些功能,给其他项目调用。

  在Visual Studio.Net中,可以在“File”菜单中,选择“new”一个“Project”,来创建一个新的项目。例如创建控制台应用程序。注意在此时,Visual Studio除了建立了一个控制台项目之外,该项目同时还属于一个解决方案(Solution)。这个解决方案有什么用?如果你只需要开发一个Hello World的项目,解决方案自然毫无用处。但是,一个稍微复杂一点的软件,都需要很多模块来组成,为了体现彼此之间的层次关系,利于程序的复用,往往需要多个项目,每个项目实现不同的功能,最后将这些项目组合起来,就形成了一个完整的解决方案。形象地说,解决方案就是一个容器,在这个容器里,分成好多层,好多格,用来存放不同的项目。一个解决方案与项目是大于等于的关系。建立解决方案后,会建立一个扩展名为.sln的文件。

  在解决方案里添加项目,不能再用“new”的方法,而是要在“File”菜单中,选择“Add Project”。添加的项目,可以是新项目,也可以是已经存在的项目。

  程序集叫Assembly。学术的概念我不想提,通俗的角度来说,一个项目也就是一个程序集。从设计的角度来说,也可以看成是一个完整的模块(Module),或者称为是包(Package)。因此,一个程序集也可以体现为一个dll文件,或者exe文件。怎样划分程序集也是大有文章的,不过初学者暂时不用考虑它。

  命名空间(namespace)是在C++里面就有的概念。引入它,主要是为了避免一个项目中,可能会存在的相同对象名的冲突。这个命名空间的定义,没有特殊的要求。不过基本上来说,为了保证其唯一性,最好是用uri的格式,例如BruceZhang.com。这个命名空间有点像我们姓名中的姓,然后每个对象的名字则是姓名中的名。如果有重复,再国外的命名中,还可以加上middle name。那么名都为勇的,由于姓氏不同也就分开了,或者叫张勇,或者叫赵勇。当然人的姓氏重复者居多,所以我们为命名空间取名时,尽可能的复杂一点。

有许多初学者,常常把一个项目就理解为一个命名空间。其实这两者没有绝对的联系,在项目里我们也可以定义很多不相同的命名空间。但为了用户便于使用,最好在一个项目中,其命名空间最好是一体的层次结构。在Visual Studio里,我们可以在项目中新建一个文件夹,默认情况下,该文件夹下对象的命名空间,应该是“项目的命名空间.文件夹名”。当然,我们也可以在namespace中修改它。

  命名空间和程序集名,都可以在Visual Studio中设置。用鼠标右键单击项目名,然后选择属性,就可以弹出如下对话框:

  在图中,Assembly Name就是程序集名,如果经过编译,则为该项目的文件名。而Default Namespace则为默认的命名空间。在开发软件时,我们要养成良好的习惯,在建立新项目后,就将这些属性设置好。一旦设置好了Default Namespace,则以后新建的对象,其命名空间即为该设定的值。至于程序集名,如果是dll文件,建议其名最好与Default Namespace一致。

版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。

转载于:https://www.cnblogs.com/Percy_Lee/p/4827014.html

C#之回到了最初的起点----解决方案、项目、程序集、命名空间相关推荐

  1. VS同一解决方案的不同项目的命名空间名字唯一

    VS同一解决方案的不同项目的命名空间名字要不一样.譬如开发一个DLL,命名空间是Viewer,为了测试DLL,又建立了一个测试项目,命名空间名字也是Viewer,会触发异常: System.TypeL ...

  2. vc2010解决方案项目编译顺序_科学网—VS2012 (2008,2010) 编译问题解决合集 - 冯博远的博文...

    问题一: VS2012 (包括从VS2008,VS2010) 出现编译错误:LINK : fatal error LNK1104: cannot open file 'LIBC.lib' 的解决办法: ...

  3. visual studio 解决方案项目结构部署和配置

    在实际的企业项目,一个解决方案里面由几个项目组成:产生静态或者动态链接库的项目.测试用例.产生执行文件的项目.当然还有一些开源的第三方库等.此时,我们需要对解决方案作一定的配置,使得解决方案结构清晰. ...

  4. VS中修改解决方案/项目/类的名字

    VS中新建一个项目,如果开发工作都接近尾声,客户来要求更换项目的名称,差不多要变更整个解决方案中项目名称,引用等等,这个工作量还是很大的.上网搜索解决方法,还实验了专门的修改项目名称工具,但是最后都是 ...

  5. 推荐一款基于Vue的开源智慧物业解决方案项目源码

    项目介绍 「e家宜业」是一整套基于AGPL开源协议开源的智慧物业解决方案.实现了微信公众号.小程序.PC.H5.智能硬件多端打通,旨在提升物业公司效率.规范物业服务流程.提升物业服务满意度.加强小区智 ...

  6. 基于道路智慧路灯综合杆的智慧城管系统集成解决方案项目详细解析

    项目需求: 新型智慧城市的建设,其中一部分就是智慧城管系统升级.经济技术开发区升级国家级智慧园区配套建设,配合建设智慧城管平台中智能监控部分. 产品功能: 本项目中的道路智慧路灯产品集智能照明.数字监 ...

  7. ( linker command failed with exit code 1) 错误解决方案 项目使用的是pod

    targets -> build settings -> architectures -> build active architecture only -> debug 改成 ...

  8. 前端物联网的起点 node-red 项目的开启

    最近物联网项目比较火,作为一名前沿的前端人士我时刻关注着潮流,5G时代即将到来,网速不再成为上网的限制.万物互联.即将成真. 在github上收到一个IBM开发的物联网项目,看着不错,何种协议,拖拽操 ...

  9. ECMBoss企业内容解决方案项目系列之(七)我的同事离职了

        尽管说,天下没有不散的宴席,只是没有想到这个宴席会散的这么彻底.项目上的同事几乎都离职了,有的已经离职了,有的在等待着项目的结束.ECMBoss这个项目就好比是IT终结者,它终结了所有的开发同 ...

  10. LeetCode|从王者荣耀的技能施放理解调度算法

    今天是 Kevin 的算法之路的第 74 天.和大家分享<王者荣耀>技能施放的最佳方案,看完之后你将可以完成 LeetCode 的第 621 题<任务调度器> 引 想必被标题 ...

最新文章

  1. .NETCore3.1中的Json互操作最全解读-收藏级
  2. PS教程第十五课:图层是最基本的要求
  3. 第九十二期:多少程序员注意到了「中台」的背面?
  4. php utc时间_PHP转换UNIX时间戳 UTC时间(TZ格式) 标准时间的方法 UNIX UTC GMT时间、本地时间互转...
  5. 摄像头uid怎么获取_每秒30W次的点赞业务,怎么优化?
  6. mysql 插入 point_mysq Point类型 查询和插入操作:insert和select
  7. Bootstrap导航条中组件的排列
  8. 绝对定向 c++_【007】Linux重定向、管道符及环境变量(看这一文就够了)
  9. Hudson安装配置文档
  10. 最简单的的树莓派安装opencv教程(一键安装)
  11. 俞军老师:适合产品经理的10本书 | 2019收藏版
  12. 查找Linux系统中某个软件是否安装/存在
  13. 楼天城楼教主的acm心路历程(作为励志用)
  14. AR5B22网卡折腾记录
  15. govendor使用
  16. antd mobile在微信公众号开发中使用笔记
  17. 【已解决】surface 电池不好充电显示“未连接”,将充电的接口换个方向就解决了
  18. (SEED-Lab) ARP Cache Poisoning Attack Lab
  19. 照片纸特效多画面滚动动画展示PR视频剪辑模板
  20. 『NLP打卡营』实践课5:文本情感分析

热门文章

  1. 定义带参数的C宏,方便输出调试信息
  2. pcb文件转成原理图_电子设计基础教学-PCB板制作之 AD(Altium Designer)的工程建立过程...
  3. redis 正则匹配value_Java-19-Redis
  4. 全国一级计算机基础及ps题目,一级计算机基础及Photoshop应用模拟试题(14)
  5. C++ 常量引用用法
  6. python中url是什么意思_Python中url标签使用详解
  7. vue computed 传参_前端面试时面试官想要听到什么答案(关于一些Vue的问题)
  8. [C++] 关于delete和delete[]
  9. 一文了解数据库索引:哈希、B-Tree 与 LSM
  10. 驻云学院:实战阿里云之数据库系列