How does CLR locate assembly

1. 察看配置文件,配置文件共有3处:
a. app.config :
b. publisher policy file:
c. machine.config:
第一步结束,我们已经根据Calling AssemblyManifest中的Referenced Assembly 和配置文件中得到了一个Full Qualified Assembly Name

2. 根据第一步得到的FQAN查找当前的binding context中是否已load了这个assembly
3. 如果FQAN中指定了 Public key token那么查找GAC
4. 如果GAC中没有或者FQAN中没有指定public key token,根据以下规则查找
   a. 如果app.config中指定了CodeBase那么,直接在CodeBase下查找该Assembly,找不到则直接绑定失败
   b. 如果 FQAN中指定了Culture,且Culture不为Neutual, 查找
      [Application Base]\[Culture]\[AssemblyName].dll
      [Application Base]\[Culture]\[AssemblyName]\[AssemblyName].dll
      [Application Base]\[Culture]\[AssemblyName].exe
      [Application Base]\[Culture]\[AssemblyName]\[AssemblyName].exe
   c. 如果FQAN中没有指定Culture或Culture为Neutual ,那么查找
      [Application Base]\[AssemblyName].dll
      [Application Base]\[AssemblyName]\[AssemblyName].dll
      [Application Base]\[AssemblyName].exe
      [Application Base]\[AssemblyName]\[AssemblyName].exe
   d. 如果app.config中或通过AppendPrivateBinPath方法指定了Private bin path,依次查找PrivateBin path, 先查找用AppendPrivateBinPath方法指定的路径。
   e. 如果使用Assembly.LoadFrom方法或在COM Interop中创建一个.NET开发的COM组件中,查找
      [Calling Assembly CodeBase]\[AssemblyName].dll
      [Calling Assembly CodeBase]\[AssemblyName]\[AssemblyName].dll
      [Calling Assembly CodeBase]\[AssemblyName].exe
      [Calling Assembly CodeBase]\[AssemblyName]\[AssemblyName].exe
    f. 调用Windows Installer的方法请求某个assembly, 实现Install on demand

你可能感兴趣的:(assembly)