转:https://www.cnblogs.com/zhaoqingqing/p/5468072.html

前言

写这篇文章的目地是为了让更多的小伙伴对VS生成的工程有一个清晰的认识。在开发过程中,为了赶进度,并不是每个人都有学习的时间。

但如果上层项目管理人员对这些工程目录不熟悉的话,把VS编译的中间文件也提库到SVN,那么其它同事在提代码时,就会发现有N多文件被修改了,其实有些目录及文件是没必要进行版本控制的。

说说为什么最近会写一些C#客户端的文章(包括WinFormWPF),我所在公司游戏项目的需求,需要一些小工具和游戏微端,我们是在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(程序数据库)文件保存着调试和项目状态信息,从而可以对程序的调试配置进行增量链接

详细解释

PDB文件:每个开发人员都必须知道的

PDB是什么文件?PDB文件怎么打开?

.NET 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

C#工程详解的更多相关文章

  1. Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的.但是今年这种日子就可能一去不复返了,没法办法啊.前 ...

  2. .Net工程详解及项目版本管理

    前言 写这篇文章的目地是为了让更多的小伙伴对VS生成的工程有一个清晰的认识.在开发过程中,为了赶进度,并不是每个人都有学习的时间. 但如果上层项目管理人员对这些工程目录不熟悉的话,把VS编译的中间文件 ...

  3. cocos2d-x 创建工程详解

    我们的编写的第一个程序一般习惯上都命名为HelloWorld,从它开始再学习其他的内容.下面介绍的第一个Cocos2d-x游戏我们也命名为HelloWorld. 创建工程 在Cocos2d-x早期版本 ...

  4. Intellij IDEA 将工程转换成maven工程 详解

    1> 右键工程,点击 Add Framework Support   2> 选中 Maven,再点击 OK   3> 工程根目录自动生成 pom.xml 文件,这样 工程就支持 Ma ...

  5. 转:Eclipse中创建Maven版的Web工程(详解)

    一.搭建步骤 ♦首先创建一个Maven的Project,如下图: ♦点击Next,勾选 Create a simple project ♦点击Next,注意Packing要选择war,因为我们创建的是 ...

  6. Web自动化框架LazyUI使用手册(5)--模板工程:LazyUI-template详解

    概述: LazyUI-template: 提供Maven管理的,基于Spring+Testng的,包含常用浏览器driver的,方便连接各种数据库的java模板工程,并提供以百度搜索为例的第一个测试用 ...

  7. Eclipse和MyEclipse工程描述符.classpath和.project和.mymetadata详解aaaaaa(转)

    Eclipse和MyEclipse工程描述符.classpath和.project和.mymetadata详解(转) (2012-03-28 15:06:54) 转载▼ 标签: .mymetadata ...

  8. QuartusII13.0使用教程详解(一个完整的工程建立)

    好久都没有发布自己的博客了,因为最近学校有比赛,从参加到现在都是一脸懵逼,幸亏有bingo大神的教程,让我慢慢走上了VIP之旅,bingo大神的无私奉献精神值得我们每一个业界人士学习,向bingo致敬 ...

  9. Maven 工程 POM.XML文件最全详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

随机推荐

  1. hmm前后向算法

    跟医生就医推导过程是一样的 隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM ...

  2. apparmor 引起自定义mysql 日志问题

    今天手贱,看到mysql 的日志在/var/log/mysql下面.总是觉得别扭,于是就想改变日志的位置, 本人开发环境 vagrant  + ubuntu12.04 ,在/etc/mysql/mys ...

  3. 虚拟机窗口太小_安装VMware Tools(winxp)

    1.新安装完系统后窗口较小 2.在虚拟机->安装VMware Tools 3.如果像上图一样,“安装VMware Tools”是灰色的,那么在虚拟机设置中再添加一个CD/DVD驱动器 4.然后进 ...

  4. 【解决】win10 启用系统保护 灰色 不可选 的解决办法

    安装Win10后,发现系统保护无法启用.'启用系统保护' 灰色 不可选状态: 搜了一堆解决办法,包括: 1.组策略修改 2.服务启用 3.各种重启 等,不适用. 然后,我把系统预留分区 删了,删了…… ...

  5. iOS入门怎样选择Swift和objective-c

    版权声明:本文为博主原创文章,未经博主同意不得转载.博主微信:lofocus https://blog.csdn.net/cuibo1123/article/details/28261795 学oc吧 ...

  6. MySQL · 功能分析 · 5.6 并行复制实现分析

    背景 我们知道MySQL的主备同步是通过binlog在备库重放进行的,IO线程把主库binlog拉过去存入relaylog,然后SQL线程重放 relaylog 中的event,然而这种模式有一个问题 ...

  7. 2017php经典面试题

    1.PHP语言的一大优势是跨平台,什么是跨平台?一.PHP基础: PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows.Linux等)上配置,不 ...

  8. SQLAlchemy技术文档(中文版)(全)

    原文链接:http://www.cnblogs.com/iwangzc/p/4112078.html(感谢作者的分享) sqlalchemy 官方文档:http://docs.sqlalchemy.o ...

  9. HTML输入框的默认显示内容

    在某些情况下我们会需要在输入框里默认显示一些内容,比如在登录的时候不在输入框前面显示用户名和密码,直接在输入框里显示,这时只要在input的标签里添加属性  placeholder="用户名 ...

  10. LNMPA架构剖析

    LAMP或LNMP的劣势: Nginx是小巧而高效的Linux下Web服务器,跟Apache相比,它消耗资源更少,支持的并发连接更多,反向代理功能效率高.静态文件处理更快等等,Nginx可以承受3万以 ...