.vshost.exe,.pdb的作用:
宿主进程 (vshost.exe)
宿主进程是 Visual Studio 2005 中的一项功能,能提高调试性能,支持部分信任调试并支持设计时表达式计算。宿主进程文件的文件名中包含 vshost,并位于项目的输出文件夹中。有关更多信息,请参见调试和宿主进程。
注意
宿主进程文件 (.vshost.exe) 由 Visual Studio 2005 使用,不应通过应用程序直接运行或部署。
1. 改善除錯效能
2. Partial Trust Debugging:這個沒有用過不太清楚,不過依據文件[1]的描述,好像是為了測試應用程式的安全性必須透過 vshost 來進行初始化...
3. 設計階段可以使用 Immediate Window 進行除錯(原文就是繁体字,我懒得去转换成简体了)
一句话,主要是帮助调试。在部署的时候,这些都可以不打包。
如果让vs不生成这些“垃圾”(还有相应的批准文件.vshost.exe.config),可以这样来设置:项目→“某项目”属性→ 调试,將 “启用the Visual Studio 宿主进程”選項前的勾勾取消即可。
.pdb调试信息文件,用于调试器出错的代码在源文件的哪一行,那一行是什么内容。
所以在打包的时候也可以抛弃它。
.manifest原理和用途
dll是被动态调用的,所以会被若干个程序共享使用的 但是如果dll在应用程序不知道的情况下升级了、或是被另一个程序更改了,就可能会出现问题,即”DLL Hell”
随着系统资源越来越丰富,硬盘不那么紧张,所以在XP以后的操作系统中,用新的机制来管理DLL
(这种机制,这不仅仅是对于.NET而言,对于普通的Native程序也是一样的)
Madifest是个XML的描述文件,对于每个DLL有DLL的Manifest文件,对于每个应用程序Application也有自己的Manifest
对于应用程序而言,Manifest可以是一个和exe文件同一目录下的.manifest文件,也可以是作为一个资源嵌入在exe文件内部的(Embed Manifest)
XP以前版本的windows,会像以前那样执行这个exe文件,寻找相应的dll,没有分别
Manifest只是个多余的文件或资源,dll文件会直接到system32的目录下查找,并且调用
而XP以后的操作系统,则会首先读取Manifest,获得exe文件需要调用的DLL列表
(此时获得的,并不直接是DLL文件的本身的位置,而是DLL的manifest)
操作系统再根据DLL的Manifest去寻找对应的DLL
<因此就可能区别不同版本的同一个DLL文件,或是指定一个程序本身Isolated的DLL>
不过使用Visual Studio 2005以后的一个新问题是,
VS2005带的8.0新版的C运行库(VC 8.0 CRT)文件在XP以后支持manifest的Windows版本中被调用时,
将会check一下Application自身的Manifest,否则将会拒绝被调用
这也就是说,使用Visual Studio开发的Application,Manifest将是必不可少的
(搞不懂MS为啥要这样设置,所以与VS2003.NET不同了)
(后来想想,除了MS自己说的哪些冠冕堂皇的原因,至少这样一来Linux的Wine模拟要麻烦多了)
除非,你的程序是静态链接的,没有使用dll,只使用了操作系统核心的 Kernel32.dll, User32.dll, Ole32.dll, 或ShDocVW.dll 等
project的设置必须是Use Standard Windows Libraries、Not Using ATL、No Common Language Runtime support
那么你可以不需要考虑Manifest 可以关掉它
VS2005中Menifest相关的设置:
? Project/Properties/Linker/Manifest File/Generate Manifest?? 决定是否生成Manifest,如上情况才可以关闭
? Project/Properties/Linker/Manifest File/Allow Isolation????????这个是设置DLL的调用的,并不能决定Manifest是否还是必须的
? Project/Properties/Manifest Tool/Input and Output/Embed Manifest? 决定Manifest是个单独的文件还是嵌入到exe内的资源
bin目录可以理解为“执行”目录。
而obj目录可以理解为“编译”目录。
在一个解决方案包含多个工程的时候,编译时,每个工程都会现在自己的obj目录下生成可执行文件,然后再将这些可执行文件以及相关文件(如配置文件、数据库文件等)拷贝到被设为“启动项”的工程的bin目录下。
obj是产生bin里的内容之前所使用的临时文件夹。也就是在obj生成之后将部分制作好的文件拷贝到bin里边,但是obj中的并不删除。vs环境并不对临时目录“擦屁股”,而是下一次使用文件夹时才预先擦一下。
你调试程序的时候每一次启动之前vs都要首先将程序编译好,然后才能执行。这个编译过程在 obj中做临时目录,其结果就拷贝到bin中,并从这里开始执行exe供你调试。用于开始调试程序的目录包括所有的exe、引用的dll、其它运行时你的程序需要读取的任何文件。
因此,如果你的程序在运行时需要在本地读取一些独立的资源文件,例如一个图标,那么你工程中的资源文件的属性应该修改为“每次都复制到输出目录”才能正确调试。
“能用作什么”?只有调试时vs环境自己使用,你不应该为它操心。
其实你应该使用正常的“发布”功能去将程序发布到单独的目录里,不要去到bin或者obj目录里去见什么垃圾文件。
c#中每新建一个项目的话都会产生一个Properties文件夹,,定义你程序集的属性的~~存放资源文件和成员集属性用的。。不用管他。。。一般也不去修改 ..
。
app.config是用户自定义配置文件,能够比较灵活修改你的一些配置信息,
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings >
<add key ="sqlConnection" value ="Data Source=(Local);Initial Catalog=MyItem;Integrated Security=True"/>
</appSettings>
</configuration>
比如说你的程序需要兼容两种数据库,就可以根据修改配置文件中的参数来实现数据库的连接字符的改变。。。。。
用的比较多的在抽象工厂模式下,更能体现他的用途