O host determina ativos específicos do RID

Ao executar um aplicativo com ativos específicos do identificador de runtime (RID), o host determina quais ativos são relevantes para a plataforma em que ele está sendo executado. Isso se aplica ao aplicativo em si e à lógica de resolução usada por AssemblyDependencyResolver.

Anteriormente, o host tentou calcular o RID em tempo de execução, depois ler o grafo 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 e nem usa o grafo do RID. Em vez disso, o host conta com uma lista conhecida de RIDs com base em como o próprio runtime foi criado.

Comportamento anterior

Anteriormente, o processo para selecionar ativos específicos do RID era:

  1. Leia o grafo do RID no 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 grafo do RID. Se não existir, busque um RID de fallback (criado dentro do host em tempo de compilação).
  3. Começando da entrada encontrada no grafo do RID, procure ativos correspondentes àquele RID.
  4. Continue buscando na lista de RIDs na entrada do grafo do RID até que uma correspondência de ativo seja encontrada ou a lista termine.

Se o grafo do RID não tiver o RID calculado e nem o RID de fallback, isso significa que os ativos do RID não foram resolvidos corretamente.

Novo comportamento

Por padrão, o processo não depende mais do grafo do RID. Em vez disso, ele verifica se há um conjunto conhecido de RIDs portáteis com base na maneira como o host foi criado. Por exemplo:

Linux

  • linux-x64
  • linux
  • unix-x64
  • unix
  • any

Windows

  • win-x64
  • win
  • any

macOS

  • osx-x64
  • osx
  • unix-x64
  • unix

Para builds não portáteis do host ou do runtime, o build também pode definir um RID não portátil que é verificado primeiro.

Versão introduzida

.NET 8 versão prévia 5

Tipo de alteração interruptiva

Essa alteração pode afetar a compatibilidade binária e também corresponde a uma alteração de comportamento.

Motivo da alteração

O grafo do RID era caro de manter e entender, exigindo que o próprio .NET tivesse o reconhecimento de distribuição de maneira frágil. A equipe do .NET e a comunidade gastam uma quantidade de tempo significativa atualizando o grafo e trabalhando na portabilidade dessas atualizações para versões anteriores. A meta de longo prazo é parar de atualizar o grafo do RID, parar de lê-lo e, com o tempo, removê-lo por completo. Essa alteração interruptiva é um passo em direção a essa meta.

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

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

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

APIs afetadas

Confira também