Ograniczenia aktywacji oparte na regułach

Jedną z typowych pojęć w programie VisualStudio.Extensibility jest użycie reguł aktywacji opartych na kontekście. Są to reguły, które określają warunki, w których rozszerzenie lub polecenie jest udostępniane użytkownikowi. Przykładem reguły aktywacji opartej na kontekście jest VisibleWhen właściwość w konfiguracji polecenia, która deklaruje, gdy polecenie jest widoczne.

Typy ograniczeń

Każde ograniczenie jest definiowane jako wystąpienie ActivationConstraint typu utworzonego przy użyciu jednej z ActivationConstraintmetod fabrycznych, takich jak ClientContext.

Wiele ograniczeń aktywacji można łączyć ze sobą przy użyciu Andmetod , Ori Not . Ograniczenia aktywacji można również łączyć przy użyciu operatorów &, |i !.

Przykładowa definicja

W poniższym przykładzie właściwość EnabledWhen konfiguracji polecenia określa, kiedy polecenie jest w stanie włączonym. Metoda ClientContext jest jedną z metod fabryki ograniczeń aktywacji. Generuje ograniczenie aktywacji, biorąc pod uwagę dwa argumenty, ciąg i wzorzec wyrażenia regularnego, aby dopasować się do tego ciągu. W związku z tym poniższy kod wskazuje, że polecenie jest włączone, gdy użytkownik wybrał plik z jednym z tych rozszerzeń.

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

Klasa ClientContextKey zawiera zakres informacji o stanie środowiska IDE, względem których można testować. Aby uzyskać tabelę wartości, zobacz Klucze kontekstu klienta.

W poniższym przykładzie pokazano, jak połączyć wiele ograniczeń:

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

lub, bardziej zwięźle, przy użyciu & operatora :

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

Właściwości ograniczenia aktywacji

Ograniczenia aktywacji mogą służyć do konfigurowania różnych funkcji VisualStudio.Extensibility, w tym ładowania rozszerzenia oraz stanu włączonego lub widocznego polecenia. Typy konfiguracji zawierają właściwość typu ActivationConstraint, zazwyczaj z sufiksem When , który oznacza, że coś aktywuje się, gdy określone warunki są spełnione.

Metody fabryki ograniczeń aktywacji

W tej sekcji przedstawiono listę aktualnie obsługiwanych ograniczeń aktywacji. Każdy wpis na liście jest metodą fabryki w typie ActivationConstraint .

Okres opis
ClientContext(<key>=ClientContextKey, <pattern>=<regex>) Wartość true, gdy podany klucz kontekstu klienta jest zgodny z wyrażeniem regularnym. Zobacz Klucze kontekstu klienta.
ActiveProjectCapability(<expression>=ProjectCapability) Prawda, gdy rozwiązanie ma projekt z możliwościami zgodnymi z podanym podrażeniem. Wyrażenie może być podobne do VB | CSharp. Aby uzyskać więcej informacji na temat możliwości projektu, zobacz Omówienie interfejsu API zapytań projektu.
ProjectAddedItem(<pattern>=<regex>) Termin ma wartość true, gdy plik pasujący do "wzorca" jest dodawany do projektu w otwartym rozwiązaniu.
SolutionHasProjectCapability(<expression>=ProjectCapability) Prawda, gdy rozwiązanie ma projekt z możliwościami zgodnymi z podanym podrażeniem. Wyrażenie może być podobne do VB | CSharp. Aby uzyskać więcej informacji na temat możliwości projektu, zobacz Omówienie interfejsu API zapytań projektu.
SolutionState(<state>=SolutionState) Prawda, gdy stan rozwiązania jest zgodny z podaną wartością, zobacz Stany rozwiązania, aby uzyskać listę wartości.

Ze względów zgodności obsługiwane są również następujące starsze ograniczenia aktywacji:

Okres opis
ActiveProjectBuildProperty(<property>=<regex>) Termin ma wartość true, gdy wybrany projekt ma określoną właściwość kompilacji, a wartość właściwości jest zgodna z podanym wzorcem wyrażenia regularnego.
ActiveProjectFlavor(<guid>) Wartość true zawsze, gdy wybrany projekt ma smak pasujący do podanego identyfikatora GUID typu projektu.
SolutionHasProjectBuildProperty(<property>=<regex>) Termin ma wartość true, gdy rozwiązanie ma załadowany projekt z określoną właściwością kompilacji i wartością właściwości pasuje do podanego filtru regex.
SolutionHasProjectFlavor(<guid>) Prawda, gdy rozwiązanie ma projekt o smaku (zagregowanym) i ma smak pasujący do danego identyfikatora GUID typu projektu.

Stany rozwiązania

Stan rozwiązania odnosi się do stanu rozwiązania i jego projektów, niezależnie od tego, czy rozwiązanie jest ładowane, czy ma zero, jeden, czy wiele projektów i czy jest kompilowany.

Ograniczenia aktywacji, które odpowiadają stanom rozwiązania, można łączyć w taki sam sposób, jak w przypadku innych ograniczeń aktywacji. Można na przykład połączyć ograniczenie aktywacji, które określa FullyLoaded rozwiązanie i SingleProject rozwiązanie do przechwytywania rozwiązań jednoprojektowych po ich pełnym załadowaniu.

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

Klucze kontekstu klienta

Reguły aktywacji mogą również używać zawartości kontekstu klienta jako części wyrażenia.

Obecnie kontekst klienta jest ograniczony do małego zestawu wartości w stanie IDE.