.Net工程详解及项目版本管理
前言
写这篇文章的目地是为了让更多的小伙伴对VS生成的工程有一个清晰的认识。在开发过程中,为了赶进度,并不是每个人都有学习的时间。
但如果上层项目管理人员对这些工程目录不熟悉的话,把VS编译的中间文件也提库到SVN,那么其它同事在提代码时,就会发现有N多文件被修改了,其实有些目录及文件是没必要进行版本控制的。
说说为什么最近会写一些C#客户端的文章(包括WinForm和WPF),我所在公司游戏项目的需求,需要一些小工具和游戏微端,我们是在windows下开发,自然就会想到微软大哥的客户端技术,自然这也是学习的好机会。
软件环境
本文的运行环境
OS:windows 7 x64; IDE: vs2012/vs2015
示例程序:winform或wpf
.Net(C#)工程结构图
Bin目录
Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C#编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。
比如
Obj目录
obj是object的缩写,用于存放编译过程中生成的中间临时文件。其中都有debug和release两个子目录,分别对应调试版本和发行版本,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。是否采用增量编译,可以通过:项目属性—>配置属性—>高级—>增量编译来设置。
注:下面的这些文件同时存在于Debug和Release目录
pdb
pdb(程序数据库)文件保存着调试和项目状态信息,从而可以对程序的调试配置进行增量链接
详细解释
vshost.exe.manifest
什么时候生成?
build vs的解决方案会生成它
功能
这个manifest清单文件文件保存了应用程序配置的元数据,它实际上是一个xml文件。
它用于组织和描述隔离应用程序及并行组件,其内部的信息如:元素用于标识着一个唯一的程序集,和其他信息一起,他们用于COM类、接口及库的绑定和激活,而这些信息,以往都是存储在注册表中的。另外,Manifests也制定了组成程序集的文件及Windows类。
清单内容
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
vshost.exe
描述
宿主进程文件。宿主进程是vs中的一项功能,能提高调试性能,支持部分信任调试并支持设计时表达式计算。
作用
宿主进程创建一个应用程序域并将调试器与应用程序关联起来,通常执行这些任务会导致在开始调试和开始运行应用程序之间有明显的延迟,
而通过在后台创建应用程序域和关联调试器,并在运行应用程序之间保存应用程序域和调试器状态,宿主进程使性能得到提高
部分信任调试及设计时表达式计算(即时窗口),部分信任在安全页中配置
.Net Reflector结构
exe
编译出来的可执行文件
.Net Reflector结构
vshost.exe.config
宿主进程配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
exe.config
应用程序配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
Properties目录
Properties文件夹 定义你程序集的属性 ,如果是控制台工程,那就只有一个 AssemblyInfo.cs 文件,AssemblyInfo.cs 用于保存程序集的信息,如名称,版本等,这些信息一般与项目属性面板中的数据对应,不需要手动编写。
关于程序集欢迎浏览我的另一篇《C# 程序集属性(文件的详细信息)》
如果是Winform和WPF等其它客户端项目,则还会包括以下文件
其它文件
*.cs 类文件。源代码都写在这里,主要就看这里的代码。
*.resx 资源文件,一些资源存放在这里,一般不需要看。
*.csproj C#项目文件,用VS打开这个文件就可以直接打开这个项目,自动生成,不需要看。
*.csproj.user 是一个配置文件,自动生成的,会记录项目生成路径、项目启动程序等信息。也不需要看。
*.Designer.cs 设计文件,自动生成,不需要看。
*.aspx 是网页文件,HTML代码写在这里面。
*.sln
sln全称(Visual Studio Solution 解决方案文件) 它将一个或多个项目的所有元素组织到单个的解决方案中。
通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,将它们组织到解决方案中。
比如是生成Debug模式,还是Release模式,是通用CPU还是专用的等
重命名解决方案或项目
重命名解决方案
在“解决方案资源管理器”中右击解决方案节点,然后从上下文菜单中选择“重命名”。
键入解决方案的新名称。
重命名项目
在“解决方案资源管理器”中右击项目节点,然后从上下文菜单中选择“重命名”。
键入解决方案的新名称。
说明:
重命名项目不会自动重命名包含该项目的文件夹。
重命名解决方案和项目之后,可以手动命名文件夹,并在VS里重新添加项目的引用。
详细参考:https://msdn.microsoft.com/zh-cn/library/3e92t91t(v=vs.90).aspx
版本管理
上面也介绍了各个目录及文件的含义。那么我们在做版本管理时,就会清晰很多啦。
obj目录设置忽略,不需要版本管理
bin目录可以忽略也可以添加,看具体的需求,建议忽略
SVN版本管理
忽略已经版本控制的文件或目录
如果此文件/目录,已经提库了,那么可以采取以下方法:
TortoiseSVN → Unversion and add to ignore list
设置完之后,父目录的属性会改变,把父目录一并提交。
文档
官网文档:https://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/tsvn-howto-unversion.html
更多SVN忽略文件和目录的设置:https://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/tsvn-dug-ignore.html
.Net工程详解及项目版本管理的更多相关文章
- net core 中间件详解及项目实战
net core 中间件详解及项目实战 前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的H ...
- 移动端开发touchstart,touchmove,touchend事件详解和项目
移动端开发touchstart,touchmove,touchend事件详解和项目 最近在做移动端的开发,在一个“服务商管理”页面使用到了触摸事件"touchstart",&quo ...
- Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解
微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的.但是今年这种日子就可能一去不复返了,没法办法啊.前 ...
- 基于python的直播间接口测试实战 详解结合项目
基于python的直播间接口测试详解 一.基本用例内容描述 以设置白名单 /advisor/setUserWhiteList.do接口为例,该方法为POST at first,先要导入一些常用到的模块 ...
- C#工程详解
转:https://www.cnblogs.com/zhaoqingqing/p/5468072.html 前言 写这篇文章的目地是为了让更多的小伙伴对VS生成的工程有一个清晰的认识.在开发过程中,为 ...
- 详解Maven项目利用java service wrapper将Java程序生成Windows服务
在项目的开发中,有时候需要将Java应用程序打包成Windows服务,我们就直接可以通过windows的服务来启动和关闭java程序了. 本博文将通过有两种方法实现该功能,手动创建法和Maven自动打 ...
- ASP.NET Core 中间件详解及项目实战
前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的Hello World,如果你觉得本篇文章 ...
- [转]ASP.NET Core 中间件详解及项目实战
本文转自:http://www.cnblogs.com/savorboard/p/5586229.html 前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际 ...
- cocos2d-x 创建工程详解
我们的编写的第一个程序一般习惯上都命名为HelloWorld,从它开始再学习其他的内容.下面介绍的第一个Cocos2d-x游戏我们也命名为HelloWorld. 创建工程 在Cocos2d-x早期版本 ...
随机推荐
- Android Tips: 打电话和发短信
利用Android打电话非常简单,直接调用Android内在的电话功能就可以了. btnDail.setOnClickListener(new OnClickListener(){ @Override ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q72-Q74)
Question 72 You are designing a SharePoint 2010 application and a Web application. You need to desi ...
- VMware Data Recovery备份恢复vmware虚拟机
VMware Data Recovery 是VMware虚拟机备份工具,可创建虚拟机备份,同时不会中断虚拟机的使用或虚拟机提供的数据和服务.Data Recovery 管理现有备份,并在这些备份过时后 ...
- Java File类总结和FileUtils类
Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...
- C#复习③
C#复习③ 2016年6月16日 11:13 Main Declaration & Statement 声明和语句 1.一个程序包含的声明空间有哪些? Namespace : declarat ...
- 区别和详解:jQuery中的 $().each()和$.each()/jQuery.each()
1.认识 $().each()遍历当前jQuery对象,并在每一个元素上执行回调函数.其方法内部是通过调用静态方法jQuery.each()来实现的. jQuery.each()是一个通用的遍 ...
- JAVA 8 默认方法-Default Methods
什么是默认方法-Default Methods 简单的说,就是可以在接口中定义一个已实现方法,且该接口的实现类不需要实现该方法: 如下示例: interface GreetingService { v ...
- JavaScript Patterns 5.4 Module Pattern
MYAPP.namespace('MYAPP.utilities.array'); MYAPP.utilities.array = (function () { // dependencies var ...
- Linux下Nagios的安装与配置[转]
一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...
- 如何在centos上安装epel源
一.EPEL是什么? EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/Cent ...