在.NET开发中,我们经常会在bin目录下面看到这些类型的文件:

.pdb、.xsd、.vshost.exe、.exe、.exe.config、.vshost.exe.config

项目发布的时候,往往搞不清楚哪些是需要的,那些是不需要的。那么这些格式的文件到底是干什么用的呢?

pdb

.pdb文件,是VS生成的用于调试的符号文件(program database),保存着调试的信息。在VS的工程属性,C/C++,调试信息格式,设置/Zi,那么VS就会在构建项目时创建PDB文件。

在这里要区分两种情况:

1、构建静态库时,可以在工程属性 –> C/C++ –> 输出文件 –> 程序数据库名 设置生成的pdb文件名称,如果不指定,默认是生成为VCx0.pdb,这里x是VS版本号,例如用VS2005,就会生成VC80.pdb。这里就会产 生一个疑问,编译静态库时默认生成的.pdb文件名字都一样,那引用这个静态库的项目最后能找到正确的.pdb文件吗?答案是肯定的,因为VS会在生成的 文件中嵌入 .pdb 文件的路径。

举个例子,在Project/ToolA下,构建了一个静态库ToolA.lib,对应生成一个vc80.pdb,同样在在Project /ToolB下,构建了一个静态库ToolB.lib,对应生成一个vc80.pdb。然后最终的工程Work.exe同时链接了这两个静态库.这时,生 成Work.pdb的时候,就会在ToolA.lib中找到它对应的符号文件路径Project/ToolA/vc80.pdb,以及ToolB.lib 对应的符号文件路径Project/ToolB/vc80.pdb,合并生成最终工程的Work.pdb。

2、构建可执行文件或动态库,这种情况下,编译器会生成一个.pdb文件,链接器会生成一个.pdb文件,编译器生成的pdb文件可以在在工程属 性 –> C/C++ –> 输出文件 –> 程序数据库名 设置,链接器生成的.pdb文件可以在工程属性 –> 链接器 –> 调试 –> 生成调试信息(设置Yes),生成程序数据库名设 置。

这两个pdb文件有什么不一样呢?编译器生成的pdb文件,默认也是用vcx0命名,是编译器在编译过程中,把每个.obj文件对应的符号信息存储在其中的,但不包括函数定义。而链接器生成的.pdb文件,默认使用工程名命名,是链接器在链接工程时,根据编译器生成的vcx0.pdb再进一步加工出 来的,具有完整信息的符号文件。就像链接器根据各个.obj文件生成exe或dll一样,编译器生成的.pdb文件是编译-链接过程的中间产物,最后用于 调试程序的是链接器生成的ProjectName.pdb.

上面说的是pdb文件生成规则。在使用的时候,调时期会取到文件对应的pdb文件路径,然后去那个路径(绝对路径)下找,如果这个exe或者dll 是自己编的,那无论它放在哪里,pdb文件只要不动,调试器都能找到它。如果调试器在那个路径下找不到,就会到exe或者dll的同级目录找。例如这个工 程是别人编出来的,连同符号文件一起发过来,我们只要把符号文件与exe或者dll放在同级目录,调试器也能找到它。当然,在调试器中也可以自己指定符号 文件路径

XSD

XSD是指XML结构定义 ( XML Schemas Definition )
XML Schema 是DTD的替代品。XML Schema语言也就是XSD。
XML
Schema描述了XML文档的结构。可以用一个指定的XML
Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML
Schema指定一个XML文档所允许的结构和内容,并可据此检查一个XML文档是否是有效的。XML
Schema本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。
一个XML Schema会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值。
XSD是DTD替代者的原因,一是据将来的条件可扩展,二是比DTD丰富和有用,三是用XML书写,四是支持数据类型,五是支持命名空间。
XSD文件的后缀名为.xsd。
XML Schema的优点:
1) XML Schema基于XML,没有专门的语法
2) XML可以象其他XML文件一样解析和处理
3) XML Schema支持一系列的数据类型(int、float、Boolean、date等)
4) XML Schema提供可扩充的数据模型。
5) XML Schema支持综合命名空间
6) XML Schema支持属性组。

.vshost.exe和.exe

.vshost.exe顾名思义,是visual studio宿主应用程序,vs运行调试时是打开的其实是这个文件,这个程序可以让vs跟踪调试信息。宿主进程是 Visual Studio 2005/2008/2010/201x 中的一项功能,能提高调试性能,支持部分信任调试并支持设计时表达式计算。
宿主进程文件的文件名中包含 vshost,并位于项目的输出文件夹中。而exe则可以直接打开,vs不会跟踪任何这个文件的运行情况。只要引用的程序集完整,可直接运行。

.exe.config和.vshost.exe.config的差异

.exe.config是非调试下的配置文件。
vshost.exe.config是个临时文件,在debug时候生成的调试的时候用的。

文件夹中vshost.exe.config文件的内容和.exe.config是完全一样的,主要用于宿主进程调试,不应通过应用程序直接运行或部署。

