Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De volgende fouten worden gegenereerd wanneer brongeneratoren of interceptors worden geladen tijdens een compilatie:
-
CS9137: De experimentele functie 'interceptors' is niet ingeschakeld. Voeg dit toe
<Features>InterceptorsPreview</Features>aan uw project. - CS9138: Methode kan niet worden gebruikt als een interceptor omdat deze methode of het type waartoe het behoort typeparameters heeft.
- CS9139: Kan niet onderscheppen: compilatie bevat geen bestand met een specifiek pad.
- CS9140: Kan niet onderscheppen: compilatie bevat geen bestand met pad. Wilde u een ander pad gebruiken?
- CS9141: Het opgegeven regel- en tekennummer verwijst niet naar de naam van een onderschepte methode, maar naar een token.
-
CS9142: Het opgegeven bestand bevat
nregels, die kleiner zijn dan het opgegeven regelnummerm. -
CS9143: De opgegeven regel is
ctekens lang, die kleiner zijn dan het opgegeven tekennummern. -
CS9144: Kan methode
Mniet intercepteren met interceptorVomdat de handtekeningen niet overeenkomen. - CS9145: Kan niet onderscheppen: Pad is niet in kaart gebracht. Verwacht in kaart gebracht pad.
- CS9146: Een interceptormethode moet een gewone lidmethode zijn.
-
CS9147: Het opgegeven regel- en tekennummer verwijst niet naar het begin van een token. Wilde je lijn
nen tekencgebruiken? -
CS9148: Interceptor moet een parameter hebben die overeenkomt met parameters
this. -
CS9149: Interceptor mag geen parameter hebben
thisomdat de methode geen parameter heeftthis. -
CS9150: Interceptor kan geen bestandspad hebben
null. -
CS9151: Mogelijke methodenaam
Mkan niet worden onderschept omdat deze niet wordt aangeroepen. - CS9152: Kan een aanroep in bestand niet onderscheppen met dit pad omdat meerdere bestanden in de compilatie dit pad hebben.
- CS9153: De aangegeven oproep wordt meerdere keren onderschept.
-
CS9155: Kan de oproep niet onderscheppen
Momdat deze niet toegankelijk is binnenV. -
CS9156: Kan de aanroep naar
Mniet onderscheppen metVvanwege een verschil in 'scoped'-modifiers of[UnscopedRef]-kenmerken. -
CS9157: De opgegeven
InterceptsLocationAttributeregel- en tekennummers moeten positief zijn. - CS9160: Een operatornaam kan niet worden onderschept.
-
CS9161: Een interceptor kan niet worden gemarkeerd met
UnmanagedCallersOnlyAttribute. - CS9177: Interceptor moet niet-generiek zijn of overeenkomende ariteit hebben.
- CS9178: Methode moet niet-algemeen zijn om overeen te komen
- CS9206: Een interceptor kan niet worden gedeclareerd in de globale naamruimte.
- CS9207: Kan niet onderscheppen omdat de methode geen aanroep van een gewone lidmethode is.
- CS9231: Het gegevensargument voor InterceptsLocationAttribute heeft niet de juiste indeling.
- CS9232: Versie 'versie' van het interceptorformaat wordt niet ondersteund. De meest recente ondersteunde versie is '1'.
- CS9233: Kan een aanroep in bestand 'bestand' niet onderscheppen omdat deze elders in de compilatie wordt gedupliceerd.
- CS9234: Kan een aanroep in bestand 'bestand' niet onderscheppen omdat er geen overeenkomend bestand is gevonden in de compilatie.
- CS9235: Het gegevensargument voor InterceptsLocationAttribute verwijst naar een ongeldige positie in bestand 'bestand'.
De volgende waarschuwingen worden gegenereerd wanneer brongeneratoren of interceptors worden geladen tijdens een compilatie:
-
CS8784: Generator '
YourSourceGeneratorName' kan niet worden geïnitialiseerd. Het draagt niet bij aan de uitvoer- en compilatiefouten als gevolg hiervan. -
CS8785: Generator '
YourSourceGeneratorName' kan geen bron genereren. Het draagt niet bij aan de uitvoer- en compilatiefouten als gevolg hiervan. - CS9057: Analyzer-assembly kan niet worden gebruikt omdat deze verwijst naar een nieuwere versie van de compiler dan de huidige actieve versie.
- CS9067: Analysereferentie die meerdere keren is opgegeven.
-
CS9154: Een oproep naar
Monderscheppen met de interceptorV, maar de signaturen komen niet overeen. - CS9158: Nullability van referentietypen in returntype komt niet overeen met de intercepteerbare methode.
- CS9159: De nullabiliteit van referentietypen in het type van de parameter komt niet overeen met de intercepteerbare methode.
-
CS9270: '
InterceptsLocationAttribute(string, int, int)' wordt niet ondersteund. Ga in plaats daarvan naar 'InterceptableLocation'-gebaseerde generatie van deze kenmerken. (https://github.com/dotnet/roslyn/issues/72133)
Deze fouten en waarschuwingen volgen deze thema's:
Interceptors zijn experimenteel
-
CS9137: De experimentele functie 'interceptors' is niet ingeschakeld. Voeg dit toe
<Features>InterceptorsPreview</Features>aan uw project.
Als u interceptors wilt gebruiken, voegt u het <Features>InterceptorsPreview</Features> element toe aan uw projectbestand in een <PropertyGroup> sectie (CS9137), omdat interceptors een experimentele functie zijn die niet standaard is ingeschakeld. Deze expliciete opt-in is vereist omdat de interceptorsfunctie onderhevig is aan belangrijke wijzigingen of verwijdering in toekomstige releases, en de compiler heeft bevestiging nodig dat u de risico's begrijpt voordat u het gebruik toestaat. Zie Interceptors in de documentatie over C# 12-functies voor meer informatie over interceptors en hun mogelijkheden.
Handtekening komt niet overeen
De volgende fouten en waarschuwingen geven een ongelijkheid aan tussen de interceptormethode en de intercepteerbare methode.
-
CS9144: Kan de methode
Mniet onderscheppen met interceptorVomdat de signaturen niet overeenkomen. -
CS9148: Interceptor moet een parameter hebben die overeenkomt met parameters
this. -
CS9149: Interceptor mag geen parameter hebben
thisomdat de methode geen parameter heeftthis. -
CS9155: Kan de oproep niet onderscheppen met
Momdat deze niet toegankelijk is binnenV. -
CS9156: Kan aanroep naar
Mniet onderscheppen metVvanwege een verschil in 'scoped' modifiers of[UnscopedRef]attributen. - CS9177]: Interceptor moet niet-algemeen zijn of overeenkomende arity hebben.
- CS9178: Methode moet niet-algemeen zijn om overeen te komen
Bovendien geven de volgende waarschuwingen een verschil aan in de handtekeningen van de interceptor en de intercepteerbare methode.
-
CS9154: Een aanroep naar
Monderscheppen met interceptorV, maar de signaturen komen niet overeen. - CS9158: Nullability van referentietypen in het retourtype komt niet overeen met de intercepteerbare methode.
- CS9159: Nullability van referentietypen in type van parameter komt niet overeen met de methode die onderschept kan worden.
-
CS9270: '
InterceptsLocationAttribute(string, int, int)' wordt niet ondersteund. Ga in plaats daarvan naar 'InterceptableLocation'-gebaseerde generatie van deze kenmerken. (https://github.com/dotnet/roslyn/issues/72133)
Om deze problemen op te lossen, moet u ervoor zorgen dat uw interceptormethode overeenkomt met de signature en toegangseisen van de te onderscheppen methode.
- Zorg ervoor dat de handtekening van de interceptormethode exact overeenkomt met de onderscheppingsmethode (CS9144, CS9154). De parametertypen, modifiers, volgorde en retourtype moeten identiek zijn. Controleer beide methodedeclaraties en lijn hun handtekeningen uit.
- Voeg een
thisparameter toe aan uw interceptor wanneer de onderscheppingsmethode een instantiemethode is (CS9148) of verwijder dethisparameter wanneer de onderscheppingsmethode statisch is (CS9149). Voor instantie-interceptors is eenthisparameter van het declaratietype vereist, terwijl statische interceptors er geen mogen hebben. - Declareer uw interceptor op een locatie waar de te onderscheppen methode toegankelijk is (CS9155). Als de intercepteerbare methode
internalis, moet de interceptor zich in dezelfde assembly bevinden. Als hetprivateis, moet de interceptor zich in hetzelfde type of een genest type bevinden. - Komen overeen met de
scopedmodifiers en[UnscopedRef]kenmerken van de bijbehorenderefparameters (CS9156). Elkerefparameter in de interceptor moet dezelfde levensduuraantekeningen hebben als de bijbehorende parameter in de onderschepte methode om geheugenveiligheid te garanderen. - Zorg ervoor dat beide methoden overeenkomen met algemene arity (CS9177, CS9178). Als de onderscheppingsmethode niet-generiek is, moet de interceptor ook niet-generiek zijn. Als de snijpuntmethode typeparameters heeft, moet de interceptor hetzelfde aantal typeparameters met compatibele beperkingen hebben.
- Zorg ervoor dat de null-waardenannotaties in het retourtype (CS9158) en de parametertypen (CS9159) overeenkomen. Schakel nullbare referentietypen in uw project in en zorg ervoor dat de annotaties voor de nullbaarheid van de interceptor exact overeenkomen met de onderschepte methode om de typestrictheid te waarborgen.
- Gebruik de op
InterceptableLocationgebaseerde bijgewerkte generatie voorInterceptsLocationAttributein plaats van de afgeschafte(string, int, int)-constructor (CS9270). De nieuwere indeling biedt betere ondersteuning voor hulpprogramma's en compileertijdvalidatie. Zie het GitHub-probleem voor migratierichtlijnen.
Onjuiste toewijzing
Interceptors vereisen een bronmapping die de onderbreekbare methode en de interceptormethode verbindt. De volgende fouten duiden op een probleem met de mapping.
- CS9139: Kan niet onderscheppen: compilatie bevat geen bestand met een pad.
- CS9140: Kan niet onderscheppen: compilatie bevat geen bestand met pad. Wilde u een ander pad gebruiken?
- CS9141: Het opgegeven regel- en tekennummer verwijst niet naar de naam van een onderschepte methode, maar naar een token.
-
CS9142: Het opgegeven bestand bevat
nregels, die kleiner zijn dan het opgegeven regelnummerm. -
CS9143: De opgegeven regel is
ctekens lang, die kleiner zijn dan het opgegeven tekennummern. - CS9145: Kan niet onderscheppen: Pad is niet in kaart gebracht. Verwacht in kaart gebracht pad.
-
CS9147: Het opgegeven regel- en tekennummer verwijst niet naar het begin van een token. Wilde je lijn
nen tekencgebruiken? -
CS9150: Interceptor kan geen bestandspad hebben
null. -
CS9157: De opgegeven
InterceptsLocationAttributeregel- en tekennummers moeten positief zijn.
Als u toewijzingsfouten wilt corrigeren, moet u ervoor zorgen dat uw InterceptsLocationAttribute geldige bestandspaden en nauwkeurige positiegegevens bevat:
- Controleer of het bestandspad overeenkomt met een bestand in uw compilatie (CS9139, CS9140). Gebruik het exacte pad zoals het in uw project wordt weergegeven, inclusief de juiste behuizing en adreslijstscheidingstekens. Als de compiler een alternatief pad voorstelt, werkt u uw kenmerk bij om dat pad te gebruiken.
- Gebruik toegewezen bestandspaden bij het werken met brongeneratoren die bestandspaden transformeren (CS9145). Brongeneratoren wijzen vaak paden opnieuw toe voor gegenereerde bestanden en u moet het toegewezen pad gebruiken dat de compiler herkent, niet het oorspronkelijke bronpad.
- Zorg ervoor dat het bestandspad zich niet
nullin uwInterceptsLocationAttribute(CS9150) bevindt. Elke interceptie moet een geldig, niet-null-bestandspad opgeven waarmee het bronbestand wordt geïdentificeerd dat de aanroep bevat die moet worden onderschept. - Geef positieve, op 1 gebaseerde regel- en tekennummers (CS9157) op. Regelnummers en tekenposities moeten beginnen bij 1, niet bij 0. Controleer of uw brongenerator gebruikmaakt van indexering op basis van 1 bij het berekenen van posities.
- Wijs het exacte begin aan van het methodenaamtoken (CS9141, CS9147). De regel- en tekennummers moeten het eerste teken van de methodenaam in de aanroep identificeren, niet witruimte, operators of andere tokens. Als de compiler alternatieve coördinaten voorstelt, gebruikt u deze om het juiste token te starten.
- Blijf binnen de grenzen van het bestand (CS9142, CS9143). Controleer of het regelnummer niet groter is dan het totale aantal regels en of het tekennummer de regellengte niet overschrijdt. Bereken posities opnieuw als het bronbestand is gewijzigd sinds het kenmerk is gegenereerd.
Onjuiste interceptordeclaratie
De volgende fouten geven problemen aan met interceptordeclaraties, waaronder problemen met de InterceptsLocationAttribute formaat of schendingen van interceptorregels.
- CS9138: Methode kan niet worden gebruikt als een interceptor omdat deze of het omvattende type typeparameters heeft.
- CS9146: Een interceptormethode moet een gewone lidmethode zijn.
-
CS9151: Mogelijke methodenaam
Mkan niet worden onderschept omdat deze niet wordt aangeroepen. - CS9152: Kan een aanroep in bestand niet onderscheppen met dit pad omdat meerdere bestanden in de compilatie dit pad hebben.
- CS9153: De aangegeven oproep wordt meerdere keren onderschept.
- CS9160: Een operatornaam kan niet worden onderschept.
-
CS9161: Een interceptor kan niet worden gemarkeerd met
UnmanagedCallersOnlyAttribute. - CS9206: Een interceptor kan niet worden gedeclareerd in de globale naamruimte.
- CS9207: Kan niet onderscheppen omdat de methode geen aanroep van een gewone lidmethode is.
- CS9231: Het gegevensargument voor InterceptsLocationAttribute heeft niet de juiste indeling.
- CS9232: Versie 'versie' van het interceptorsformat wordt niet ondersteund. De meest recente ondersteunde versie is '1'.
- CS9233: Kan een aanroep in bestand 'bestand' niet onderscheppen omdat deze elders in de compilatie wordt gedupliceerd.
- CS9234: Kan een aanroep in bestand 'bestand' niet onderscheppen omdat er geen overeenkomend bestand is gevonden in de compilatie.
- CS9235: Het gegevensargument voor InterceptsLocationAttribute verwijst naar een ongeldige positie in bestand 'bestand'.
Als u interceptordeclaratiefouten wilt corrigeren, volgt u deze regels voor geldige interceptordeclaraties en het gebruik van InterceptsLocationAttribute.
- Maak het
InterceptsLocationAttributegegevensargument correct op (CS9231). Voor het kenmerk zijn specifiek gestructureerde gegevens vereist waarmee bestandspad- en positiegegevens worden gecodeerd. Zorg ervoor dat uw brongenerator gegevens produceert in de verwachte indeling die overeenkomt met de huidige interceptorsspecificatie. - Gebruik versie 1 in uw
InterceptsLocationAttribute(CS9232), omdat dit de meest recente ondersteunde versie is. Werk de brongenerator bij om attribuutformaten van versie 1 uit te geven in plaats van onondersteunde versienummers. - Zorg voor unieke bestandspaden in uw compilatie (CS9233, CS9234). Wanneer de compilatie dubbele bestandspaden bevat, wijzigt u de naam of rangschikt u bestanden om elk pad uniek te maken. Controleer of het bestandspad in het kenmerk overeenkomt met een bestand dat daadwerkelijk is opgenomen in de compilatie.
- Positiegegevenspunten valideren naar geldige codelocaties (CS9235). De regel- en tekennummers moeten verwijzen naar een geldig snijpunt binnen het opgegeven bestand. Genereer het kenmerk opnieuw als het bronbestand is gewijzigd of als de positie buiten de grenzen van het bestand valt.
- Declareer niet-generieke interceptormethoden in niet-algemene typen (CS9138). Interceptors kunnen geen typeparameters hebben bij de methode zelf of bij het bij horende type. Als u een algemene methode wilt onderscheppen, maakt u een niet-generieke interceptor die werkt met het specifieke samengestelde type.
- Interceptor-methoden als gewone lidmethoden maken (CS9146). Interceptors kunnen geen operators, constructors, finalizers, eigenschappen of indexers zijn. Declareer uw interceptor als een gewone statische of instantiemethode.
- Onderschep werkelijke methode-aanroepen, geen expressies (CS9151, CS9207). U kunt alleen oproepen naar reguliere lidmethoden onderscheppen die worden aangeroepen. U kunt geen methodegroepen, delegaten of methoden onderscheppen waarnaar wordt verwezen zonder aangeroepen te worden. Zorg ervoor dat de te onderscheppen locatie een daadwerkelijke methodeaanroep identificeert.
- Dubbele interceptiepogingen verwijderen (CS9153). Elke methode-aanroep kan slechts eenmaal worden onderschept. Als meerdere
InterceptsLocationAttributeexemplaren op dezelfde aanroep zijn gericht, verwijdert u alles behalve één om de dubbelzinnigheid op te lossen. - Intercepteer
nameofoperators (CS9160) niet. Denameofoperator roept tijdens runtime geen methoden aan, zodat deze niet kan worden onderschept. Onderschep alleen werkelijke methode-aanroepen die tijdens runtime worden uitgevoerd. - Verwijder
UnmanagedCallersOnlyAttributevan de interceptors (CS9161). Interceptors moeten kunnen worden aangeroepen vanuit beheerde code en kunnen niet worden gemarkeerd metUnmanagedCallersOnlyAttribute. Verwijder het kenmerk uit de declaratie van de interceptormethode. - Declareer interceptors binnen een naamruimte (CS9206). Interceptors kunnen niet worden gedeclareerd in de globale naamruimte en moeten zich in ten minste één naamruimtedeclaratie bevinden. Verpakt uw interceptorklasse in een naamruimte.
- Dubbele bestandspaden oplossen op compilatieniveau (CS9152). Wanneer meerdere bestanden hetzelfde pad in de compilatie delen, kan de compiler niet bepalen in welk bestand moet worden onderschept. Zorg ervoor dat de buildconfiguratie unieke bestandspaden produceert of gebruik een andere organisatiestrategie voor uw bronbestanden.
Analysecompatibiliteit
De volgende waarschuwingen duiden op problemen met analyse- of brongenerator-assemblages.
- CS9057: Analyzer-assembly kan niet worden gebruikt omdat deze verwijst naar een nieuwere versie van de compiler dan de huidige actieve versie.
- CS9067: Analysereferentie die meerdere keren is opgegeven.
Deze waarschuwingen treden op wanneer er compatibiliteitsproblemen zijn met analyzer-assemblages.
- CS9057 wordt gegenereerd wanneer een analyseassembly verwijst naar een versie van de Roslyn-compiler die nieuwer is dan de versie die momenteel wordt uitgevoerd. Hiermee voorkomt u dat de analyse wordt geladen omdat deze mogelijk afhankelijk is van API's of gedrag dat niet beschikbaar is in de huidige compilerversie. U kunt dit oplossen door uw compiler/SDK te upgraden om aan de vereisten van de analyzer te voldoen of een versie van de analyzer te gebruiken die compatibel is met uw huidige compilerversie.
- CS9067 waarschuwt wanneer naar dezelfde analyseassembly meerdere keren in uw project wordt verwezen. Dit gebeurt meestal wanneer een analyzer wordt opgenomen via meerdere paden of pakketreferenties. Hoewel er geen fout optreedt, kunnen dubbele verwijzingen van invloed zijn op de prestaties van de build en kan dit onverwacht gedrag veroorzaken. Verwijder de dubbele verwijzingen om deze waarschuwing op te lossen.