Pergunta

Eu estou usando um comando específico no meu código C #, que funciona bem. No entanto, diz-se a se comportar mal em código "não gerenciado".

O que é gerenciado ou código não gerenciado?

Foi útil?

Solução

Aqui está algum texto do MSDN sobre código não gerenciado .

Alguns código da biblioteca precisa chamar código não gerenciado (por exemplo, APIs de código nativo, como Win32). Porque isso significa ir para fora do perímetro de segurança para código gerenciado, é necessário a devida cautela.

Aqui está alguma outra explicação cortesia sobre o código gerenciado:

  • O código que é executado pelo CLR.
  • O código que alvos o Common Language Runtime, a fundação do .NET Framework, é conhecido como código gerenciado.
  • suprimentos código gerenciado os metadados necessários para o CLR para fornecer serviços como gerenciamento de memória, a integração entre linguagens, segurança de acesso ao código, e controle vida automático de objetos. Todo o código baseado em executa IL como código gerenciado.
  • código que executa sob o ambiente de execução CLI.

Para o seu problema:

Eu acho que é porque NUnit executar o seu código para UnitTesting e pode ter alguma parte dela que é gerenciado. Mas eu não tenho certeza sobre isso, então não leve isso para o ouro. Estou certo de que alguém será capaz de lhe dar mais informações sobre ele. Espero que ajude!

Outras dicas

Este é um bom artigo sobre o assunto.

Para resumir,

  1. O código gerenciado não é compilado para código de máquina, mas para uma linguagem intermediária que é interpretado e executado por algum serviço em uma máquina e, portanto, está operando dentro de uma (espero!) Quadro seguro que lida com coisas perigosas como memória e tópicos para você. No uso moderno, isto significa frequentemente NET, mas não precisa.

Um programa aplicativo que é executado dentro de um motor de tempo de execução instalado na mesma máquina. O aplicativo não pode ser executado sem ele. O ambiente de tempo de execução fornece a biblioteca geral do software rotinas que os usos do programa e tipicamente memória executa gestão. Ela também pode fornecer (JIT) conversão just-in-time de código fonte para código executável ou a partir de uma linguagem intermediária para código executável. Java, Visual Basic e Common Language Runtime do .NET (CLR) são exemplos de motores de tempo de execução. ( Leia mais )

  1. Código não gerenciado é compilado para código de máquina e, portanto, executado pelo OS diretamente. É, portanto, tem a capacidade de fazer danos / code coisas poderosas gerenciado não. Isto é como tudo usado para trabalho, então normalmente é associado com material antigo como .dlls.

Um programa executável que funciona por si. Lançado a partir da operação sistema, o programa convida e usa as rotinas de software no sistema operacional, mas não exige um outro sistema de software a ser usava. programas em assembly que foram montados na máquina programas de língua e C / C ++ compilado em linguagem de máquina para um em particular plataforma são exemplos de código não gerenciado. ( Leia mais )

  1. Native código é muitas vezes sinónimo de não gerenciado, mas não é idêntico.

Quando você pensa em não gerenciado , pense específico da máquina, o código de máquina de nível. Como a linguagem assembly x86. código não gerenciado (nativo) é compilado e ligado para rodar diretamente no processador foi projetado para, excluindo todas as coisas OS para o momento. Não é portátil, mas é rápido. Muito simples, despojado código.

Dirigido código é tudo de Java a idade Interpretativo BASIC, ou qualquer coisa que é executado sob .NET. Dirigido código é compilado tipicamente a um nível intermédio P-Code ou byte conjunto de códigos de instruções. Estes não são instruções específicas à máquina, embora semelhante à linguagem assembly. O código gerenciado isola o programa a partir da máquina que está sendo executado, e cria um limite seguro em que toda a memória é alocada indiretamente, e de um modo geral, você não tem acesso direto a recursos da máquina, como portas, espaço de endereçamento de memória, a pilha, etc . a ideia é executado em um ambiente mais seguro.

Para converter de uma variável conseguiu, digamos, a um já não gerenciado, você tem que chegar ao próprio objeto real. É provavelmente embalados ou acondicionados em algumas embalagens adicional. variáveis ??não gerenciados (como um 'int', por exemplo) - em uma máquina de 32 bits - leva exatamente 4 bytes. Não há embalagens sobrecarga ou adicional. O processo de ir de gerenciado para código não gerenciado - e vice-versa - é chamado de " empacotamento ". Ele permite que seus programas para atravessar a fronteira.

Em poucas palavras como possível:

  • código gerenciado = .NET programas
  • código não gerenciado = programas "normais"

