惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
Lohrmann on Cybersecurity
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
V
Vulnerabilities – Threatpost
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
The GitHub Blog
The GitHub Blog
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
博客园 - 【当耐特】
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
Cyberwarzone
Cyberwarzone
V
V2EX
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
月光博客
月光博客
MongoDB | Blog
MongoDB | Blog
Scott Helme
Scott Helme
A
Arctic Wolf
美团技术团队
S
Schneier on Security
P
Proofpoint News Feed
G
Google Developers Blog
The Hacker News
The Hacker News
S
Securelist
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
T
The Exploit Database - CXSecurity.com
量子位
T
Threatpost
Spread Privacy
Spread Privacy
Help Net Security
Help Net Security
B
Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
J
Java Code Geeks
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
Simon Willison's Weblog
Simon Willison's Weblog
Y
Y Combinator Blog
Cloudbric
Cloudbric

博客园 - 不搽雪花膏

linux网关设置 <!DOCTYPE>标签与table高度100% (转) linux运行apache出现403错误 Ubuntu 12.10 Tty (字符终端) 显示中文,和字体大小设置 64位系统下组件服务的查看 ActiveRecord返回部分字段的查询 转 Web前端性能优化全攻略 Castle ActiveRecord 笔记 - 不搽雪花膏 WQL测试工具 [转载]HttpModule与HttpHandler详解 转载 云计算七问七答 MySQL(5.0)导出导入 .NET代码编写规范 Hibernate配置参数 [转]PKCS 证书 细数.net3.0的各项新特性 Jquery示例 Jquery入门 [转]Response.End、Response.Redirect 或 Server.Transfer 方法与 ThreadAbortException 异常
[转]整理.net程序集加载方法
不搽雪花膏 · 2009-02-12 · via 博客园 - 不搽雪花膏

原文路径:http://qbar.tech.qq.com/itclub/5513.htm

   程序集是任何 .NET Framework 应用程序的基本构造块。例如,在生成简单的 C# 应用程序时,Visual Studio 创建一个单个可移植可执行 (PE) 文件形式的程序集,明确地说就是一个 EXE 或 DLL。程序集仅在需要时才加载。如果不使用程序集,则不会加载。这意味着程序集可能是在大型项目中管理资源的有效途径。

程序集可以包含一个或多个模块。例如,计划较大的项目时,可以让几个各个开发人员负责单独的模块,并通过组合所有这些模块来创建单个程序集。

        要从程序集的元数据中获取程序集的信息,首先需要加载程序集。.Net中加载程序集方法有几种,本人结合自己的实践和认识简单介绍一下。描述不一定很准确,请提出来一起进步。

一、隐式加载
        没有被显式加载但被引用的程序集,CLR会按照全局程序集缓存(GAC)、工作目录(应用程序所在目录)以及私有路径目录的顺序来寻找并加载。

二、AppDomain.Load 方法
    将一个程序集加载到一个特定的程序域中,主要用来供非托管代码调用

三、Assembly.Load方法
    通过接受一个程序集标识来加载程序集。如果是强命名程序集,则标识包括程序集名称、版本、语言文化、以及公有密钥标记,Load方法将导致CLR按照隐式加载的策略寻找并加载程序集。弱命名程序集则只是一个不带文件扩展名的程序集的名称,CLR不会到GAC中查找,如果没有指定私有目录,则在工作目录查找,如Assembly.Load("Math")。其中私有目录的定义可以在配置文件中指定。如应用程序MyApp.exe的配置文件可以定义为MyApp.exe.config。内容:
    

  1.  <?xml version="1.0" encoding="utf-8" ?>
  2.     <configuration>
  3.        <runtime>
  4.           <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  5.              <probing privatePath="App;App1;" />
  6.           </assemblyBinding>
  7.        </runtime>
  8.     </configuration>

     其中App和App1是两个在工作目录下的目录,用probing定义,存放需要在这个目录下被加载的程序集。如果使用工作目录以外的目录下的程序集,则可以使用codeBase元素来定义,可以在MSDN上查找其属性内容。

四、Assembly.LoadFrom方法
    参数是包括程序集清单的文件的名称或路径,包括文件扩展名。如需要加载D:"App"math.dll,可以使用语句:
    Assembly a = Assembly.LoadFrom(@"D:"App"math.dll");
    a即是加载的程序集。
    但这种方法有缺点,在MSDN上有详细的描述,我自己遇到的一个问题是加载一个在非工作目录下的程序集后,在另一个程序集中使用这个程序集中的对象进行反序列化时失败。使用Assembly.Load方法或者将该程序集放在工作目录下后问题得以解决。

五、Assembly.LoadFile方法
    用来加载指定路径上的程序集文件的内容。使用 LoadFile 方法来加载和检查具有相同标识但位于不同路径中的程序集。与 LoadFrom 不同,LoadFile 不会将文件加载到 LoadFrom 上下文中,也不会使用加载路径解析依赖项。LoadFile 在这个受限制的方案中很有用,因为 LoadFrom 不能用于加载标识相同但路径不同的程序集;它只加载第一个这样的程序集。

六、Assembly.LoadWithPartialName方法
    使用部分名称从应用程序目录或从全局程序集缓存加载程序集。参数为程序集标识,其中包含程序集的名称(不带文件扩展名)。程序集的版本、语言文化及公用密钥标记为可选。该方法执行时CLR首先检查应用程序的XML配置文件来搜索qualifyAssembly元素,若存在则该元素应能告诉CLR如何将一个部分的程序集标识映射为完全限定的标识,CRL将根据通常规则来查找程序集。若该元素不存在,CRL将使用指定名称在应用程序的工作目录和私有路径目录中搜索。若仍未找到,则到GAC中查找。

七、传统VC动态库的调用
    通过 P/Invoke 调用Win32 DLL

    using System.Runtime.InteropServices;//这是用到DllImport时候要引入的程序集

    [DllImport("DBAccess.dll",CharSet=CharSet.Auto)]
    static extern ulong FindApp( bool bIsTrue );

    其他平台调用wiki插件:http://www.pinvoke.net/