문제

C# 코드에서 특정 명령을 사용하고 있습니다. 그러나 "관리되지 않은"코드에서 오작동하는 것으로 알려져 있습니다.

관리 또는 관리되지 않는 코드 란 무엇입니까?

도움이 되었습니까?

해결책

다음은 MSDN의 텍스트입니다 관리되지 않는 코드.

일부 라이브러리 코드는 관리되지 않는 코드 (예 : Win32와 같은 기본 코드 API)로 호출해야합니다. 이는 관리 코드를 위해 보안 경계를 벗어나는 것을 의미하기 때문에주의가 필요합니다.

다음은 관리되는 코드에 대한 다른 무료 설명입니다.

  • CLR에 의해 실행되는 코드.
  • .NET 프레임 워크의 기초 인 공통 언어 런타임을 대상으로하는 코드를 관리 코드라고합니다.
  • 관리되는 코드는 CLR이 메모리 관리, 교차 통합, 코드 액세스 보안 및 자동 수명 제어와 같은 서비스를 제공하는 데 필요한 메타 데이터를 제공합니다. IL을 기반으로 한 모든 코드는 관리 코드로 실행됩니다.
  • CLI 실행 환경에서 실행되는 코드.

당신의 문제를 위해 :

Nunit이 UnitTesting을위한 코드를 실행하고 관리가없는 일부를 가질 수 있기 때문이라고 생각합니다. 그러나 나는 그것에 대해 확실하지 않으므로 이것을 금으로 가져 가지 마십시오. 누군가가 당신에게 그것에 대해 더 많은 정보를 줄 수있을 것이라고 확신합니다. 도움이되기를 바랍니다!

다른 팁

이것 주제에 대한 좋은 기사입니다.

요약,

  1. 관리 코드 기계 코드가 아니라 기계의 일부 서비스에 의해 해석되고 실행되는 중간 언어로 편집되므로 메모리와 스레드와 같은 위험한 것들을 처리하는 (희망적으로!) 보안 프레임 워크 내에서 작동하고 있습니다. 현대의 사용에서 이것은 종종 .NET를 의미하지만 필요하지 않습니다.

동일한 시스템에 설치된 런타임 엔진 내에 실행되는 응용 프로그램 프로그램. 응용 프로그램은 IT 없이는 실행할 수 없습니다. 런타임 환경은 프로그램이 사용하고 일반적으로 메모리 관리를 수행하는 일반 소프트웨어 루틴 라이브러리를 제공합니다. 또한 소스 코드에서 실행 가능한 코드로 또는 중간 언어에서 실행 가능한 코드로 변환 할 수 있습니다. Java, Visual Basic 및 .NET의 CLR (Common Language Runtime)은 런타임 엔진의 예입니다. (더 읽으십시오)

  1. 관리되지 않는 코드 기계 코드로 컴파일되므로 OS에 의해 직접 실행됩니다. 따라서 관리 코드가 손상/강력한 작업을 수행 할 수있는 능력이 있습니다. 이것은 모든 것이 작동하는 방식이므로 일반적으로 .dlls와 같은 오래된 것들과 관련이 있습니다.

그 자체로 실행되는 실행 프로그램. 운영 체제에서 시작된이 프로그램은 운영 체제의 소프트웨어 루틴을 요구하고 사용하지만 다른 소프트웨어 시스템을 사용하지 않아도됩니다. 기계 언어로 조립 된 어셈블리 언어 프로그램 및 특정 플랫폼에 대해 기계 언어로 편집 된 C/C ++ 프로그램은 관리되지 않는 코드의 예입니다.더 읽으십시오)

  1. 토종의 코드는 종종 관리되지 않는 것과 동의어이지만 동일하지는 않습니다.

