程序集搜索序列

如果隔离的应用程序指定程序集依赖项,则首先在 WinSxS 文件夹中的 共享程序集 之间搜索程序集。 如果未找到所需的程序集,则并行搜索安装在应用程序目录结构的文件夹中的私有程序集。

专用程序集 可以部署在应用程序的目录结构的以下位置:

  • 在应用程序的 文件夹中。 通常,这是包含应用程序的可执行文件的文件夹。
  • 在应用程序文件夹的子文件夹中。 子文件夹必须与程序集同名。
  • 在应用程序文件夹中特定于语言的子文件夹中。 子文件夹的名称是指示语言区域性或语言的 DHTML 语言代码字符串。
  • 在应用程序文件夹中特定于语言的子文件夹的子文件夹中。 较高子文件夹的名称是指示语言区域性或语言的 DHTML 语言代码字符串。 更深层的子文件夹与程序集同名。

首次并行搜索专用程序集时,它会确定应用程序目录结构中是否存在特定于语言的子文件夹。 如果不存在特定于语言的子文件夹,请使用以下顺序在以下位置并行搜索专用程序集。

  1. 并行搜索 WinSxS 文件夹。
  2. \\<appdir>\<assemblyname>.DLL
  3. \\<appdir>\<assemblyname.manifest>
  4. \\<appdir>\<assemblyname>\<assemblyname>.DLL
  5. \\<appdir>\<assemblyname>\<assemblyname.manifest>

如果存在特定于语言的子文件夹,则应用程序的目录结构可能包含本地化为多种语言的专用程序集。 并行搜索特定于语言的子文件夹,以确保应用程序使用指定的语言或最佳可用语言。 使用指定语言区域性或语言的 DHTML 语言代码字符串来命名特定于语言的子文件夹。 如果存在特定于语言的子文件夹,请使用以下顺序并行搜索以下位置的私有程序集。

  1. 并行搜索 WinSxS 文件夹。
  2. \\<appdir>\<language-culture>\<assemblyname>.DLL
  3. \\<appdir>\<language-culture>\<assemblyname.manifest>
  4. \\<appdir>\<language-culture>\<assemblyname>\<assemblyname>.DLL
  5. \\<appdir>\<language-culture>\<assemblyname>\<assemblyname.manifest>

请注意,并行搜索序列查找具有程序集名称的 DLL 文件,并在搜索具有程序集名称的清单文件之前停止。 处理作为 DLL 的私有程序集的建议方法是将程序集清单作为资源放在 DLL 文件中。 资源 ID 必须等于 1,并且专用程序集的名称可能与 DLL 的名称相同。 例如,如果 DLL 的名称MICROSOFT.WINDOWS.MYSAMPLE.DLL,则程序集清单的 assemblyIdentity 元素中使用的 name 属性的值也可能是 Microsoft.Windows.mysample。 作为替代方法,可以将程序集清单放在单独的文件中,但是程序集的名称及其清单必须与 DLL 的名称不同。 例如,Microsoft.Windows.mysampleAsm、Microsoft.Windows.mysampleAsm.manifest 和 MICROSOFT.WINDOWS.MYSAMPLE.DLL。

例如,如果 myapp 安装在驱动器 c: 的根目录中,并且需要法语-比利时语中的 myasm,则并行使用以下序列来搜索 myasm 本地化实例的最佳近似值。

  1. 并行搜索 WinSxS 以获取 fr-be 版本。
  2. c:\myapp\fr-be\myasm.dll
  3. c:\myapp\fr-be\myasm.manifest
  4. c:\myapp\fr-be\myasm\myasm.dll
  5. c:\myapp\fr-be\myasm\myasm.manifest
  6. 并行搜索 WinSxS 以获取 fr 版本。
  7. c:\myapp\fr\myasm.dll
  8. c:\myapp\fr\myasm.manifest
  9. c:\myapp\fr\myasm\myasm.dll
  10. c:\myapp\fr\myasm\myasm.manifest
  11. 并行搜索 WinSxS 以获取 en-us 版本。
  12. c:\myapp\en-us\myasm.dll
  13. c:\myapp\en-us\myasm.manifest
  14. c:\myapp\en-us\myasm\myasm.dll
  15. c:\myapp\en-us\myasm\myasm.manifest
  16. 并行搜索 WinSxS 以获取 en 版本。
  17. c:\myapp\en\myasm.dll
  18. c:\myapp\en\myasm.manifest
  19. c:\myapp\en\myasm\myasm.dll
  20. c:\myapp\en\myasm\myasm.manifest
  21. 并行搜索 WinSxS 以获取无语言版本。
  22. c:\myapp\myasm.dll
  23. c:\myapp\myasm.manifest
  24. c:\myapp\myasm\myasm.dll
  25. c:\myapp\myasm\myasm.manifest

如果并行搜索到达程序集的非特定语言版本,并且系统中存在 MUI) 版本的多语言用户界面 ( ,则并排将尝试绑定到 <assemblyname.mui>。 如果搜索到达程序集的本地化版本,则并行不会尝试绑定到 <assemblyname.mui>。 非特定语言程序集的 程序集清单 在其 assemblyIdentity 元素中没有语言属性。 如果并行到达非特定语言的程序集,并且安装了 MUI,则并行搜索以下位置,并排使用 assemblyname.mui> 的以下顺序<。 如果程序集是非特定区域性的,则并行使用同一搜索序列,但 <未搜索任何语言> 。

  1. 并行搜索 WinSxS 文件夹中的 <assemblyname.mui>。
  2. \\<user's language-culture>\<assemblyname.mui>
  3. \\<user's language>\<assemblyname.mui>
  4. \\<system 的 language-culture>\<assemblyname.mui>
  5. \\<system 的 language>\<assemblyname.mui>
  6. \\<no language>\<assemblyname.mui>

例如,如果并行搜索在 c:\myapp\myasm\myasm.manifest 找到私有程序集,而 myasm 是一个非特定语言的程序集。 然后并排使用以下顺序搜索 myasm.mui。 请注意,并排不会搜索非特定语言的 MUI 程序集。

  1. 并行搜索 WinSxS 以获取 MUI 程序集的 fr-be 版本。
  2. c:\myapp\fr-be\myasm.mui.dll
  3. c:\myapp\fr-be\myasm.mui.manifest
  4. c:\myapp\fr-be\myasm\myasm.mui.dll
  5. c:\myapp\fr-be\myasm\myasm.mui.manifest
  6. 并行搜索 WinSxS 以获取 MUI 程序集的 fr 版本。
  7. c:\myapp\fr\myasm.mui.dll
  8. c:\myapp\fr\myasm.mui.manifest
  9. c:\myapp\fr\myasm\myasm.mui.dll
  10. c:\myapp\fr\myasm\myasm.mui.manifest
  11. 并行搜索 WinSxS 以获取 MUI 程序集的 en-us 版本。
  12. c:\myapp\en-us\myasm.mui.dll
  13. c:\myapp\en-us\myasm.mui.manifest
  14. c:\myapp\en-us\myasm\myasm.mui.dll
  15. c:\myapp\en-us\myasm\myasm.mui.manifest
  16. 并行搜索 WinSxS 以获取 MUI 程序集的 en 版本。
  17. c:\myapp\en\myasm.mui.dll
  18. c:\myapp\en\myasm.mui.manifest
  19. c:\myapp\en\myasm\myasm.mui.dll
  20. c:\myapp\en\myasm\myasm.mui.manifest