Błędy i ostrzeżenia skojarzone z generatorami źródłowymi i przechwytatorami

Następujące błędy występują, gdy kompilator ładuje generatory źródłowe lub przechwytniki podczas kompilacji:

  • CS9137: Funkcja „przechwytywania” nie jest włączona w tej przestrzeni nazw. Dodaj element <Features>InterceptorsPreview</Features> do projektu.
  • CS9138: Metoda „method” nie może być używana jako interceptor, ponieważ typ, w którym jest zadeklarowana, ma parametry typu.
  • CS9139: Nie można przechwycić: kompilacja nie zawiera pliku ze ścieżką.
  • CS9140: Nie można przechwycić: kompilacja nie zawiera pliku o ścieżce „path”. Czy chodziło o ścieżkę „candidatePath”?
  • CS9141: Podany wiersz i numer znaku nie odnoszą się do nazwy metody przechwytowalnej, ale do tokenu "token".
  • CS9142: Podany plik zawiera n wiersze, które są mniejsze niż podany numer mwiersza .
  • CS9143: Podany wiersz ma długość c znaków, czyli mniejsza niż podana liczba znaków n.
  • CS9144: Nie można przechwycić metody M z przechwytnikiem V , ponieważ podpisy nie są zgodne.
  • CS9145: Nie można przechwycić: ścieżka jest niezmapowana. Oczekiwana mapowana ścieżka.
  • CS9146: Metoda przechwytywania musi być zwykłą metodą składową.
  • CS9147: Podany wiersz i numer znaku nie odwołują się do początku tokenu "token". Czy chodziło o użycie wiersza "n" i znaku "c"?
  • CS9148: Interceptor musi mieć parametr pasujący do parametru this .
  • CS9149: Interceptor nie może mieć parametru this , ponieważ metoda nie ma parametru this .
  • CS9150: Interceptor nie może zawierać null ścieżki pliku.
  • CS9151: Nie można przechwycić nazwy możliwej metody M, ponieważ nie jest ona wywoływana.
  • CS9152: Nie można przechwycić wywołania w pliku ze ścieżką "path", ponieważ wiele plików w kompilacji ma tę ścieżkę.
  • CS9153: Wskazane wywołanie jest wielokrotnie przechwytywane.
  • CS9155: Nie można przechwycić wywołania za pomocą M, ponieważ nie jest ono dostępne w kontekście V.
  • CS9156: Nie można przechwycić wywołania M z V z powodu różnicy w modyfikatorach zakresu lub atrybutach [UnscopedRef].
  • CS9157: Numery linii i znaków podane do InterceptsLocationAttribute muszą być dodatnie.
  • CS9160: Nie można przechwycić operatora nameof.
  • CS9161: Nie można oznaczyć przechwytnika znakiem UnmanagedCallersOnlyAttribute.
  • CS9177: Metoda „method” musi być niegeneryczna lub mieć arność „arity”, aby pasować do „target”.
  • CS9178: Metoda „method” nie może być generyczna, aby odpowiadać elementowi „target”.
  • CS9206: Nie można zadeklarować przechwytnika w globalnej przestrzeni nazw.
  • CS9207: Nie można przechwycić metody "method", ponieważ nie jest to wywołanie zwykłej metody składowej.
  • CS9231: Argument danych interceptsLocationAttribute nie jest w poprawnym formacie.
  • CS9232: Wersja "version" formatu interceptorów nie jest obsługiwana. Najnowsza obsługiwana wersja to "1".
  • CS9233: Nie można przechwycić wywołania w pliku "file", ponieważ jest zduplikowany w innym miejscu kompilacji.
  • CS9234: Nie można przechwycić wywołania w pliku "file", ponieważ pasujący plik nie został znaleziony w kompilacji.
  • CS9235: Argument danych dla InterceptsLocationAttribute odwołuje się do nieprawidłowej pozycji w pliku "file".

