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:
- Leia o grafo do RID no arquivo .deps.json da estrutura raiz (Microsoft.NetCore.App).
- 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).
- Começando da entrada encontrada no grafo do RID, procure ativos correspondentes àquele RID.
- 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.
Ação recomendada
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>