Sequência de pesquisa de assembly

Se um aplicativo isolado especificar uma dependência de assembly, o primeiro pesquisa lado a lado o assembly entre os assemblies compartilhados na pasta WinSxS. Se o assembly necessário não for encontrado, o pesquisa lado a lado por um assembly privado instalado em uma pasta da estrutura de diretórios do aplicativo.

Assemblies privados podem ser implantados nos seguintes locais na estrutura de diretório do aplicativo:

  • Na pasta do aplicativo. Normalmente, essa é a pasta que contém o arquivo executável do aplicativo.
  • Em uma subpasta na pasta do aplicativo. A subpasta deve ter o mesmo nome que o assembly.
  • Em uma subpasta específica do idioma na pasta do aplicativo. O nome da subpasta é uma cadeia de caracteres de códigos de linguagem DHTML que indica uma cultura de idioma ou idioma.
  • Em uma subpasta de uma subpasta específica do idioma na pasta do aplicativo. O nome da subpasta superior é uma cadeia de caracteres de códigos de linguagem DHTML que indica uma cultura de linguagem ou idioma. A subpasta mais profunda tem o mesmo nome que o assembly.

Na primeira vez que pesquisa lado a lado um assembly privado, ele determina se existe uma subpasta específica do idioma na estrutura de diretórios do aplicativo. Se nenhuma subpasta específica do idioma existir, pesquisa lado a lado o assembly privado nos locais a seguir usando a sequência a seguir.

  1. Pesquisa lado a lado a pasta WinSxS.
  2. \\<appdir>\<assemblyname>.DLL
  3. \\<appdir>\<assemblyname.manifest>
  4. \\<appdir>\<assemblyname>\<assemblyname>.DLL
  5. \\<appdir>\<assemblyname>\<assemblyname.manifest>

Se existir uma subpasta específica do idioma, a estrutura de diretório do aplicativo poderá conter o assembly privado localizado em vários idiomas. Pesquisa lado a lado as subpastas específicas do idioma para garantir que o aplicativo use o idioma especificado ou o melhor idioma disponível. Subpastas específicas de linguagem são nomeadas usando uma cadeia de caracteres de códigos de linguagem DHTML que especificam uma cultura ou idioma de linguagem. Se existir uma subpasta específica do idioma, pesquisa lado a lado o assembly privado nos locais a seguir usando a sequência a seguir.

  1. Pesquisa lado a lado a pasta 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>

Observe que a sequência de pesquisa lado a lado localiza um arquivo DLL com o nome do assembly e para antes de pesquisar um arquivo de manifesto com o nome do assembly. A maneira recomendada de lidar com um assembly privado que é uma DLL é colocar o manifesto do assembly no arquivo DLL como um recurso. A ID do recurso deve ser igual a 1 e o nome do assembly privado pode ser o mesmo que o nome da DLL. Por exemplo, se o nome da DLL for MICROSOFT.WINDOWS.MYSAMPLE.DLL, o valor do atributo name usado no elemento assemblyIdentity do manifesto do assembly também poderá ser Microsoft.Windows.mysample. Como alternativa, você pode colocar o manifesto do assembly em um arquivo separado, no entanto, o nome do assembly e seu manifesto devem ser diferentes do nome da DLL. Por exemplo, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest e MICROSOFT.WINDOWS.MYSAMPLE.DLL.

Por exemplo, se myapp estiver instalado na raiz da unidade c: e exigir myasm em francês-belga, o lado a lado usará a sequência a seguir para pesquisar a melhor aproximação para uma instância localizada do myasm.

  1. Pesquisa lado a lado o WinSxS para a versão 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. Pesquisa lado a lado o WinSxS para a versão 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. Pesquisa lado a lado o WinSxS para a versão 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. Pesquisa lado a lado o WinSxS para a versão 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. Pesquisa lado a lado o WinSxS para a versão sem idioma.
  22. c:\myapp\myasm.dll
  23. c:\myapp\myasm.manifest
  24. c:\myapp\myasm\myasm.dll
  25. c:\myapp\myasm\myasm.manifest

Se a pesquisa lado a lado atingir uma versão neutra em idioma do assembly e uma versão MUI (Interface do Usuário Multilanguage) do Windows estiver presente no sistema, o tentará associar ao <assemblyname.mui>. Lado a lado não tentará associar ao <assemblyname.mui> se a pesquisa atingir uma versão localizada do assembly. O manifesto do assembly de um assembly neutro de linguagem não terá um atributo de linguagem em seu elemento assemblyIdentity . Se o lado a lado atingir um assembly neutro em idioma e o MUI estiver instalado, o pesquisa lado a lado os locais a seguir usando a sequência a seguir para <assemblyname.mui>. Lado a lado usa a mesma sequência de pesquisa se o assembly for neutro em termos de cultura, exceto que <nenhum idioma> não será pesquisado.

  1. Pesquisa lado a lado a pasta WinSxS para <assemblyname.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>

Por exemplo, se a pesquisa lado a lado encontrar o assembly privado em c:\myapp\myasm\myasm.manifest, e myasm for um assembly neutro em idioma. Lado a lado usa a sequência a seguir para pesquisar myasm.mui. Observe que lado a lado não pesquisará um assembly MUI neutro em idioma.

  1. Pesquisa lado a lado o WinSxS para a versão fr-be do assembly 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. Pesquisa lado a lado o WinSxS para a versão fr do assembly 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. Pesquisa lado a lado o WinSxS para a versão en-us do assembly MUI.
  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. Pesquisa lado a lado o WinSxS para a versão en do assembly 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