Hospedagem CLR em vez de utilizar ClrCreateManagedInstance - quais são os benefícios?

StackOverflow https://stackoverflow.com/questions/800867

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho implementado com sucesso interoperabilidade beftween aplicação Win32 e conseguiu .Net dll como descrito aqui . Mas eu também li aqui que é possível acolher a todo o interior CLR do processo não gerenciado.

Assim, a minha pergunta é: por que você faria isso? É um pouco mais complexo do que apenas usar um objeto - o que beneficia você ganha por esse preço de maior complexidade

Editar: o que eu entendi a partir de 2 primeiras respostas, é que você começa a possibilidade de personalizar o CLR para suas necessidades - ou seja, se você estiver escrevendo um aplicativo de negócios simples, você nunca mais vai precisar host. Hospedagem é para coisas pesadas do sistema, como o navegador ou SQL Server.

Foi útil?

Solução

Hospedagem do CLR geralmente não é algo que você faz para interoperabilidade entre código gerenciado e Win32. geralmente há 3 métodos de interoperabilidade:

  • Runtime Callable Wrapper (RCW) - chamar um objeto COM .NET
  • COM Callable Wrapper (CCW) - fazer um objeto .NET aparecer como um objeto COM
  • P / Invoke

Estes têm sido apoiado desde a primeira versão do .NET. O ponto inteiro de hospedagem do CLR é para permitir que você profundamente incorporar código .NET dentro de um aplicativo não gerenciado. Por exemplo, existe um módulo que pode hospedar .NET no Apache no Win32 permitindo que ele execute páginas .aspx.

Da mesma forma, o SQL Server queria uma forma das pessoas para procedimentos armazenados gravação estendida e funções com código gerenciado. No passado, você poderia escrever isso em C / C ++, mas se eles hospedado o CLR eles poderiam realmente permitir que as pessoas a escrever estes com C #. O trabalho para obter o CLR em um estado foram poderia ser com segurança embutidos realmente empurrado para fora dos prazos, e assim por coisas como o controle sobre a memória e segurança nasceram. SQL Server tem alguns requisitos de estabilidade graves e você não pode ter .NET balançar o barco.

O API de hospedagem mudou significativamente de NET 1.x para 2.x mas tem sido mais estáveis ??uma vez que o CLR 2,0 viveu .NET 3.0, 3.5, etc.

Outras dicas

Microsoft SQL Server usa extensivly para substituir a segurança, montagem de carga, gerenciamento de memória, gerenciamento de threads e não o que. Um bom livro sobre este assunto é "Personalizando o Microsoft .NET Framework Common Language Runtime".

Você pode ter um aplicativo de legado e querem permitir que 3 partes para o uso das instalações do .net dentro de sua aplicação, mas sobretudo de uma forma controlada como controlar em que os conjuntos são carregados a partir. Aqui é um exemplo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top