문제

부분 신뢰 환경에서 특정 .NET 코드 부분의 동작을 테스트하고 싶습니다.이것을 설정하는 가장 빠른 방법은 무엇입니까?나(그리고 다른 독자들)가 완전한 CAS 멍청이라고 가정해 보세요.

@건강 상태:답장을 보내 주셔서 감사합니다.아쉽게도 문제의 도구는 명시적으로 비관리 코드용입니다.내 질문에 "관리됨"이라고 말하지 않았으며 사람들이 ".NET" 태그에서 이를 추론할 것이라고 가정해서는 안 되었습니다.

도움이 되었습니까?

해결책

이는 특히 TDD 관점과 다양한 신뢰 시나리오에서 코드 유효성 검사의 관점에서 볼 때 훌륭한 질문입니다.

제가 이 문제에 접근하는 방식은 다음과 같을 것 같습니다.

  • PermissionSet를 전달할 수 있는 AppDomain.CreateDomain() 오버로드를 사용하여 TDD 코드에 AppDomain을 생성합니다.PermissionSet는 테스트하려는 다양한 신뢰 시나리오와 일치하도록 구성됩니다.

  • 테스트 중인 논리가 포함된 어셈블리를 앱 도메인에 로드합니다.

  • 앱 도메인에서 유형/호출 메소드 등의 인스턴스를 생성하고 보안 예외를 트랩합니다.

그런 것 좀요.아직 개념 증명을 완료할 시간이 없었습니다.

다른 팁

찾고 있는 기능은 Visual Studio에 내장되어 있습니다.

프로젝트의 보안 탭에는 완전 신뢰 또는 지정된 신뢰 수준에서 디버깅할지 여부를 구성할 수 있는 "고급 ..." 버튼이 있습니다.

사용 마이크로소프트 애플리케이션 검증자.

AppVerifier는 다음을 결정하는 데 도움이 됩니다.

  • 애플리케이션이 API를 올바르게 사용하는 경우:(안전하지 않은 TerminateThread API., TLS(Thread Local Storage) API의 올바른 사용. o 가상 공간 조작(예: VirtualAlloc, MapViewOfFile)의 올바른 사용.
  • 애플리케이션이 구조적 예외 처리를 사용하여 액세스 위반을 숨기고 있는지 여부입니다.
  • 애플리케이션이 유효하지 않은 핸들을 사용하려고 하는지 여부입니다.
  • 메모리 손상이나 힙 문제가 있는지 여부.
  • 리소스가 부족하여 애플리케이션의 메모리가 부족해지는지 여부입니다.
  • 중요한 섹션의 올바른 사용이 발생하고 있는지 여부.
  • 관리 환경에서 실행되는 애플리케이션이 더 적은 권한을 가진 환경에서도 잘 실행되는지 여부입니다.
  • 애플리케이션이 제한된 사용자로 실행될 때 잠재적인 문제가 있는지 여부.
  • 스레드 컨텍스트에서 향후 함수 호출에 초기화되지 않은 변수가 있는지 여부입니다.

.NET Framework 구성 도구를 살펴봐야 합니다..NET SDK에 있으며 여기에서 실행 지침을 찾을 수 있습니다.http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx

에서 런타임 보안 정책 섹션에는 3가지 정책 수준이 있습니다.기업, 기계 및 사용자.Machine 또는 User를 자세히 살펴보면 다음의 정의를 찾을 수 있습니다. 코드 그룹 그리고 권한 집합 .부분 신뢰 환경에서 일부 .NET 코드를 테스트한다고 말하면 다음과 같이 이미 정의된 표준 권한 집합 중 하나에 대해 테스트하고 싶을 것입니다. 인터넷 .당신은 코드 그룹 앱(또는 특정 어셈블리)과 일치하고 선택한 권한 집합을 해당 항목에 할당합니다. 코드 그룹 .

자신만의 사용자 정의를 정의할 수 있습니다. 권한 집합 하지만 지금은 간단하게 유지하겠습니다.

새 코드 그룹이 컴퓨터 전체 범위에 존재할지 아니면 사용자 계정에만 존재할지 선택하고 그에 따라 컴퓨터 또는 사용자 정책 수준을 자세히 살펴보세요._All _ Code_라는 코드 그룹이 표시됩니다.마우스 오른쪽 버튼을 클릭하고 선택하여 그 안에 하위 코드 그룹을 만듭니다. 새로운...

이름을 지어주세요. 부분신뢰그룹 을 클릭한 다음 다음 .

이 그룹에 대한 멤버십 조건을 지정해야 하며, 유형은 다양합니다.나는 다음과 같은 특정 폴더를 만들고 싶습니다. 부분신뢰 내 컴퓨터에서 일치하는 URL 멤버십 조건을 만듭니다.내 URL은 다음과 같습니다.파일://c:/users/martin/documents/partialtrust/*

*는 해당 경로 아래에 있는 어셈블리를 포착하는 와일드카드입니다.딸깍 하는 소리 다음 .

이제 새 코드 그룹에 대한 권한 집합을 선택할 수 있습니다.지금은 다음을 선택하세요. 인터넷 .이는 Java 애플릿 샌드박스와 유사하게 매우 제한적인 세트입니다.딸깍 하는 소리 다음 그리고 마치다 .

이제 새 코드 그룹을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오.일반 탭에서 맨 위 확인란이 선택되어 있는지 확인한 다음 확인을 클릭합니다.

이제 지정한 URL 아래 위치에서 로드되는 모든 .NET 어셈블리에는 인터넷 권한 집합이 적용되었습니다.축소된 권한 집합을 주의 깊게 관찰하기 위해 코드를 작성하지 않은 경우 일부 SecurityException이 발생할 수 있습니다.

죄송합니다. 설명이 너무 길어졌습니다.실제로는 생각보다 훨씬 간단합니다.

방금 ''라는 제목의 글을 올렸습니다. xUnit.net을 사용한 부분 신뢰 테스트 내 블로그에.중간 신뢰도에서 코드를 실행하기 위해 Entity Framework 팀에서 사용하는 xUnit.net 기반 프레임워크에 대해 자세히 설명합니다.

다음은 그 사용법의 예입니다.

public class SomeTests : MarshalByRefObject
{
    [PartialTrustFact]
    public void Partial_trust_test1()
    {
        // Runs in medium trust
    }
}

// Or...

[PartialTrustFixture]
public class MoreTests : MarshalByRefObject
{
    [Fact]
    public void Another_partial_trust_test()
    {
        // Runs in medium trust
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top