Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
nwiersze, które są mniejsze niż podany numermwiersza . -
CS9143: Podany wiersz ma długość
cznaków, czyli mniejsza niż podana liczba znakówn. -
CS9144: Nie można przechwycić metody
Mz przechwytnikiemV, 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 parametruthis. -
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ścieV. -
CS9156: Nie można przechwycić wywołania
MzVz powodu różnicy w modyfikatorach zakresu lub atrybutach[UnscopedRef]. -
CS9157: Numery linii i znaków podane do
InterceptsLocationAttributemuszą 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
Mza pomocą przechwytywaczaV, 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
InitializelubExecute, 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 asemblacji 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
DiagnosticAnalyzerlubISourceGenerator/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
ReflectionTypeLoadExceptionoznacza, ż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 (
.editorconfiglub.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
Mz przechwytnikiemV, 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 parametruthis. -
CS9155: Nie można przechwycić wywołania przy użyciu
M, ponieważ nie jest dostępne w środowiskuV. -
CS9156: Nie można przejąć wywołania metody
MzVz 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
Mza pomocą przechwytywaczaV, 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.
-
thisDodaj parametr do twojego przechwytywacza, gdy metoda, którą można przechwycić, jest metodą instancyjną (CS9148), lub usuń parametrthis, gdy metoda, którą można przechwycić, jest statyczna (CS9149). Przechwytywacze instancji wymagająthisparametru 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 toprivate, interceptor musi być w tym samym typie lub w typie zagnieżdżonym. - Dopasuj
scopedmodyfikatory i[UnscopedRef]atrybuty na odpowiednichrefparametrach (CS9156). Każdy parametrrefw 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
InterceptableLocationgeneracji opartej naInterceptsLocationAttributezamiast 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
nwiersze, które są mniejsze niż podany numermwiersza . -
CS9143: Podany wiersz zawiera
cznaków, co jest mniej niż przewidziana liczbanznakó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
InterceptsLocationAttributemuszą 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
nullwInterceptsLocationAttribute(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
InterceptsLocationAttributeargument 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
InterceptsLocationAttributewystąpień dotyczy tego samego wywołania, usuń wszystkie oprócz jednego, aby rozwiązać niejednoznaczność. - Nie przechwytuj
nameofoperatorów (CS9160). Operatornameofnie 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ń
UnmanagedCallersOnlyAttributez interceptorów (CS9161). Przechwytniki muszą być wywoływane z kodu zarządzanego i nie można ich oznaczyć za pomocą poleceniaUnmanagedCallersOnlyAttribute. 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.