다음을 통해 공유


선언적 보안 특성 내보내기

동적 어셈블리와 해당 형식 및 메서드에 대한 선언적 보안 특성을 내보내는 것은 Ilasm.exe(MSIL 어셈블러)에 대한 .permission 및 .permissionset 선언을 코딩하거나 Visual Basic, C# 또는 C++ 소스 코드에 PermissionSetAttribute 특성을 적용하는 것과 기능 면에서 같습니다. 그러나 일부 버전의 .NET Framework에서는 내보낸 특성을 저장하는 데 사용되는 메타데이터 형식과 컴파일된 특성을 저장하는 데 사용되는 형식 간에 차이점이 있습니다.

선언적 보안의 메타데이터 형식

선언적 보안 특성을 저장하기 위한 새로운 메타데이터 형식은 ECMA 표준 2005년 개정판에서 원래 XML 형식에 대한 추가 사항으로 도입되었습니다. 자세한 내용은 ECMA Partition II 설명서 2005년 개정판의 22.11 단원에 나오는 DeclSecurity 표에서 PermissionSet blob에 대한 설명을 참조하십시오. 이 설명서는 온라인으로 검색할 수 있습니다. MSDN의 ECMA C# and Common Language Infrastructure Standards 및 ECMA 웹 사이트의 Standard ECMA-335 - Common Language Infrastructure (CLI)를 참조하십시오.

모든 버전의 .NET Framework에서 리플렉션 내보내기를 사용하여 적용된 선언적 보안은 이전의 메타데이터 형식으로 저장됩니다.

.NET Framework 버전 2.0에 포함된 Ilasm.exe(MSIL 어셈블러)와 언어 컴파일러를 사용하여 컴파일된 코드의 선언적 보안 권한은 새 형식으로 저장됩니다.

.NET Framework 버전 1.0 및 1.1에 포함된 Ilasm.exe(MSIL 어셈블러)와 언어 컴파일러를 사용하여 컴파일된 코드의 선언적 보안 권한은 이전 형식으로 저장됩니다.

선언적 보안 특성 내보내기

어셈블리, 형식, 메서드 및 생성자에 대해 선언적 보안 특성을 내보낼 수 있습니다. 다른 모든 멤버 형식의 경우 기본 메서드에 대한 선언적 보안이 내보내집니다.

중요중요

PermissionSetAttribute 개체를 만든 다음 SetCustomAttribute 메서드를 사용하여 이 개체를 동적 어셈블리, 형식 또는 메서드에 적용하는 방법으로는 선언적 보안 특성을 내보낼 수 없습니다.

  • 동적 어셈블리에 대한 선언적 보안을 내보내려면 필수 권한, 선택적 권한 및 거부된 권한이 들어 있는 별도의 PermissionSet 개체를 만듭니다. DefineDynamicAssembly 메서드의 적절한 오버로드에 이러한 권한 집합을 전달합니다. 범주에 적용할 권한이 없으면 해당 매개 변수에 null을 지정합니다.

    중요중요

    필수 권한, 선택적 권한 및 거부된 권한은 동적 어셈블리가 저장되고 메모리에 다시 로드된 경우나, 증명 정보와 요청된 권한을 지정하는 DefineDynamicAssembly 메서드의 오버로드를 사용하고 Evidence 개체를 제공할 경우에만 사용됩니다.자세한 내용은 DefineDynamicAssembly를 참조하십시오.

  • 동적 어셈블리의 형식, 메서드 및 생성자에 대한 선언적 보안을 내보내려면 적용할 각 SecurityAction에 대한 권한이 들어 있는 PermissionSet 개체를 만듭니다. 그런 다음 TypeBuilderAddDeclarativeSecurity 메서드(형식의 경우), ConstructorBuilderAddDeclarativeSecurity 메서드(생성자의 경우), MethodBuilderAddDeclarativeSecurity 메서드(메서드의 경우)를 사용하여 권한을 적용합니다.

    참고참고

    DynamicMethod 클래스를 사용하여 정의된 동적 메서드에는 선언적 보안이 지원되지 않습니다.

  • 다른 모든 속성 및 이벤트에 대한 선언적 보안을 내보내려면 MethodBuilderAddDeclarativeSecurity 메서드를 사용하여 하나 이상의 기본 메서드에 원하는 권한 집합을 적용합니다. 예를 들어, 속성에 대한 선언적 보안을 내보내려면 속성의 get 및 set 접근자 메서드에 선언적 보안을 적용합니다.

동적 어셈블리를 내보내는 코드를 개발할 때는 증명 정보와 권한을 지정하는 DefineDynamicAssembly 메서드의 오버로드를 사용하고 동적 어셈블리에 포함할 증명 정보를 제공한 다음 refusedPermissions에 SecurityPermissionFlag.SkipVerification를 포함하는 것이 좋습니다. SkipVerification을 거부하면 MSIL이 확인됩니다. 또한 이 기술을 완전 신뢰가 필요한 코드와 함께 사용할 경우에는 SecurityException이 throw된다는 한계가 있습니다.

참고 항목

참조

DefineDynamicAssembly

ConstructorBuilder

TypeBuilder

MethodBuilder

PermissionSet