당신이 생각할 때 관리되지 않습니다, 기계 별 기계 수준 코드를 생각하십시오. x86 어셈블리 언어처럼. 관리되지 않은 (기본) 코드는 컴파일되고 링크되어 현재 모든 OS 항목을 제외하고 디자인 된 프로세서에서 직접 실행되도록 연결됩니다. 휴대용은 아니지만 빠릅니다. 매우 간단하고 다운 코드.

관리 코드는 Java에서 오래된 해석 기본 또는 .NET에서 실행되는 모든 것입니다. 관리 코드는 일반적으로 중간 레벨 P 코드 또는 바이트 코드 세트로 컴파일됩니다. 이들은 어셈블리 언어와 비슷해 보이지만 기계 별 지침은 아닙니다. 관리되는 코드는 실행중인 기계에서 프로그램을 절연하고 모든 메모리가 간접적으로 할당되는 보안 경계를 만듭니다. 일반적으로 말하면 포트, 메모리 주소 공간, 스택 등과 같은 기계 자원에 직접 액세스 할 수 없습니다. 아이디어는보다 안전한 환경에서 실행하는 것입니다.

관리되는 변수에서 관리가없는 변수로 변환하려면 실제 객체 자체로 이동해야합니다. 아마도 일부 추가 포장으로 포장되거나 박스화되었을 것입니다. 32 비트 머신에서 관리되지 않는 변수 ( 'int'와 같은 'int')는 정확히 4 바이트를 가져옵니다. 오버 헤드 나 추가 포장이 없습니다. 관리에서 관리되지 않는 코드로가는 과정을 다시 돌아옵니다.마샬링". 프로그램이 경계를 넘을 수 있습니다.

가능한 한 몇 마디로 :

  • 관리 코드 = .NET 프로그램
  • 관리되지 않는 코드 = "정상"프로그램