código não gerenciado Basicamente é um código que não funciona sob o .NET CLR (aka não VB.NET, C #, etc.). Meu palpite é que NUnit tem um corredor / invólucro que não é código .NET (aka C ++).

Dirigido cupom:
Código que é executado sob um "contrato de cooperação" com o Common Language Runtime. O código gerenciado deve fornecer os metadados necessárias para a execução de prestação de serviços, como a memória gestão, integração entre linguagens, segurança de acesso ao código, e controlo vida automática dos objectos. Todo o código baseado no Microsoft linguagem intermediária (MSIL) é executado como código gerenciado.

Un-Managed cupom:
Código que é criada sem ter em conta para o convenções e exigências da Common Language Runtime. não gerenciado executa o código no ambiente de tempo de execução linguagem comum com o mínimo serviços (por exemplo, nenhuma coleta de lixo, limitado a depuração, e assim por diante).

Referência: http: // www. dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx

NUnit cargas os testes de unidade em um AppDomain separado, e presumo que o ponto de entrada não está sendo chamado (provavelmente não é necessário), daí a entrada montagem é nulo.

Dirigido código é o C # .Net, VB.Net, F # .NET etc compiladores criar. Ele é executado no CLR, que entre outros serviços oferece coisas como coleta de lixo e verificação de referência, e muito mais. Então, pense nisso como, meu código é gerenciado pelo CLR.

Por outro lado, não gerenciado compila o código diretamente para código de máquina. Ele não gerencia pelo CLR.

código é executado gerenciados dentro do ambiente de CLR ou seja .NET runtime.In curta toda IL são geridos code.But se você estiver usando uma terceira parte exemplo software VB6 ou componente VC ++ são código não gerenciado como .NET runtime (CLR) não tem controle sobre a execução de código fonte da língua.

código gerenciado: - Código que MSIL forma (linguagem intermediária) é desenvolvido após a compilação compilador de linguagem e executado diretamente pelo CLR chamado código gerenciado. por exemplo: - Todo o código 61 idioma suportado pelo .NET Framework

código não gerenciado: - código que desenvolveu antes .net para o qual forma MSIL não está disponível e é executado por CLR diretamente, em vez CLR irá redirecionar para o sistema operacional isso é conhecido como código não gerenciado

.

por exemplo: -COM, Win32 APIs

  • Dirigido Código:. Código escrito em linguagem .NET como C #, VB.NET
  • não gerenciado Código: código não escrito em linguagem .NET e MSIL faz não entender o que é e não pode ser executado no CLR; como controles de terceiros que usamos em nossas aplicações .NET que não é criado em linguagens .NET.

Antes de mais nada entender isso, antes .NET framework, Microsoft foram fornecendo os produtos stand-alone como MFC (Visual C++), VB, FoxPro etc.

Em 2002, a Microsoft combinou os seus produtos e fez framework .NET. Agora há uma diferença entre a forma como o código foi executado antes e como o código é gerido e executado em .NET framework. Microsoft introduziu conceito de CLR com o .NET Framework que compila o código proveniente de qualquer lanugague suportada do framework .NET e fornecer funcionalidades adicionais como memory mangement, garbage collection etc. Mas, tais características CLR não estavam disponíveis diretamente antes.

Então, se você está criando biblioteca / código em .NET framework (compilado com CLR), em seguida, que é chamado Managed code. Você pode usar esta biblioteca ainda mais em outro aplicativo .NET / projecto, e lá também, CLR entender como ele foi compilado antes, e é por isso que continua a ser o seu gerenciar o código.

OTOH se você quiser usar as bibliotecas que foram escritos antes de .NET framework, então você pode fazer com certas limitações, mas lembre-se, uma vez CLR não estava lá naquela época, então agora, CLR não vai entender e compilação este código novamente. E isto será chamado unmanaged code. Por favor note que, bibliotecas / assembilies criados por alguns terceiros para fornecer certas características / ferramenta também pode ser considerado como código unmanage se não é CLR compatiblie.

Em termos leigos, Gestão código é algo que o CLR entende e pode compilá-lo por conta própria para posterior execução. Em .NET framework, (de quaisquer isso é linguagem trabalhar no framework .NET) Quando o código vai para o CLR, em seguida, a oferta de código algumas informações meta dados, de modo que CLR pode fornecer-lhe características especificadas aqui . Poucos deles são Garbage collection, Performance improvements, cross-language integration, memory management etc.

OTOH, Código unmanged é algo específico para máquina e pronto para uso, sem necessidade de processá-lo ainda mais.

De Pro C # 5 e o .NET Framework 4.5:

Dirigido vs código não gerenciado: Talvez o ponto mais importante para entender sobre a linguagem C # é que ele pode produzir código que pode executar apenas dentro do .NET runtime (você nunca poderia usar C # para construir um servidor COM nativo ou um não gerido C / C ++ aplicação). Oficialmente falando, o termo usado para descrever o código visando o runtime .NET é o código gerenciado. A unidade de binário que contém o código gerenciado é chamado uma assembléia (mais detalhes sobre as assembléias em apenas um pouco). Por outro lado, um código que não podem ser diretamente oferecida pelo .NET runtime é denominado código não gerenciado.

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