형식 안전성 및 보안
형식이 안전한 코드를 사용하면 해당 코드에 액세스 권한이 부여된 메모리 위치에만 액세스할 수 있습니다. 여기에서 말하는 형식 안전성은 특히 메모리 형식 안전성을 나타내므로 보다 넓은 의미의 형식 안전성과 혼동해서는 안 됩니다. 예를 들어, 형식이 안전한 코드로는 다른 개체의 전용 필드에서 값을 읽을 수 없으며, 잘 정의된 허용 가능한 방식으로만 형식에 액세스할 수 있습니다.
JIT(Just-In-Time) 컴파일 도중, 선택적 확인 프로세스에서는 메서드의 메타데이터 및 MSIL(Microsoft Intermediate Language)이 네이티브 기계어 코드로 JIT 컴파일되는지 검사하여 형식 안전성을 확인합니다. 해당 코드에 확인을 건너뛸 수 있는 권한이 있으면 이 프로세스는 생략됩니다. 확인에 대한 자세한 내용은 관리되는 실행 프로세스를 참조하십시오.
관리 코드를 실행하기 위해 형식 안전성 확인이 반드시 필요한 것은 아니지만, 형식 안전성은 어셈블리 격리 및 보안 적용에 있어서 중요한 역할을 합니다. 코드의 형식 안전성이 확인되면 공용 언어 런타임에서 어셈블리를 완전히 격리시킬 수 있습니다. 이렇게 어셈블리를 격리시키면 어셈블리 간에 나쁜 영향을 서로 미치지 않게 되어 응용 프로그램의 안정성이 높아집니다. 형식이 안전한 구성 요소는 서로 다른 수준에서 신뢰된 경우에도 동일한 프로세스에서 안전하게 실행될 수 있습니다. 코드 형식이 안전하지 않으면 원치 않는 결과가 발생할 수 있습니다. 예를 들면, 비관리 코드가 비관리 네이티브 코드로 호출되어 부정적인 작업을 수행하는 것을 런타임에서 방지할 수 없습니다. 코드 형식이 안전하면 런타임의 보안 적용 메커니즘에서는 코드에 해당 권한이 있어야만 네이티브 코드에 액세스할 수 있도록 합니다. 형식이 안전하지 않은 코드를 모두 실행하려면 열거형 멤버인 SkipVerification이 전달되고 SecurityPermission이 있어야 합니다.