Share via


규칙 기반 활성화 제약 조건

VisualStudio.Extensibility의 일반적인 개념 중 하나는 컨텍스트 기반 활성화 규칙을 사용하는 것입니다. 확장 또는 명령이 사용자에게 표시되는 조건을 제어하는 규칙입니다. 컨텍스트 기반 활성화 규칙의 예는 VisibleWhen 명령이 표시되면 선언하는 명령 구성의 속성입니다.

제약 조건 형식

각 제약 조건은 ClientContext과 같이 ActivationConstraint의 팩터리 메서드 중 하나를 사용하여 만든 ActivationConstraint 형식의 인스턴스로 정의됩니다.

And, Or, 그리고 Not 메서드를 사용하여 여러 활성화 제약 조건을 함께 결합할 수 있습니다. 연산자 &, |, 그리고 !를 사용하여 활성화 제약 조건을 결합할 수도 있습니다.

예제 정의

다음 예제에서 명령 구성 EnabledWhen 속성은 명령이 사용 상태일 때를 정의합니다. 이 ClientContext 메서드는 활성화 제약 조건 팩터리 메서드 중 하나입니다. 두 인수, 문자열 및 정규식 패턴이 해당 문자열과 일치하는 경우 활성화 제약 조건을 생성합니다. 따라서 다음 코드는 사용자가 해당 확장명 중 하나가 있는 파일을 선택한 경우 명령이 사용하도록 설정되어 있음을 나타냅니다.

public override CommandConfiguration CommandConfiguration => new("%My command.DisplayName%")
{
    EnabledWhen = ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveSelectionFileName, @"\.(jpg|jpeg|txt)$"),
};

이 클래스는 ClientContextKey 테스트할 수 있는 IDE 상태 정보의 범위를 제공합니다. 값 테이블의 경우 클라이언트 컨텍스트 키를 참조 하세요.

다음 예제에서는 여러 제약 조건을 결합하는 방법을 보여 줍니다.

EnabledWhen = ActivationConstraint.And(
    ActivationConstraint.SolutionState(SolutionState.Exists),
    ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),

또는 연산자를 사용하여 더 간결하게 다음을 수행합니다 & .

EnabledWhen =
    ActivationConstraint.SolutionState(SolutionState.Exists) &
    ActivationConstraint.ClientContext(ClientContextKey.Shell.ActiveEditorFileName, @"\.(jpg|jpeg|txt)$")),

활성화 제약 조건 속성

이 활성화 제약 조건을 사용하여 확장 로드 및 명령의 사용 또는 표시 상태를 포함하여 다양한 VisualStudio.Extensibility 기능을 구성할 수 있습니다. 구성 형식에는 일반적으로 지정된 조건이 충족될 때 활성화되는 것을 의미하는 When 접미사가 있는 ActivationConstraint형식의 속성이 포함됩니다.

활성화 제약 조건 팩터리 메서드

이 섹션에서는 현재 지원되는 활성화 제약 조건 목록을 보여 줍니다. 목록의 각 항목은 형식의 팩터리 ActivationConstraint 메서드입니다.

용어 설명
ClientContext(<key>=ClientContextKey, <pattern>=<regex>) 제공된 클라이언트 컨텍스트 키가 정규식과 일치하는 경우 True입니다. 클라이언트 컨텍스트 키를 참조 하세요.
ActiveProjectCapability(<Expression>=ProjectCapability) 솔루션에 제공된 하위 식과 일치하는 기능이 있는 프로젝트가 있을 때마다 True입니다. 식은 VB | CSharp와 같을 수 있습니다. 프로젝트 기능에 대한 자세한 내용은 Project 쿼리 API 개요를 참조하세요.
ProjectAddedItem(<pattern>=<regex>) 이 항은 열린 솔루션에서 프로젝트에 "패턴"과 일치하는 파일이 추가되는 경우 true입니다.
SolutionHasProjectCapability(<Expression>=ProjectCapability) 솔루션에 제공된 하위 식과 일치하는 기능이 있는 프로젝트가 있을 때마다 True입니다. 식은 VB | CSharp와 같을 수 있습니다. 프로젝트 기능에 대한 자세한 내용은 Project 쿼리 API 개요를 참조하세요.
SolutionState(<상태>=SolutionState) 솔루션 상태가 제공된 값과 일치하는 경우 True이면 값 목록에 대한 솔루션 상태를 참조하세요.

호환성을 위해 다음과 같은 레거시 활성화 제약 조건도 지원됩니다.

용어 설명
ActiveProjectBuildProperty(<속성>=<정규식>) 이 항은 선택된 프로젝트에 지정된 빌드 속성이 있고 속성 값이 제공된 regex 패턴과 일치하는 경우 true입니다.
ActiveProjectFlavor(<guid>) 선택한 프로젝트에 지정된 프로젝트 형식 GUID와 일치하는 버전이 있을 때마다 True입니다.
SolutionHasProjectBuildProperty(<속성>=<정규식>) 이 항은 솔루션에 지정된 빌드 속성을 가진 프로젝트가 로드되어 있고 속성 값이 제공된 regex 필터와 일치하는 경우 true입니다.
SolutionHasProjectFlavor(<guid>) 솔루션에 버전이 지정(집계)된 프로젝트가 있고 지정된 프로젝트 형식 GUID와 일치하는 버전이 있는 경우 항상 true입니다.

솔루션 상태

솔루션 상태는 솔루션 및 해당 프로젝트의 상태, 솔루션 로드 여부, 프로젝트가 0개, 1개 또는 여러 개 있는지 여부 및 빌드 여부를 나타냅니다.

솔루션 상태에 해당하는 활성화 제약 조건은 다른 활성화 제약 조건과 동일한 방식으로 결합할 수 있습니다. 예를 들어 FullyLoaded 솔루션과 SingleProject 솔루션을 지정 하는 활성화 제약 조건을 결합하여 단일 프로젝트 솔루션이 완전히 로드될 때 캡처할 수 있습니다.

this.EnabledWhen = ActivationConstraint.And(
    ActivationConstraint.SolutionState(SolutionState.SingleProject),
    ActivationConstraint.SolutionState(SolutionState.FullyLoaded));

Client context keys

활성화 규칙은 클라이언트 컨텍스트 콘텐츠를 식의 일부로 활용할 수도 있습니다.

현재 클라이언트 컨텍스트는 IDE 상태의 작은 값 집합으로 제한됩니다.