C# manifest文件介绍
生活随笔
收集整理的這篇文章主要介紹了
C# manifest文件介绍
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Windows XP通過(guò)XML文件來(lái)實(shí)現(xiàn)這一功能,這些XML文件保存了有關(guān)應(yīng)用程序配置的元數(shù)據(jù),這里所說(shuō)的XML文件,就是Manifest清單文件。
? ? ? ? ?Manifest事實(shí)上就是一個(gè)以.manifest為后綴的XML文件,用于組織和描述隔離應(yīng)用程序及并行組件,其內(nèi)部的信息如<assemblyIdentity>元素則標(biāo)識(shí)著一個(gè)唯一的程序集,和其他信息一起,他們用于COM類、接口及庫(kù)的綁定和激活,而這些信息,以往都是存儲(chǔ)在注冊(cè)表中的。另外,Manifests也制定了組成程序集的文件及Windows類。
一、Manifest的分類
在Windows XP中,事實(shí)上是在.NET中,把Manifests分類為如下幾種類型:
1、程序集Manifests(Assembly Manifests):主要用于描述程序集,管理程序集的名字、版本、資源、依賴程序集。其中共享程序集的Manifests存儲(chǔ)在Windows的WinSxS目錄中。私有的程序集Manifests則存可以作為一個(gè)資源存儲(chǔ)在DLL中,也可以存儲(chǔ)在應(yīng)用程序目錄下。
2、應(yīng)用程序Manifests(Application Manifests):這類Manifests則用于描述隔離應(yīng)用程序,它管理著此應(yīng)用程序在運(yùn)行時(shí)要綁定的共享的并行組件的名字、版本。該Manifests可以作為一個(gè)文件(.manifest文件)存儲(chǔ)在應(yīng)用程序相同的目錄下,也可以作為一種資源嵌入在可執(zhí)行文件內(nèi)部(Embed Manifest)。
3、應(yīng)用程序配置文件(Application Configuration Files):對(duì)于并行組件及隔離應(yīng)用程序來(lái)說(shuō),使用這種Manifests來(lái)“Override and Redirect”所依賴程序集的版本。
4、發(fā)行配置文件(Publisher Configuration Files):用于重定向并行組件的版本倒另外一個(gè)合適的版本的Manifests。此時(shí),被重定向的新程序集應(yīng)該和原來(lái)的舊程序集具有相同的主.次(majou.minor)版本號(hào)。
二、Windows對(duì)于Manifest的處理
XP以前版本的windows,會(huì)像以前那樣執(zhí)行這個(gè)exe文件,尋找相應(yīng)的dll,沒(méi)有分別,Manifest只是個(gè)多余的文件或資源,dll文件會(huì)直接到system32的目錄下查找,并且調(diào)用。
而XP及其以后的操作系統(tǒng),則會(huì)首先讀取Manifest,獲得exe文件需要調(diào)用的DLL列表(此時(shí)獲得的,并不直接是DLL文件的本身的位置,而是DLL的manifest)操作系統(tǒng)再根據(jù)DLL的Manifest提供的信息去尋找對(duì)應(yīng)的DLL ,這樣就可能區(qū)別不同版本的同一個(gè)DLL文件。
這就說(shuō)明了為什么我的程序可以在2000下面運(yùn)行,而在XP及2003上無(wú)法運(yùn)行。這也使得很多木馬可以利用這個(gè)特點(diǎn)實(shí)現(xiàn)限制安全軟件。
三、VS2005種的Manifest配置
使用Visual Studio 2005以后的一個(gè)新問(wèn)題是,VS2005帶的8.0新版的C運(yùn)行庫(kù)(VC 8.0 CRT)文件在XP以后支持manifest的Windows版本中被調(diào)用時(shí),將會(huì)check一下Application自身的Manifest,否則將會(huì)拒絕被調(diào)用,這也就是說(shuō),使用Visual Studio開發(fā)的Application,Manifest將是必不可少的(搞不懂MS為啥要這樣設(shè)置,反正與VS2003.NET不同了,也許除了MS自己說(shuō)的哪些冠冕堂皇的原因,至少這樣一來(lái)Linux的Wine模擬要麻煩多了)
不過(guò),如果你的程序是靜態(tài)鏈接的,沒(méi)有使用dll,且只使用了操作系統(tǒng)核心的 Kernel32.dll, User32.dll, Ole32.dll, 或ShDocVW.dll 等,那么你可以不需要考慮Manifest, 可以關(guān)掉它。此時(shí),在VS2005種中,project的設(shè)置必須是Use Standard Windows Libraries、Not Using ATL、No Common Language Runtime support。
? ? ? ? ?Manifest事實(shí)上就是一個(gè)以.manifest為后綴的XML文件,用于組織和描述隔離應(yīng)用程序及并行組件,其內(nèi)部的信息如<assemblyIdentity>元素則標(biāo)識(shí)著一個(gè)唯一的程序集,和其他信息一起,他們用于COM類、接口及庫(kù)的綁定和激活,而這些信息,以往都是存儲(chǔ)在注冊(cè)表中的。另外,Manifests也制定了組成程序集的文件及Windows類。
一、Manifest的分類
在Windows XP中,事實(shí)上是在.NET中,把Manifests分類為如下幾種類型:
1、程序集Manifests(Assembly Manifests):主要用于描述程序集,管理程序集的名字、版本、資源、依賴程序集。其中共享程序集的Manifests存儲(chǔ)在Windows的WinSxS目錄中。私有的程序集Manifests則存可以作為一個(gè)資源存儲(chǔ)在DLL中,也可以存儲(chǔ)在應(yīng)用程序目錄下。
2、應(yīng)用程序Manifests(Application Manifests):這類Manifests則用于描述隔離應(yīng)用程序,它管理著此應(yīng)用程序在運(yùn)行時(shí)要綁定的共享的并行組件的名字、版本。該Manifests可以作為一個(gè)文件(.manifest文件)存儲(chǔ)在應(yīng)用程序相同的目錄下,也可以作為一種資源嵌入在可執(zhí)行文件內(nèi)部(Embed Manifest)。
3、應(yīng)用程序配置文件(Application Configuration Files):對(duì)于并行組件及隔離應(yīng)用程序來(lái)說(shuō),使用這種Manifests來(lái)“Override and Redirect”所依賴程序集的版本。
4、發(fā)行配置文件(Publisher Configuration Files):用于重定向并行組件的版本倒另外一個(gè)合適的版本的Manifests。此時(shí),被重定向的新程序集應(yīng)該和原來(lái)的舊程序集具有相同的主.次(majou.minor)版本號(hào)。
二、Windows對(duì)于Manifest的處理
XP以前版本的windows,會(huì)像以前那樣執(zhí)行這個(gè)exe文件,尋找相應(yīng)的dll,沒(méi)有分別,Manifest只是個(gè)多余的文件或資源,dll文件會(huì)直接到system32的目錄下查找,并且調(diào)用。
而XP及其以后的操作系統(tǒng),則會(huì)首先讀取Manifest,獲得exe文件需要調(diào)用的DLL列表(此時(shí)獲得的,并不直接是DLL文件的本身的位置,而是DLL的manifest)操作系統(tǒng)再根據(jù)DLL的Manifest提供的信息去尋找對(duì)應(yīng)的DLL ,這樣就可能區(qū)別不同版本的同一個(gè)DLL文件。
這就說(shuō)明了為什么我的程序可以在2000下面運(yùn)行,而在XP及2003上無(wú)法運(yùn)行。這也使得很多木馬可以利用這個(gè)特點(diǎn)實(shí)現(xiàn)限制安全軟件。
三、VS2005種的Manifest配置
使用Visual Studio 2005以后的一個(gè)新問(wèn)題是,VS2005帶的8.0新版的C運(yùn)行庫(kù)(VC 8.0 CRT)文件在XP以后支持manifest的Windows版本中被調(diào)用時(shí),將會(huì)check一下Application自身的Manifest,否則將會(huì)拒絕被調(diào)用,這也就是說(shuō),使用Visual Studio開發(fā)的Application,Manifest將是必不可少的(搞不懂MS為啥要這樣設(shè)置,反正與VS2003.NET不同了,也許除了MS自己說(shuō)的哪些冠冕堂皇的原因,至少這樣一來(lái)Linux的Wine模擬要麻煩多了)
不過(guò),如果你的程序是靜態(tài)鏈接的,沒(méi)有使用dll,且只使用了操作系統(tǒng)核心的 Kernel32.dll, User32.dll, Ole32.dll, 或ShDocVW.dll 等,那么你可以不需要考慮Manifest, 可以關(guān)掉它。此時(shí),在VS2005種中,project的設(shè)置必須是Use Standard Windows Libraries、Not Using ATL、No Common Language Runtime support。
總結(jié)
以上是生活随笔為你收集整理的C# manifest文件介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ASP.NET文件的上传和下载
- 下一篇: Unity 实现类似 QQ泡泡堂一样平滑