Последовательность поиска сборок

Если изолированное приложение указывает зависимость сборки, параллельно выполняется поиск сборки среди общих сборок в папке 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-файл в качестве ресурса. Идентификатор ресурса должен быть равен 1, а имя частной сборки может совпадать с именем библиотеки DLL. Например, если имя библиотеки DLL MICROSOFT.WINDOWS.MYSAMPLE.DLL, значение атрибута name, используемого в элементе assemblyIdentity манифеста сборки, также может быть Microsoft.Windows.mysample. В качестве альтернативы можно поместить манифест сборки в отдельный файл, однако имя сборки и ее манифест должны отличаться от имени библиотеки DLL. Например, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest и MICROSOFT.WINDOWS.MYSAMPLE.DLL.

Например, если приложение myapp установлено в корне диска c: и требует myasm на французском и бельгийском языках, то параллельно использует следующую последовательность для поиска наилучшего приближения к локализованным экземплярам myasm.

  1. Параллельно выполняется поиск версии fr-be в WinSxS.
  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. Параллельно выполняется поиск версии fr в WinSxS.
  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. Параллельно выполняется поиск версии en-us в WinSxS.
  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. Параллельно выполняется поиск версии en в WinSxS.
  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) версии Windows, то параллельно выполняется попытка выполнить привязку к <assemblyname.mui>. Параллельно не пытается выполнить привязку к <assemblyname.mui>, если поиск достигает локализованной версии сборки. Манифест сборки независимой от языка сборки не будет иметь атрибут языка в элементе assemblyIdentity. Если параллельно достигает сборки, не зависящий от языка, и muI установлен, параллельно выполняет поиск в следующих расположениях, используя следующую последовательность для <имени>_сборки.mui. Параллельно использует ту же последовательность поиска, если сборка не зависит от языка и региональных параметров, за исключением того<, что поиск по языку> не выполняется.

  1. Параллельно выполняется поиск в папке WinSxS по имени><_сборки.mui.
  2. \\<user's language-culture>\<assemblyname.mui>
  3. \\<user's language>\<assemblyname.mui>
  4. \\<system's language-culture>\<assemblyname.mui>
  5. \\<system's language>\<assemblyname.mui>
  6. \\<no language>\<assemblyname.mui>

Например, если при параллельном поиске обнаруживается частная сборка по адресу c:\myapp\myasm\myasm.manifest, а myasm является сборкой, не зависящим от языка. Затем параллельно использует следующую последовательность для поиска myasm.mui. Обратите внимание, что параллельно не выполняется поиск сборки muI, не зависящих от языка.

  1. Параллельно выполняется поиск в WinSxS для версии fr-be сборки MUI.
  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 для версии fr сборки MUI.
  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 для версии en сборки MUI.
  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