Propriedade “RuntimeInformation.OSDescription” do .NET Core (e implementação de suporte a .Net Core Multi-Platform em geral)
Depois de investir cerca de 8 horas em pesquisas intermináveis no google, tenho que perguntar a vocês aqui da comunidade. Por favor, ajude :-)
Este é o Q teórico, e quero entender como essa "mágica" implementada pelo Microsoft .Net Core CLR. Embora eu entenda como implementar meu próprio código para poder trabalhar em diferentes sistemas operacionais (usando Interface e P / Invoke de uma plataforma específica) a partir da resposta:https://stackoverflow.com/a/52297584/10696080
Não entendo como as DLLs .Net Core CLR implementam a mesma funcionalidade. Para "RuntimeInformation.OSDescription" ou "RuntimeInformation.IsOSPlatform", por exemplo.
Olhando o código-fonte da classe .Net Core RuntimeInformation, parece que não é implementado por Interface e P / Invorke, mas por algum método misterioso.
Minhas descobertas até aqui:
Eu encontro uma pergunta mais geral: Implementação da estrutura subjacente do .Net Core Multi-Platform Mas não responde à minha pergunta.
O site da microsoft também não explica isso
A decompilação de System.Runtime.InteropServices.RuntimeInformation.dll revela apenas propriedades estáticas vazias
Pergunta: Por favor, aconselhe onde posso procurar a explicação de como as DLLs do .Net Core CLR implementam o suporte multiplataforma (ou mais especificamente, como funciona o RuntimeInformation.OSDescription)
Respostas
.Net Core CLR DLLs implementa suporte multiplataforma implementado por:
O código-fonte do .NET Core tem diretivas específicas de pré-processador do sistema operacional:
* # se TARGET_WINDOWS ...
#elif TARGET_OSX ...
#elif TARGET_UNIX ... *
A compilação condicional é feita e a DLL compilada separadamente para cada plataforma de destino. Portanto, existem algumas versões de DLLs do .NET Core (no SDK do .NET Core)
Durante a implantação do aplicativo:
A. Implementação dependente do Fremework . Seu aplicativo usa a versão DLL específica do sistema operacional, que já está instalada na máquina de destino (no tempo de execução do .NET Core)
B. Implantação independente . DLL específico da plataforma obtido do SDK e incluído na pasta do aplicativo