O host determina ativos específicos do RID

Ao executar um aplicativo com ativos específicos de identificador de tempo de execução (RID), o host determina quais ativos são relevantes para a plataforma na qual ele está sendo executado. Isto aplica-se tanto à aplicação em si como à lógica de resolução utilizada pela AssemblyDependencyResolver.

Anteriormente, o host tentou calcular o RID em tempo de execução e, em seguida, ler o gráfico do RID para determinar quais ativos específicos do RID correspondiam ou eram compatíveis com o RID calculado. Agora, o comportamento padrão não calcula o RID nem usa o gráfico RID. Em vez disso, o host depende de uma lista conhecida de RIDs com base em como o próprio tempo de execução foi construído.

Comportamento anterior

Anteriormente, o processo de seleção de ativos específicos do RID era:

  1. Leia o gráfico RID do arquivo .deps.json da estrutura raiz (Microsoft.NetCore.App).
  2. Calcule o RID atual em tempo de execução e tente encontrar uma entrada para ele no gráfico RID. Se ele não existir, verifique se há um RID de fallback (incorporado ao host em tempo de compilação).
  3. A partir da entrada encontrada no gráfico RID, procure ativos correspondentes a esse RID.
  4. Continue descendo a lista de RIDs na entrada do gráfico RID até que uma correspondência de ativos seja encontrada ou a lista termine.

Se o gráfico RID não tiver o RID computado ou o RID de fallback, os ativos RID não foram resolvidos corretamente.

Novo comportamento

Por padrão, o processo não depende mais do gráfico RID. Em vez disso, ele verifica um conjunto conhecido de RIDs portáteis com base em como o host foi construído. Por exemplo:

Linux

  • Linux-X64
  • linux
  • UNIX-X64
  • UNIX
  • qualquer

Windows

  • win-x64
  • vitória
  • qualquer

macOS

  • OSX-X64
  • OSX
  • UNIX-X64
  • UNIX

Para compilações não portáteis do host ou do tempo de execução, a compilação também pode definir um RID não portátil que é verificado primeiro.

Versão introduzida

.NET 8 Visualização 5

Tipo de mudança de rutura

Esta alteração pode afetar a compatibilidade binária e é também uma mudança comportamental.

Razão para a alteração

O gráfico RID era caro para manter e entender, exigindo que o próprio .NET estivesse ciente da distro de uma maneira frágil. A equipe do .NET e a comunidade gastam uma quantidade não trivial de tempo atualizando o gráfico e fazendo backporting dessas atualizações para versões anteriores. O objetivo a longo prazo é parar de atualizar o gráfico RID, parar de lê-lo e, eventualmente, removê-lo. Esta mudança revolucionária é um passo em direção a esse objetivo.

Use RIDs portáteis, por exemplo, linux, linux-musl, osx, e win. Para casos de uso especializados, você pode usar APIs como NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) ou AssemblyLoadContext.ResolvingUnmanagedDll para lógica de carregamento personalizada.

Se você precisar reverter para o comportamento anterior, defina a opção System.Runtime.Loader.UseRidGraph de compatibilidade com versões anteriores como true no arquivo runtimeconfig.json . A configuração do switch para true instrui o host a usar o comportamento anterior de leitura do gráfico RID. Como alternativa, você pode definir a UseRidGraph propriedade MSBuild como true em seu arquivo de projeto. Por exemplo

<PropertyGroup>
  <UseRidGraph>true</UseRidGraph>
</PropertyGroup>

APIs afetadas

Consulte também