규칙 기반 활성화 제약 조건

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이면 값 목록에 대한 솔루션 상태를 참조하세요.
EditorContentType(<contentType>) 활성 편집기 콘텐츠 형식이 특정 콘텐츠 형식이거나 특정 콘텐츠 형식에서 상속되는 경우 True입니다.

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

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

솔루션 상태

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

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

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

Client context keys

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

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