轉帖|其它|編輯:郝浩|2011-05-19 14:50:23.000|閱讀 582 次
概述:程序集的加載涉及到很多方面的知識,包括配置文件、全局緩存裝配、私有目錄等的查找。用LoadAWithPartialName方法加載程序集,必須提供程序集的文本名稱,還可以包公鑰標記、版本或區(qū)域性等,但不必包含完全引用信息,如名稱、版本、區(qū)域性、公鑰標記。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
程序集的加載涉及到很多方面的知識,包括配置文件、全局緩存裝配、私有目錄等的查找。用LoadAWithPartialName方法加載程序集,必須提供程序集的文本名稱,還可以包公鑰標記、版本或區(qū)域性等,但不必包含完全引用信息,如名稱、版本、區(qū)域性、公鑰標記。
使用(System.Reflection.Assembly.Load)并僅指定部分引用,運行庫在全局程序集緩存和應用程序根目錄中對程序集進行檢查。使用LoadWithPartialName方法并僅指定部分引用,運行庫在應用程序目錄中和全局程序集緩存中對程序集進行檢查。另外,提供部分引用,可在應用程序集的配置文件中提供完全引用的信息。
使用Load提供部分引用程序集的查找:
1. 在應用程序的配置文件中檢查
<qualifyAssembly>元素中相關的限定信息,如果找到了,則將部分引用的限制條件轉化為新的引用限定條件。假如:
<qualifyAssembly partialName="mydll"
fullName="mydll,version=1.0.0.1,publicKeyToken=xxx,culture=zh-CN">
當發(fā)生以下調用時:Assembly a=Assembly.Load("mydll"); 則將條件轉化為更強的條件"mydll,version=1.0.0.1,publicKeyToken=xxx,culture=zh-CN".
2. 根據(jù)指定的限定條件在全局程序集緩存中匹配
如果有一個或多個匹配項,則取第一個匹配的程序集,進入第4步,否則就進入第3步。
3. 在應用程序目錄下根據(jù)更強的限定條件匹配
如果有一個或多個匹配,就取第一個,進入第4步,否則局部引用失敗
4. 如果指定了版本策略,則對匹配的程序集應用版本策略
<dependentAssembly>
<assemblyIdentity name="mydll" publicKeyToken=
"xxx" culture="zh-CN"></assemblyIdentity>
<bindingRedirect oldVersion="1.3.0.0" newVersion="1.2.0.0"></bindingRedirect>
</dependentAssembly>
根據(jù)版本策略,最后加載的是新版本"mydll,publicKeyToken=xxx,culture=zh-CN,version=1.2.0.0"。假如是LoadPartialName 則先從應用程序根目錄下匹配,沒找到匹配項則從全局程序集緩存中去匹配...一樣也應用版本策略,匹配的過程中,還要考慮到區(qū)域性文化的問題,如:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="mydll"
fullName="mydll,version=1.2.0.0,culture=zh-CN,publicKeyToken=xxx"/>
<dependentAssembly>
<assemblyIdentity name="mydll",publicKeyToken="xxx" culture="zh-CN"/>
</dependentAssembly>
<bindingRedirect oldVersion="1.2.0.0" newVersion="1.3.0.0">
</assemblyBinding>
</runtime>
</configuration>
在全局程序集緩存中有:
mydll,version="1.2.0.0",publicKeyToken=xxx,culture=zh-CN
和
mydll,version="1.3.0.0",publicKeyToken=xxx,culture=en-US
在私有目錄下有:
mydll,version="1.3.0.0",publicKeyToken=xxx,culture=zh-CN
mydll,version="1.3.0.0",publicKeyToken=xxx,culture=en-US
則找到的是私有目錄下:mydll,version="1.3.0.0",publicKeyToken=xxx,culture=zh-CN
第一步轉化為更強的限定條件:mydll,version="1.2.0.0",publicKeyToken=xxx,culture=zh-CN, 在全局程序集緩存中查找,并根據(jù)culture尋找匹配,在應用版本策略和區(qū)域性匹配后,沒找到1.3.0.0版本,就到私有目錄下匹配...
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園