기본적으로 관리되지 않는 코드는 .NET CLR (vb.net, c#등)에서 실행되지 않는 코드입니다. 내 생각에 Nunit에는 .NET 코드 (일명 C ++)가 아닌 러너/래퍼가 있다고 생각합니다.

관리 코드 :
공통 언어 런타임과 "협력 계약"에 따라 실행되는 코드. 관리되는 코드는 메모리 관리, 교차 통합, 코드 액세스 보안 및 객체의 자동 수명 제어와 같은 서비스를 제공하기 위해 런타임에 필요한 메타 데이터를 제공해야합니다. MSIL (Microsoft Intermediate Language)을 기반으로 한 모든 코드는 관리 코드로 실행됩니다.

관리되지 않은 코드 :
공통 언어 런타임의 규칙 및 요구 사항을 고려하지 않고 생성되는 코드. 관리되지 않는 코드는 최소한의 서비스 (예 : 쓰레기 수집, 제한 디버깅 등)로 공통 언어 런타임 환경에서 실행됩니다.

참조: http://www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx

NUNIT는 별도의 앱 도메인에 단위 테스트를로드하고 진입 점을 호출하지 않는다고 가정하므로 입력 어셈블리는 NULL입니다.

관리 코드는 c#.net, vb.net, f#.net 등 컴파일러가 만든 것입니다. CLR에서 실행되며, 무엇보다도 Garbage Collection 및 Reference Checking 등의 서비스를 제공합니다. 내 코드는 CLR에 의해 관리됩니다.

반면에, 관리되지 않습니다 코드는 기계 코드로 바로 컴파일됩니다. CLR에 의해 관리되지 않습니다.

CLR .NET Runtime의 환경 내부에서 관리되는 코드는 실행됩니다. 짧은 IL은 모든 IL이 관리되는 코드입니다. 그러나 일부 타사 소프트웨어 예제 VB6 또는 VC ++ 구성 요소를 사용하는 경우 .NET 런타임 (CLR)이 제어되지 않으므로 관리되지 않은 코드입니다. 언어의 소스 코드 실행에 대해

관리 코드 :- 언어 컴파일러 컴파일 후에 MSIL (중간 언어) 양식이 개발되고 직접 실행되는 코드 CLR 관리 코드라고합니다. 예 :- .NET 프레임 워크에서 지원되는 61 개의 언어 코드 모두

관리되지 않는 코드 :- 이전에 개발 한 코드 .net MSIL 양식을 사용할 수없고 실행됩니다. CLR 오히려 직접 CLR 운영 체제로 리디렉션됩니다. 이것은 관리되지 않는 코드라고합니다.

EG : -com, Win32 API

  • 관리 코드 : c#, vb.net과 같은 .NET 언어로 작성된 코드.
  • 관리되지 않습니다 코드 : 코드가 .NET 언어로 작성되지 않은 코드 및 MSIL은 그것이 무엇인지 이해하지 못하고 CLR에서 실행할 수 없습니다. .NET 언어로 생성되지 않은 .NET 응용 프로그램에서 사용한 타사 컨트롤과 마찬가지로.

우선, 전에는 이것을 이해합니다 .NET framework, Microsoft 독립형 제품을 제공하고있었습니다 MFC (Visual C++), VB, FoxPro 등.

2002 년 Microsoft는 제품을 결합하여 .NET 프레임 워크를 만들었습니다. 이제 코드가 이전에 실행되는 방식과 .NET 프레임 워크에서 코드를 관리하고 실행하는 방법에는 차이가 있습니다. Microsoft는 개념을 소개했습니다 CLR .NET 프레임 워크의 지원되는 Lanugague에서 나오는 코드를 컴파일하는 .NET Framework를 사용하여 다음과 같은 추가 기능을 제공합니다. memory mangement, garbage collection 그러나 이러한 CLR 기능은 직전에 제공되지 않았습니다.

따라서 .NET Framework (CLR로 컴파일)에서 라이브러리/코드를 작성하는 경우 Managed code. 다른 .NET 응용 프로그램/프로젝트 에서이 라이브러리를 더 사용할 수 있으며 CLR은 이전에 컴파일 된 방법을 이해할 수 있으므로 관리 코드가 남아 있습니다.

OTOH .NET Framework 이전에 작성된 라이브러리를 사용하려면 특정 제한 사항으로 수행 할 수 있지만 CLR이 없었기 때문에 CLR 은이 코드를 다시 이해하고 컴파일하지 않기 때문에 기억하십시오. . 그리고 이것은 호출 될 것입니다 unmanaged code. 특정 기능/도구를 제공하기 위해 일부 제 3자가 작성한 라이브러리/어셈블리는 CLR Compatiblie가 아닌 경우 관리 코드로 간주 될 수 있습니다.

평신도 용어로 코드 관리 CLR이 이해하고 추가 실행을 위해 자체적으로 컴파일 할 수있는 것입니다. .NET Framework (.NET 프레임 워크에서 작동하는 모든 언어에서)에서 코드가 CLR로 이동하면 코드가 일부 메타 데이터 정보를 제공하므로 CLR이 지정된 기능을 제공 할 수 있습니다. 여기. 그들 중 거의 Garbage collection, Performance improvements, cross-language integration, memory management 등.

오토, 받은 코드 기계와 관련이 있고 사용할 준비가되어 있으며 더 처리 할 필요가 없습니다.

Pro C# 5 및 .NET 4.5 프레임 워크에서 :

관리 대 관리 코드 :C# 언어에 대해 이해하는 가장 중요한 점은 .NET 런타임 내에서만 실행할 수있는 코드를 생성 할 수 있다는 것입니다 (C#을 사용하여 기본 COM 서버 또는 관리되지 않는 C/C ++ 응용 프로그램을 구축 할 수는 없습니다). 공식적으로 말하면 .NET 런타임을 타겟팅하는 코드를 설명하는 데 사용되는 용어는 관리되는 코드입니다. 관리 코드가 포함 된 이진 장치는 어셈블리라고합니다 (어셈블리에 대한 자세한 내용은 조금만). 반대로 .NET 런타임으로 직접 호스팅 할 수없는 코드를 관리하지 않는 코드라고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top