.net开发过程中Bin目录下面几种文件格式的解释的更多相关文章

  1. net开发过程中Bin目录net开发过程中Bin目录下面几种文件

    .net开发过程中Bin目录下面几种文件格式的解释 在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb..xsd..vshost.exe..exe..exe.config..v ...

  2. jdk1.6中bin目录下的工具及其作用

    jdk的javaw.javac等的介绍java:在msdos终端窗口中执行.class文件,即解释执行.class文件.通常所说的jvm解释权.javaw:在java自己的窗口中执行.class文件而 ...

  3. asp.net中bin目录下的 dll.refresh文件

    首先找到了这篇文章http://www.cnblogs.com/haokaibo/archive/2010/07/31/1789342.html 然后找到一篇英文的文章http://monsur.xa ...

  4. C#项目中的bin目录和obj目录的区别

    C#项目中的bin目录和obj目录的区别 1.关于bin目录和obj目录 Bin目录用来保存项目生成后程序集,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Re ...

  5. Java 添加Word目录的2种方法

    目录是一种能够快速.有效地帮助读者了解文档或书籍主要内容的方式.在Word中,插入目录首先需要设置相应段落的大纲级别,根据大纲级别来生成目录表.本文中生成目录分2种情况来进行: 1.文档没有设置大纲级 ...

  6. vs2012中程序集生成无法自动在网站Bin目录下生成Dll文件?(已解决!)

    最近,突然发现生成程序集后,网站bin目录下dll没有更新,也没有自动生成dll文件,通过近半个小时的摸索和实验,找到了解决方法: 1.右键网站,不是项目,选择[属性页],在左侧[引用]中如果没有,就 ...

  7. C#中得到程序当前工作目录和执行目录的五种方法

    string str="";str += "\r\n" + System.Diagnostics.Process.GetCurrentProcess().Mai ...

  8. java中jre\bin目录和jdk\bin目录下的工具功能介绍

    转自:https://blog.csdn.net/eclipse_yin/article/details/51051096 jre/bin目录下面工具说明 javac:Java编译器,将Java源代码 ...

  9. SVN安装后bin中没有svn.exe,TortoiseSVN安装后bin目录中没有svn.exe;

    TortoiseSVN的bin目录中没有svn.exe 为什么没有,是因为安装TortoiseSVN的时候没有勾选指定安装项:找到svn的安装包,不用卸载旧的直接安装: 1.选择Modify 2.注意 ...

随机推荐

  1. .NET 基础 一步步 一幕幕 [.NET 系列预热]

    .NET 系列预热 .NET : 一般指.Net Framework框架.一种平台,一种技术. .NET 下的编程语言有C#,F#,VB:在这里我们主要讲述的C#. .NET 一般都能干什么呢? l  ...

  2. JS.中文乱码,Jsp\Servlet端的解决办法

    JS.中文乱码,Jsp\Servlet端的解决办法 2010-03-08 15:18:21|  分类: Extjs |  标签:encodeuricomponent  乱码  urldecoder   ...

  3. Redis初级介绍

    1 什么是Redis Redis(REmote DIctionary Server,远程数据字典服务器)是开源的内存数据库,常用作缓存或者消息队列. Redis的特点: Redis存在于内存,使用硬盘 ...

  4. Spring声明式事务管理

    一.Spring 的声明式事务管理概述 1.Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法 ...

  5. Directive间的通信

    Directive间的通信 源自大漠的<AngularJS>5个实例详解Directive(指令)机制 这个例子主要的难点在于如何在子Expander里面访问外层Accordion的sco ...

  6. angularjs UI Libraries

    angularjs UI Libraries ● ng-bootstrap is currently available. ● PrimeNG has largest number of compon ...

  7. javascript运动系列第八篇——碰壁运动

    × 目录 [1]匀速碰壁 [2]自由落体 [3]投掷碰壁[4]拖拽碰壁 前面的话 碰撞运动可能是运动系列里面比较复杂的运动了.碰撞可以分为碰壁和互碰两种形式,而碰撞前后的运动形式也可以分为变速和匀速两 ...

  8. 深入理解客户区尺寸client

    前面的话 关于元素尺寸,一般地,有偏移大小offset.客户区大小client和滚动大小scroll.前文已经介绍过偏移属性,后文将介绍scroll滚动大小,本文主要介绍客户区大小client 客户区 ...

  9. 应用程序框架实战二十二 : DDD分层架构之仓储(层超类型基础篇)

    前一篇介绍了仓储的基本概念,并谈了我对仓储的一些认识,本文将实现仓储的基本功能. 仓储代表聚合在内存中的集合,所以仓储的接口需要模拟得像一个集合.仓储中有很多操作都是可以通用的,可以把这部分操作抽取到 ...

  10. 使用openfiler设置SMB/CIFS共享总是不通过的一例与解决办法

    最近使用openfiler进行空闲存储的集中化管理与多主机节点共享,等设置到了SMB/CIFS的时候总是通过不了,前提需要开启的LDAP内建在openfiler也都开启并设置好了,但就是无法通过&qu ...