Następujące ostrzeżenia występują, gdy kompilator ładuje generatory źródłowe lub przechwytniki podczas kompilacji:

  • CS8032: Nie można utworzyć instancji analizatora „analyzer” na podstawie „assembly”: „reason”.
  • CS8033: Zestaw "assembly" nie zawiera żadnych analizatorów.
  • CS8034: Nie można załadować zestawu analizatora "assembly": "reason"
  • CS8040: Pomijanie niektórych typów w zestawie analizatora „assembly” z powodu wyjątku ReflectionTypeLoadException: „exception”.
  • CS8700: Wiele plików konfiguracji analizatora nie może znajdować się w tym samym katalogu ('katalog').
  • CS8784: Nie można zainicjować generatora „generator”. Nie będzie on miał wpływu na dane wyjściowe, a w rezultacie mogą wystąpić błędy kompilacji. Wystąpił wyjątek typu „exception” z komunikatem „message”.
  • CS8785: Generator „generator” nie wygenerował kodu źródłowego. Nie będzie on uwzględniony w danych wyjściowych, co może spowodować błędy kompilacji. Wystąpił wyjątek typu „exception” z komunikatem „message”.
  • CS8850: Zestaw „assembly” zawierający typ „type” odwołuje się do platformy .NET Framework, która nie jest obsługiwana.
  • CS9057: Nie można użyć zestawu analizatora "assembly", ponieważ odwołuje się do wersji "version" kompilatora, który jest nowszy niż obecnie uruchomiona wersja "currentVersion".
  • CS9067: Odwołanie do analizatora „reference” określono wielokrotnie
  • CS9154: Przechwytywanie wywołania M za pomocą przechwytywacza V, ale podpisy nie są zgodne.
  • CS9158: Wartość null typów odwołań w typie zwracanym nie jest zgodna z metodą przechwytywania.
  • CS9159: Wartość null typów odwołań w typie parametru nie jest zgodna z metodą przechwytywania.
  • CS9270: "InterceptsLocationAttribute(string, int, int)" nie jest obsługiwany. Zamiast tego przejdź do generowania atrybutów opartych na funkcji "InterceptableLocation". (https://github.com/dotnet/roslyn/issues/72133)

Te błędy i ostrzeżenia są zgodne z następującymi motywami:

Błędy generatora kodu źródłowego

  • CS8784: Nie można zainicjować generatora „generator”. Nie będzie on uwzględniany w danych wyjściowych, co może spowodować błędy kompilacji. Wystąpił wyjątek typu 'exception' z komunikatem 'message'.
  • CS8785: Generator „generator” nie zdołał wygenerować kodu źródłowego. Nie zostanie on uwzględniony w danych wyjściowych, a w rezultacie mogą wystąpić błędy kompilacji. Wystąpił wyjątek typu „exception” z komunikatem „message”.

Te ostrzeżenia wskazują, że generator kodu źródłowego zgłosił nieobsługiwany wyjątek podczas kompilacji. Generatory źródłowe działają jako część potoku kompilowania, a błąd uniemożliwia generatorowi dołączenie wygenerowanych danych wyjściowych do kompilacji. Aby uzyskać więcej informacji na temat implementowania generatorów źródeł, zobacz Generatory źródeł.

Aby poprawić te ostrzeżenia, postępuj zgodnie z poniższymi wskazówkami:

  • Sprawdź pełne szczegóły wyjątku w danych wyjściowych kompilacji, aby zidentyfikować główną przyczynę (CS8784, CS8785). Komunikat ostrzegawczy zawiera typ wyjątku, komunikat i ślad stosu, który może pomóc Tobie lub autorowi generatora zdiagnozować błąd.
  • Upewnij się, że wszystkie wymagane zależności dla generatora źródłowego są dostępne w projekcie (CS8784). Błędy inicjowania często występują, gdy generator nie może zlokalizować wymaganego zestawu lub zasobu podczas uruchamiania. Sprawdź, czy pakiet NuGet generatora jest poprawnie zainstalowany, a wszystkie przejściowe zależności zostały rozwiązane.
  • Zgłoś awarię opiekunowi generatora źródłowego, jeśli wyjątek pochodzi z kodu generatora innej firmy (CS8784, CS8785). Dołącz pełne szczegóły wyjątku z danych wyjściowych kompilacji w raporcie o błędach.
  • Jeśli jesteś autorem generatora źródłowego, dodaj obsługę wyjątków w metodach Initialize lub Execute, aby przechwytywać błędy i zgłaszać je w kontrolowany sposób (CS8784, CS8785).

Zgodność analizatora i generatora źródła

  • CS8032: Nie można utworzyć instancji analizatora „analyzer” z zestawu „assembly”: „reason”.
  • CS8033: Zestaw "assembly" nie zawiera żadnych analizatorów.
  • CS8034: Nie można załadować zestawu analizatora 'assembly' : 'reason'
  • CS8040: Pomijanie niektórych typów w asemblacji analizatora „assembly” z powodu wyjątku typu ReflectionTypeLoadException: „exception”.
  • CS8700: Wiele plików konfiguracji analizatora nie może znajdować się w tym samym katalogu ('katalog').
  • CS8850: Zestaw „assembly” zawierający typ „type” odwołuje się do platformy .NET Framework, która nie jest obsługiwana.
  • CS9057: Nie można użyć zestawu analizatora "assembly", ponieważ odwołuje się do wersji "version" kompilatora, który jest nowszy niż obecnie uruchomiona wersja "currentVersion".
  • CS9067: Odwołanie do analizatora „reference” zostało określone wielokrotnie

Te ostrzeżenia i błędy wskazują na problemy z ładowaniem, tworzeniem instancji lub konfigurowaniem zestawów analizatorów i generatorów źródłowych. Ponieważ generatory źródłowe ładują się jako zestawy analizatorów, ta diagnostyka ma zastosowanie zarówno do analizatorów, jak i generatorów źródłowych.

Aby rozwiązać te problemy, postępuj zgodnie z poniższymi wskazówkami:

  • Uaktualnij zestaw .NET SDK lub wersję kompilatora, aby spełnić wymagania analizatora, lub użyj starszej wersji pakietu analizatora zgodnego z bieżącym kompilatorem (CS9057). Ten błąd występuje, gdy zestaw analizatora jest przeznaczony dla nowszej wersji interfejsu API Roslyn niż zapewnia uruchomiony kompilator.
  • Usuń zduplikowane odwołania do analizatora ze swojego projektu (CS9067). Sprawdź plik projektu pod kątem powtarzających się elementów <Analyzer> lub <PackageReference>, które odwołują się do tej samej asemb­lacji analizatora przez różne ścieżki. Przejściowe zależności pakietów mogą również powodować duplikaty.
  • Sprawdź, czy zestaw analizatora jest prawidłowym zestawem .NET i nie jest uszkodzony (CS8034). Jeśli w ogóle nie można załadować zestawu, upewnij się, że plik istnieje w ścieżce przywoływanej i został utworzony dla zgodnej platformy docelowej. Ponownie skompiluj lub ponownie zainstaluj pakiet NuGet, aby uzyskać nową kopię.
  • Upewnij się, że typ analizatora ma publiczny konstruktor bez parametrów (CS8032). Kompilator tworzy instancje analizatorów, wywołując ich konstruktor domyślny. Jeśli konstruktor zgłasza wyjątek lub wymaga parametrów, nie można utworzyć analizatora.
  • Sprawdź, czy zestaw, do którego się odwołuje, faktycznie eksportuje typy analizatorów lub generatorów źródła (CS8033). Zestaw określany jako analizator musi zawierać typy implementujące DiagnosticAnalyzer lub ISourceGenerator/IIncrementalGenerator. Jeśli zestaw jest zależnością środowiska uruchomieniowego, a nie analizatorem, odwołaj się do niego jako zwykły projekt lub odwołanie do pakietu.
  • Rozwiąż problemy z ładowaniem typów w zestawie analizatora, upewniając się, że wszystkie jego zależności są dostępne (CS8040). Zazwyczaj ReflectionTypeLoadException oznacza, że zestaw odwołuje się do typów z innych zestawów, których nie można odnaleźć. Upewnij się, że wszystkie wymagane zależności znajdują się w pakiecie NuGet analizatora.
  • Upewnij się, że pliki konfiguracji analizatora (.editorconfig lub .globalconfig) są unikatowe dla każdego katalogu (CS8700). Kompilator nie zezwala na wiele plików konfiguracji analizatora w tym samym katalogu, ponieważ reguły pierwszeństwa byłyby niejednoznaczne. Scal pliki lub usuń duplikat.
  • Zaktualizuj analizator lub generator kodu źródłowego, aby był przeznaczony dla platformy .NET Standard lub nowoczesnego środowiska .NET zamiast wersji .NET Framework (CS8850). Zestawy odwołujące się do platformy .NET Framework nie są obsługiwane w nowoczesnym łańcuchu narzędzi kompilatora .NET. Jeśli utrzymujesz analizator, zmień jego platformę docelową na netstandard2.0. Jeśli jest to pakiet innej firmy, przeprowadź uaktualnienie do wersji obsługującej nowoczesne .NET.

Przechwytniki są eksperymentalne

  • CS9137: Funkcja „interceptorów” nie jest włączona w tej przestrzeni nazw. Dodaj <Features>InterceptorsPreview</Features> do swojego projektu.

Aby używać interceptorów, dodaj element <Features>InterceptorsPreview</Features> do pliku projektu w sekcji <PropertyGroup> (CS9137). Przechwytniki są funkcją eksperymentalną i nie są domyślnie włączone. Ta wyraźna zgoda jest wymagana, ponieważ funkcja interceptorów może podlegać niezgodnym zmianom lub zostać usunięta w przyszłych wydaniach. Kompilator wymaga potwierdzenia, że rozumiesz zagrożenia przed zezwoleniem na jego użycie. Aby uzyskać więcej informacji na temat interceptorów i ich możliwości, zobacz Interceptory w dokumentacji funkcji języka C# 12.

Niezgodność podpisu

Następujące błędy i ostrzeżenia wskazują niezgodność między metodą przechwytywania a metodą możliwą do przechwycenia.

  • CS9144: Nie można przechwycić metody M z przechwytnikiem V , ponieważ podpisy nie są zgodne.
  • CS9148: Interceptor musi mieć parametr pasujący do parametru this .
  • CS9149: Interceptor nie może mieć parametru this , ponieważ metoda nie ma parametru this .
  • CS9155: Nie można przechwycić wywołania przy użyciu M, ponieważ nie jest dostępne w środowisku V.
  • CS9156: Nie można przejąć wywołania metody M z V z powodu różnicy w modyfikatorach zakresowych lub [UnscopedRef] atrybutach.
  • CS9177: Metoda 'method' musi być niegeneryczna lub mieć arity 'arity', aby pasować do elementu 'target'.
  • CS9178: Metoda „method” nie może być generyczna, aby pasować do elementu „target”.

Ponadto następujące ostrzeżenia wskazują niezgodność podpisów między przechwytywaczem a przechwytywaną metodą.

  • CS9154: Przechwytywanie wywołania M za pomocą przechwytywacza V, ale sygnatury nie są zgodne.
  • CS9158: Nulowalność typów referencyjnych w typie zwracanym nie jest zgodna z przechwytywalną metodą.
  • CS9159: Nullowalność typów referencyjnych w typie parametru nie jest zgodna z metodą, którą można przechwycić.
  • CS9270: "InterceptsLocationAttribute(string, int, int)" nie jest obsługiwany. Zamiast tego przejdź do generowania atrybutów opartych na funkcji "InterceptableLocation". (https://github.com/dotnet/roslyn/issues/72133)

Aby rozwiązać te problemy, upewnij się, że metoda przechwytująca jest zgodna z podpisem i wymaganiami dostępu metody przechwytywalnej.

  • Upewnij się, że sygnatura metody przechwytywania dokładnie odpowiada metodzie przechwytywania (CS9144, CS9154). Typy parametrów, modyfikatory, kolejność i typ zwracany muszą być identyczne. Przejrzyj zarówno deklaracje metod, jak i dopasuj ich sygnatury.
  • this Dodaj parametr do twojego przechwytywacza, gdy metoda, którą można przechwycić, jest metodą instancyjną (CS9148), lub usuń parametr this, gdy metoda, którą można przechwycić, jest statyczna (CS9149). Przechwytywacze instancji wymagają this parametru typu deklarującego, podczas gdy statyczne przechwytywacze nie mogą mieć tego parametru.
  • Zadeklaruj przechwytywanie w lokalizacji, w której metoda przechwycona jest dostępna (CS9155). Jeśli metoda, którą można przechwycić, to internal, przechwytywacz musi znajdować się w tej samej bibliotece. Jeśli jest to private, interceptor musi być w tym samym typie lub w typie zagnieżdżonym.
  • Dopasuj scoped modyfikatory i [UnscopedRef] atrybuty na odpowiednich ref parametrach (CS9156). Każdy parametr ref w interceptorze musi mieć takie same adnotacje czasu istnienia jak odpowiedni parametr w metodzie przechwytywanej, aby zapewnić bezpieczeństwo pamięci.
  • Upewnij się, że obie metody mają pasującą liczbę parametrów ogólnych (CS9177, CS9178). Jeśli metoda możliwa do przechwycenia jest niegeneryczna, przechwytywacz musi być również niegeneryczny. Jeśli metoda, którą można przechwycić, ma parametry typu, przechwytujący musi mieć taką samą liczbę parametrów typu z zgodnymi ograniczeniami.
  • Dopasuj adnotacje dla wartości null w typie zwracanym (CS9158) i typach parametrów (CS9159). Włącz typy referencyjne dopuszczane do wartości null w projekcie i upewnij się, że adnotacje o wartości null przechwytywania są zgodne z metodą przechwytalną dokładnie w celu zachowania bezpieczeństwa typu.
  • Użyj zaktualizowanej InterceptableLocation generacji opartej na InterceptsLocationAttribute zamiast przestarzałego konstruktora (string, int, int) (CS9270). Nowszy format zapewnia lepszą obsługę narzędzi i walidację czasu kompilacji. Zobacz zgłoszenie GitHub , aby uzyskać wskazówki dotyczące migracji.

Nieprawidłowe mapowanie

Przechwytniki wymagają mapowania źródła mapowania metody przechwytowalnej i metody przechwytywania. Następujące błędy wskazują problem z mapowaniem:

  • CS9139: Nie można przechwycić: kompilacja nie zawiera pliku ze ścieżką.
  • CS9140: Nie można przechwycić: kompilacja nie zawiera pliku ze ścieżką "path". Czy chodziło o użycie ścieżki "candidatePath"?
  • CS9141: Podany wiersz i numer znaku nie odnoszą się do nazwy metody przechwytowalnej, ale do tokenu "token".
  • CS9142: Podany plik zawiera n wiersze, które są mniejsze niż podany numer mwiersza .
  • CS9143: Podany wiersz zawiera c znaków, co jest mniej niż przewidziana liczba n znaków.
  • CS9145: Nie można przechwycić: ścieżka jest niezmapowana. Oczekiwana jest zmapowana ścieżka.
  • CS9147: Podany wiersz i numer znaku nie odwołują się do początku tokenu "token". Czy chodziło o użycie wiersza "n" i znaku "c"?
  • CS9150: Interceptujący nie może mieć null ścieżki pliku.
  • CS9157: Liczby wierszy i znaków podane do InterceptsLocationAttribute muszą być dodatnie.

Aby poprawić błędy mapowania, upewnij się, że twój InterceptsLocationAttribute zawiera prawidłowe ścieżki plików i dokładne informacje o pozycji.

  • Sprawdź, czy ścieżka pliku pasuje do pliku w kompilacji dokładnie (CS9139, CS9140). Użyj dokładnej ścieżki tak, jak wyświetlana jest w projekcie, w tym prawidłowej wielkości liter i separatorów katalogów. Jeśli kompilator sugeruje alternatywną ścieżkę, zaktualizuj atrybut tak, aby używał tej ścieżki.
  • Użyj mapowanych ścieżek plików podczas pracy z generatorami źródłowymi, które przekształcają ścieżki plików (CS9145). Generatory źródeł często ponownie mapują ścieżki dla wygenerowanych plików, a należy użyć zmapowanej ścieżki rozpoznawanej przez kompilator, a nie oryginalnej ścieżki źródłowej.
  • Upewnij się, że ścieżka pliku nie jest null w InterceptsLocationAttribute (CS9150). Każde przechwycenie musi określać prawidłową ścieżkę pliku o wartości innej niż null, która identyfikuje plik źródłowy zawierający wywołanie przechwytywania.
  • Podaj dodatnie numery wierszy i znaków z początkiem od 1 (CS9157). Numery wierszy i pozycje znaków muszą zaczynać się od 1, a nie 0. Sprawdź, czy generator źródła używa indeksowania opartego na 1 podczas obliczania pozycji.
  • Wskaż dokładny początek tokenu nazwy metody (CS9141, CS9147). Numery wierszy i znaków muszą identyfikować pierwszy znak nazwy metody w wywołaniu, a nie spację, operatory lub inne tokeny. Jeśli kompilator sugeruje alternatywne współrzędne, użyj ich, aby kierować się na prawidłowy początek tokenu.
  • Pozostań w granicach pliku (CS9142, CS9143). Sprawdź, czy numer wiersza nie przekracza całkowitej liczby wierszy, a liczba znaków nie przekracza długości wiersza. Oblicz ponownie pozycje, jeśli plik źródłowy uległ zmianie od czasu wygenerowania atrybutu.

Nieprawidłowa deklaracja interceptora

Następujące błędy wskazują problemy z deklaracjami przechwytywania, w tym problemy z formatem InterceptsLocationAttribute lub naruszeniami reguł przechwytywania:

  • CS9138: Metoda 'method' nie może służyć jako interceptor, ponieważ typ zawierający tę metodę ma parametry typu.
  • CS9146: Metoda przechwytywania musi być zwykłą metodą składową.
  • CS9151: Nie można przechwycić nazwy potencjalnej metody M, ponieważ nie jest wywoływana.
  • CS9152: Nie można przechwycić wywołania w pliku ze ścieżką "path", ponieważ wiele plików w kompilacji ma tę ścieżkę.
  • CS9153: Wskazane wywołanie jest przechwytywane/interceptowane wiele razy.
  • CS9160: Nie można przechwycić operatora nameof.
  • CS9161: Nie można oznaczyć przechwytnika znakiem UnmanagedCallersOnlyAttribute.
  • CS9206: Nie można zadeklarować przechwytnika w globalnej przestrzeni nazw.
  • CS9207: Nie można przechwycić metody "method", ponieważ nie jest to wywołanie zwykłej metody składowej.
  • CS9231: Argument danych dla InterceptsLocationAttribute nie jest w poprawnym formacie.
  • CS9232: Wersja "version" formatu interceptorów nie jest obsługiwana. Najnowsza obsługiwana wersja to "1".
  • CS9233: Nie można przechwycić wywołania w pliku "file", ponieważ jest zduplikowane w innym miejscu kompilacji.
  • CS9234: Nie można przechwycić wywołania w pliku "file", ponieważ pasujący plik nie został znaleziony w kompilacji.
  • CS9235: Argument danych "InterceptsLocationAttribute" odnosi się do nieprawidłowej pozycji w pliku 'file'.

Aby poprawić błędy deklaracji przechwytywania, postępuj zgodnie z następującymi regułami dotyczącymi prawidłowych deklaracji przechwytywania i InterceptsLocationAttribute użycia:

  • Poprawnie sformatuj InterceptsLocationAttribute argument danych (CS9231). Atrybut wymaga specjalnie ustrukturyzowanych danych, które koduje ścieżkę pliku i informacje o pozycji. Upewnij się, że generator źródłowy generuje dane w oczekiwanym formacie zgodnym ze specyfikacją obecnych interceptorów.
  • Użyj wersji "1" w pliku InterceptsLocationAttribute (CS9232), ponieważ jest to najnowsza obsługiwana wersja. Zaktualizuj generator źródła, aby generował atrybuty w formacie wersji 1 zamiast nieobsługiwanych numerów wersji.
  • Upewnij się, że ścieżki plików w kompilacji są unikatowe (CS9233, CS9234). Gdy kompilacja zawiera zduplikowane ścieżki plików, zmień nazwę lub zreorganizowanie plików, aby każda ścieżka została unikatowa. Sprawdź, czy ścieżka pliku w atrybucie jest zgodna z plikiem zawartym w kompilacji.
  • Zweryfikuj dane dotyczące pozycji względem poprawnych lokalizacji kodu (CS9235). Numery wierszy i znaków muszą odwoływać się do prawidłowego punktu przechwytywania w określonym pliku. Wygeneruj ponownie atrybut, jeśli plik źródłowy uległ zmianie lub jeśli pozycja wykracza poza granice pliku.
  • Zadeklaruj niegeneryczne metody interceptorów w typach niegenerycznych (CS9138). Interceptorów nie można deklarować w typach, które mają parametry typu. Jeśli chcesz przechwycić metodę generyczną, utwórz interceptor niegeneryczny w niegenerycznym typie zawierającym, który działa z konkretnym typem skonstruowanym.
  • Uczyń interceptory zwykłymi metodami składowymi (CS9146). Przechwytywacze nie mogą być operatorami, konstruktorami, finalizatorami, właściwościami ani indeksatorami. Zadeklaruj swój interceptor jako regularną metodę statyczną lub metodę instancji.
  • Przechwyć wywołania metod rzeczywistych, a nie wyrażeń (CS9151, CS9207). Można przechwytywać wywołania tylko do zwykłych metod składowych, które są wywoływane. Nie można przechwytywać grup metod, delegatów ani metod, do których jest odwołanie bez ich wywołania. Upewnij się, że lokalizacja przechwycona identyfikuje rzeczywiste wywołanie metody.
  • Usuń zduplikowane próby przechwycenia (CS9153). Każde wywołanie metody można przechwycić tylko raz. Jeśli wiele InterceptsLocationAttribute wystąpień dotyczy tego samego wywołania, usuń wszystkie oprócz jednego, aby rozwiązać niejednoznaczność.
  • Nie przechwytuj nameof operatorów (CS9160). Operator nameof nie wywołuje metod w czasie wykonywania, więc nie można go przechwycić. Przechwytuje tylko rzeczywiste wywołania metod, które są wykonywane podczas działania programu.
  • Usuń UnmanagedCallersOnlyAttribute z interceptorów (CS9161). Przechwytniki muszą być wywoływane z kodu zarządzanego i nie można ich oznaczyć za pomocą polecenia UnmanagedCallersOnlyAttribute. Usuń atrybut z deklaracji metody interceptor.
  • Zadeklaruj przechwytniki w przestrzeni nazw (CS9206). Przechwytywacze nie mogą być zadeklarowane w globalnej przestrzeni nazw i muszą być zawarte w co najmniej jednej deklaracji przestrzeni nazw. Opakuj klasę interceptera w przestrzeni nazw.
  • Rozwiąż zduplikowane ścieżki plików na poziomie kompilacji (CS9152). Jeśli wiele plików współużytkuje tę samą ścieżkę w kompilacji, kompilator nie może określić, który plik ma zostać przechwycony. Upewnij się, że konfiguracja kompilacji tworzy unikatowe ścieżki plików lub użyj innej strategii organizacji dla plików źródłowych.