Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die folgenden Fehler treten auf, wenn der Compiler während der Kompilierung Quellgeneratoren oder Interceptors lädt:
-
CS9137: Das Feature "Interceptors" ist in diesem Namespace nicht aktiviert. Zu Ihrem Projekt hinzufügen
<Features>InterceptorsPreview</Features>. - CS9138: Die Methode "methode" kann nicht als Interceptor verwendet werden, da der enthaltende Typ Typparameter aufweist.
- CS9139: Die Kompilierung kann nicht abfangen: Die Kompilierung enthält keine Datei mit Pfad.
- CS9140: Abfangen nicht möglich: Die Kompilierung enthält keine Datei mit dem Pfad 'path'. Meinten Sie den Pfad 'candidatePath'?
- CS9141: Die angegebene Zeilen- und Zeichennummer verweist nicht auf den Namen einer abfangenden Methode, sondern auf das Token "token".
-
CS9142: Die angegebene Datei enthält
nZeilen, die kleiner als die angegebene Zeilennummermsind. -
CS9143: Die angegebene Zeile ist
cZeichen lang, was weniger als die angegebene Zeichenanzahlnist. -
CS9144: Die Methode
Mkann nicht mit dem InterceptorVabgefangen werden, da die Signaturen nicht übereinstimmen. - CS9145: Der Pfad kann nicht verarbeitet werden: Nicht zugeordnet. Erwarteter zugeordneter Pfad.
- CS9146: Eine Interceptor-Methode muss eine normale Membermethode sein.
- CS9147: Die angegebene Zeilen- und Zeichennummer bezieht sich nicht auf den Beginn von Token "token". Wollten Sie Zeile 'n' und Zeichen 'c' verwenden?
-
CS9148: Interceptor muss über einen
thisParameterabgleichsparameter verfügen. -
CS9149: Interceptor darf keinen Parameter haben
this, da die Methode keinen Parameter hatthis. -
CS9150: Interceptor kann keinen Dateipfad haben
null. -
CS9151: Der mögliche Methodenname
Mkann nicht abgefangen werden, da er nicht aufgerufen wird. - CS9152: Ein Aufruf in der Datei mit dem Pfad "Pfad" kann nicht abgefangen werden, da mehrere Dateien in der Kompilierung diesen Pfad aufweisen.
- CS9153: Der angegebene Aufruf wird mehrmals abgefangen.
-
CS9155: Der Anruf kann mit
Mnicht abgefangen werden, da er innerhalb vonVnicht zugänglich ist. -
CS9156: Der Aufruf zu
MmitVkann aufgrund eines Unterschieds bei bereichsbezogenen Modifizierern oder[UnscopedRef]-Attributen nicht abgefangen werden. -
CS9157: Zeilen- und Zeichennummern, die an
InterceptsLocationAttributeübergeben werden, müssen positiv sein. - CS9160: Ein Nameofoperator kann nicht abgefangen werden.
-
CS9161: Ein Interceptor kann nicht mit
UnmanagedCallersOnlyAttributemarkiert werden. - CS9177: Die Methode 'method' darf nicht generisch sein oder muss die Stelligkeit 'arity' aufweisen, um zu 'target' zu passen.
- CS9178: Die Methode "Methode" muss nicht generisch sein, um dem Ziel zu entsprechen.
- CS9206: Ein Interceptor kann nicht im globalen Namespace deklariert werden.
- CS9207: 'method' kann nicht abgefangen werden, da es sich nicht um einen Aufruf einer gewöhnlichen Membermethode handelt.
- CS9231: Das Datenargument "InterceptsLocationAttribute" weist nicht das richtige Format auf.
- CS9232: Version 'version' des Interceptor-Formats wird nicht unterstützt. Die neueste unterstützte Version ist '1'.
- CS9233: Ein Aufruf in der Datei "Datei" kann nicht abgefangen werden, da er an anderer Stelle in der Kompilierung dupliziert wird.
- CS9234: Ein Aufruf in der Datei "Datei" kann nicht abgefangen werden, da in der Kompilierung keine übereinstimmende Datei gefunden wurde.
- CS9235: Das Datenargument "InterceptsLocationAttribute" verweist auf eine ungültige Position in der Datei "Datei".
Die folgenden Warnungen treten auf, wenn der Compiler während der Kompilierung Quellgeneratoren oder Interceptors lädt:
- CS8032: Eine Instanz des Analyzers 'Analyzer' kann nicht aus 'Assembly' erstellt werden: 'Reason'.
- CS8033: Die Assembly 'assembly' enthält keine Analyzer.
- CS8034: Die Analyzer-Assembly 'assembly' kann nicht geladen werden: 'reason'
- CS8040: Einige Typen in der Analyzerassembly 'assembly' werden aufgrund einer ReflectionTypeLoadException übersprungen: 'exception'.
- CS8700: Mehrere Analysekonfigurationsdateien können nicht im selben Verzeichnis ('Verzeichnis') enthalten sein.
- CS8784: Generator "generator" konnte nicht initialisiert werden. Er trägt nicht zur Ausgabe bei, und infolgedessen können Kompilierungsfehler auftreten. Die Ausnahme war vom Typ 'exception' mit der Nachricht 'message'.
- CS8785: Generator 'generator' konnte keinen Quellcode generieren. Er wird nicht zur Ausgabe beitragen, und infolgedessen können Kompilierungsfehler auftreten. Es ist eine Ausnahme vom Typ 'exception' mit der Meldung 'message' aufgetreten.
- CS8850: Die Assembly 'assembly', die den Typ 'type' enthält, verweist auf .NET Framework, das nicht unterstützt wird.
- CS9057: Die Analyzerassembly "Assembly" kann nicht verwendet werden, da sie auf die Version "Version" des Compilers verweist, die neuer als die derzeit ausgeführte Version "currentVersion" ist.
- CS9067: Analysereferenz 'Reference' mehrmals angegeben
-
CS9154: Abfangen eines Anrufs
Mmit InterceptorV, die Signaturen stimmen jedoch nicht überein. - CS9158: Die Nullierbarkeit von Verweistypen im Rückgabetyp stimmt nicht mit der abfangenden Methode überein.
- CS9159: Die Nullierbarkeit von Verweistypen im Parametertyp stimmt nicht mit der abfangenden Methode überein.
-
CS9270: '
InterceptsLocationAttribute(string, int, int)' wird nicht unterstützt. Wechseln Sie stattdessen zu "InterceptableLocation"-basierten Generierung dieser Attribute. (https://github.com/dotnet/roslyn/issues/72133)
Diese Fehler und Warnungen folgen diesen Themen:
Fehler beim Quellgenerator
- CS8784: Generator 'generator' konnte nicht initialisiert werden. Er wird nicht zur Ausgabe beitragen, und infolgedessen können Kompilierungsfehler auftreten. Die Ausnahme war vom Typ 'exception' und hatte die Meldung 'message'.
- CS8785: Generator 'generator' konnte keinen Quellcode generieren. Er wird nicht zur Ausgabe beitragen, und infolgedessen können Kompilierungsfehler auftreten. Die Ausnahme war vom Typ 'exception' und hatte die Meldung 'message'.
Diese Warnungen deuten darauf hin, dass ein Quellgenerator während der Kompilierung eine unbehandelte Ausnahme ausgelöst hat. Quellgeneratoren werden als Teil der Buildpipeline ausgeführt, und ein Fehler verhindert, dass der Generator seine Ausgabe zur Kompilierung beiträgt. Weitere Informationen zur Implementierung von Quellgeneratoren finden Sie unter "Source Generators".
Gehen Sie wie folgt vor, um diese Warnungen zu korrigieren:
- Untersuchen Sie die vollständigen Ausnahmedetails in der Buildausgabe, um die Ursache zu identifizieren (CS8784, CS8785). Die Warnmeldung enthält den Ausnahmetyp, die Meldung und die Stapelablaufverfolgung, die Ihnen oder dem Generatorautor bei der Diagnose des Fehlers helfen kann.
- Stellen Sie sicher, dass alle erforderlichen Abhängigkeiten für den Quellgenerator im Projekt (CS8784) verfügbar sind. Initialisierungsfehler treten häufig auf, wenn der Generator während des Starts keine erforderliche Assembly oder Ressource finden kann. Stellen Sie sicher, dass das NuGet-Paket des Generators ordnungsgemäß installiert ist und alle transitiven Abhängigkeiten aufgelöst werden.
- Melden Sie den Fehler beim Betreuer des Quellgenerators, wenn die Ausnahme aus dem Code des Drittanbietergenerators (CS8784, CS8785) stammt. Schließen Sie die vollständigen Ausnahmedetails aus der Buildausgabe in Ihren Fehlerbericht ein.
- Wenn Sie den Quellengenerator geschrieben haben, fügen Sie in Ihren Methoden
InitializeoderExecuteeine Ausnahmebehandlung hinzu, um Fehler ordnungsgemäß abzufangen und zu melden (CS8784, CS8785).
Kompatibilität des Analyse- und Quellgenerators
- CS8032: Eine Instanz des Analyzers 'Analyzer' kann nicht aus 'Assembly' erstellt werden: 'Reason'.
- CS8033: Die Assembly 'assembly' enthält keine Analyzer.
- CS8034: Die Analyzerassembly 'Assembly' kann nicht geladen werden: 'Reason'
- CS8040: Einige Typen in der Analyzer-Assembly 'assembly' werden aufgrund einer ReflectionTypeLoadException übersprungen: 'exception'.
- CS8700: Mehrere Analysekonfigurationsdateien können nicht im selben Verzeichnis ('Verzeichnis') enthalten sein.
- CS8850: Die Assembly "assembly", die den Typ "type" enthält, verweist auf .NET Framework, was nicht unterstützt wird.
- CS9057: Die Analyzer-Assembly "assembly" kann nicht verwendet werden, da sie auf Version "version" des Compilers verweist, die neuer ist als die derzeit ausgeführte Version "currentVersion".
- CS9067: Analysereferenz 'Reference' mehrmals angegeben
Diese Warnungen und Fehler deuten auf Probleme beim Laden, Instanziieren oder Konfigurieren von Analyzer- und Quellgeneratorassemblys hin. Da Quellgeneratoren als Analyseassemblys geladen werden, gelten diese Diagnosen sowohl für Analyzer als auch für Quellgeneratoren.
Gehen Sie wie folgt vor, um diese Probleme zu beheben:
- Führen Sie ein Upgrade Ihrer .NET SDK- oder Compilerversion entsprechend den Anforderungen des Analyzers durch, oder verwenden Sie eine ältere Version des Analysepakets, die mit Ihrem aktuellen Compiler kompatibel ist (CS9057). Dieser Fehler tritt auf, wenn eine Analyseassembly auf eine neuere Roslyn-API-Version ausgerichtet ist, als der ausgeführte Compiler bereitstellt.
- Entfernen Sie doppelte Analyseverweise aus Ihrem Projekt (CS9067). Überprüfen Sie Ihre Projektdatei auf wiederholte
<Analyzer>- oder<PackageReference>-Elemente, die dieselbe Analysatorassembly über unterschiedliche Pfade einbinden. Transitive Paketabhängigkeiten können auch Duplikate verursachen. - Überprüfen Sie, ob die Analyseassembly eine gültige .NET-Assembly ist und nicht beschädigt ist (CS8034). Wenn die Assembly überhaupt nicht geladen werden kann, stellen Sie sicher, dass die Datei unter dem referenzierten Pfad vorhanden ist und für ein kompatibles Zielframework erstellt wurde. Erstellen Sie das NuGet-Paket neu, oder installieren Sie es erneut, um eine neue Kopie zu erhalten.
- Stellen Sie sicher, dass der Analysetyp über einen öffentlichen parameterlosen Konstruktor (CS8032) verfügt. Der Compiler instanziiert Analyzer durch Aufrufen des Standardkonstruktors. Wenn der Konstruktor eine Ausnahme auslöst oder Parameter erfordert, kann der Analyzer nicht erstellt werden.
- Überprüfen Sie, ob die referenzierte Assembly die Analyse- oder Quellgeneratortypen (CS8033) tatsächlich exportiert. Eine Assembly, auf die als Analyzer verwiesen wird, muss Typen enthalten, die
DiagnosticAnalyzeroderISourceGenerator/IIncrementalGeneratorimplementieren. Wenn es sich bei der Assembly um eine Laufzeitabhängigkeit anstelle eines Analyzers handelt, verweisen Sie stattdessen als normales Projekt oder Paketverweis darauf. - Beheben Sie Probleme beim Laden von Typen in der Analyzerassembly, indem Sie sicherstellen, dass alle ihre Abhängigkeiten verfügbar sind (CS8040). Ein
ReflectionTypeLoadExceptionbedeutet in der Regel, dass die Assembly auf Typen aus anderen Assemblies verweist, die nicht gefunden werden können. Stellen Sie sicher, dass alle erforderlichen Abhängigkeiten im NuGet-Paket des Analyzers enthalten sind. - Stellen Sie sicher, dass Analyzer-Konfigurationsdateien (
.editorconfigoder.globalconfig) pro Verzeichnis (CS8700) eindeutig sind. Der Compiler lässt nicht mehrere Analysekonfigurationsdateien im selben Verzeichnis zu, da die Rangfolgeregeln mehrdeutig wären. Führen Sie die Dateien zusammen, oder entfernen Sie das Duplikat. - Aktualisieren Sie den Analysator oder Quellgenerator so, dass er auf .NET Standard oder modernes .NET statt auf .NET Framework ausgerichtet ist (CS8850). Assemblys, die auf .NET Framework verweisen, werden in der modernen .NET Compilertoolkette nicht unterstützt. Wenn Sie den Analysator beibehalten, zuweisen Sie es erneut auf
netstandard2.0. Wenn es sich um ein Drittanbieterpaket handelt, führen Sie ein Upgrade auf eine Version durch, die moderne .NET unterstützt.
Interceptors sind experimentelle Geräte
-
CS9137: Die Funktion „Interceptors“ ist in diesem Namespace nicht aktiviert. Fügen Sie
<Features>InterceptorsPreview</Features>Ihrem Projekt hinzu.
Um Interceptors zu verwenden, fügen Sie das <Features>InterceptorsPreview</Features>-Element innerhalb eines <PropertyGroup>-Abschnitts zu Ihrer Projektdatei hinzu (CS9137). Interceptors sind ein experimentelles Feature und sind standardmäßig nicht aktiviert. Diese explizite Opt-In ist erforderlich, da das Interceptors-Feature in zukünftigen Versionen Änderungen oder Entfernungen unterliegt. Der Compiler erfordert eine Bestätigung, dass Sie die Risiken verstehen, bevor seine Nutzung erlaubt wird. Weitere Informationen zu Interceptors und ihren Funktionen finden Sie in der C# 12-Featuredokumentation.
Nichtübereinstimmung der Signatur
Die folgenden Fehler und Warnungen deuten auf eine Diskrepanz zwischen der Interceptor-Methode und der abfangbaren Methode hin.
-
CS9144: Die Methode
Mkann nicht mit dem InterceptorVabgefangen werden, da die Signaturen nicht übereinstimmen. -
CS9148: Interceptor muss über einen
thisParameterabgleichsparameter verfügen. -
CS9149: Interceptor darf keinen Parameter haben
this, da die Methode keinen Parameter hatthis. -
CS9155: Der Aufruf kann nicht
Mabgefangen werden, weil er innerhalb vonVnicht zugänglich ist. -
CS9156: Anruf an
Mkann nicht mitVabgefangen werden, da ein Unterschied bei 'Scope'-Modifizierern oder[UnscopedRef]Attributen besteht. - CS9177: Die Methode 'method' darf nicht generisch sein oder muss die Arität 'arity' haben, damit sie mit 'target' übereinstimmt.
- CS9178: Die Methode 'method' darf nicht generisch sein, um 'target' zu entsprechen.
Darüber hinaus weisen die folgenden Warnungen auf ein Missverhältnis in den Signaturen des Interceptors und der abfangbaren Methode hin.
-
CS9154: Abfangen eines Aufrufs an
Mmit dem InterceptorV, jedoch stimmen die Signaturen nicht überein. - CS9158: Die Nullierbarkeit von Verweistypen im Rückgabetyp stimmt nicht mit der abfangenden Methode überein.
- CS9159: Die Nullierbarkeit von Verweistypen im Parametertyp stimmt nicht mit der abfangenden Methode überein.
-
CS9270: '
InterceptsLocationAttribute(string, int, int)' wird nicht unterstützt. Wechseln Sie stattdessen zu "InterceptableLocation"-basierten Generierung dieser Attribute. (https://github.com/dotnet/roslyn/issues/72133)
Um diese Probleme zu beheben, stellen Sie sicher, dass die Interceptor-Methode den Signatur- und Zugriffsanforderungen der abfangenden Methode entspricht:
- Stellen Sie sicher, dass die Interceptor-Methodensignatur exakt mit der abfangenden Methode übereinstimmt (CS9144, CS9154). Die Parametertypen, Modifizierer, Reihenfolge und Rückgabetyp müssen identisch sein. Überprüfen Sie beide Methodendeklarationen, und richten Sie ihre Signaturen aus.
- Fügen Sie dem Interceptor einen
thisParameter hinzu, wenn es sich bei der abfangbaren Methode um eine Instanzmethode (CS9148) handelt, oder entfernen Sie denthisParameter, wenn die abfangende Methode statisch ist (CS9149). Instanzinterceptoren erfordern einenthisParameter des deklarierenden Typs, während statische Interceptoren keinen haben dürfen. - Deklarieren Sie den Interceptor an einer Position, an der auf die abfangbare Methode zugegriffen werden kann (CS9155). Wenn die abfangbare Methode lautet
internal, muss sich der Interceptor in derselben Assembly befinden. Wenn esprivateist, muss sich der Interceptor im selben Typ oder einem geschachtelten Typ befinden. - Stimmen Sie die
scopedModifizierer und[UnscopedRef]Attribute auf entsprechenderefParameter ab (CS9156). JederrefParameter im Interceptor muss dieselben Lebensdaueranmerkungen aufweisen wie der entsprechende Parameter in der abfangenden Methode, um die Speichersicherheit sicherzustellen. - Stellen Sie sicher, dass beide Methoden eine übereinstimmende generische Arität aufweisen (CS9177, CS9178). Wenn die abfangbare Methode nicht generisch ist, muss der Interceptor auch nicht generisch sein. Wenn die abfangende Methode Typparameter aufweist, muss der Interceptor dieselbe Anzahl von Typparametern mit kompatiblen Einschränkungen aufweisen.
- Übereinstimmung mit den Nullbarkeitsanmerkungen im Rückgabetyp (CS9158) und Parametertypen (CS9159). Aktivieren Sie nullable Referenztypen in Ihrem Projekt, und stellen Sie sicher, dass die Nullbarkeitsanmerkungen des Interceptors exakt mit der abfangbaren Methode übereinstimmen, um die Typsicherheit zu gewährleisten.
- Verwenden Sie die aktualisierte
InterceptableLocation-basierte Generation fürInterceptsLocationAttributestatt des veralteten(string, int, int)Konstruktors (CS9270). Das neuere Format bietet eine bessere Toolunterstützung und Kompilierungszeitüberprüfung. Sehen Sie sich das GitHub-Issue für den Migrationsleitfaden an.
Falsche Zuordnung
Interceptors erfordern eine Quellabbildung, die die abfangbare Methode und die Interceptor-Methode verknüpft. Die folgenden Fehler deuten auf ein Problem mit der Zuordnung hin:
- CS9139: Die Kompilierung kann nicht abfangen: Die Kompilierung enthält keine Datei mit Pfad.
- CS9140: Abfangen nicht möglich: Die Kompilierung enthält keine Datei mit dem Pfad 'path'. Meinten Sie den Pfad 'candidatePath'?
- CS9141: Die angegebene Zeilen- und Zeichennummer verweist nicht auf den Namen einer abfangenden Methode, sondern auf das Token "token".
-
CS9142: Die angegebene Datei enthält
nZeilen, die kleiner als die angegebene Zeilennummermsind. -
CS9143: Die angegebene Zeile ist
clang, die weniger als die angegebene Zeichennummernist. - CS9145: Interzeptieren nicht möglich: Der Pfad ist nicht zugeordnet. Zugeordneter Pfad erwartet.
- CS9147: Die angegebene Zeilen- und Zeichennummer bezieht sich nicht auf den Beginn von Token 'token'. Meinten Sie Zeile 'n' und Zeichen 'c'?
-
CS9150: Interceptor kann keinen Dateipfad haben
null. -
CS9157: Den
InterceptsLocationAttributeübermittelte Zeilen- und Zeichennummern müssen positiv sein.
Um Zuordnungsfehler zu beheben, stellen Sie sicher, dass Sie InterceptsLocationAttribute gültige Dateipfade und genaue Positionsinformationen enthalten:
- Überprüfen Sie, ob der Dateipfad genau mit einer Datei in Ihrer Kompilierung übereinstimmt (CS9139, CS9140). Verwenden Sie den genauen Pfad, wie er in Ihrem Projekt angezeigt wird, einschließlich korrekter Groß- und Kleinschreibung und Verzeichnistrennzeichen. Wenn der Compiler einen alternativen Pfad vorschlägt, aktualisieren Sie Ihr Attribut so, dass er diesen Pfad verwendet.
- Verwenden Sie zugeordnete Dateipfade beim Arbeiten mit Quellgeneratoren, die Dateipfade transformieren (CS9145). Quellgeneratoren ordnen häufig Pfade für generierte Dateien neu zu, und Sie müssen den zugeordneten Pfad verwenden, den der Compiler erkennt, nicht den ursprünglichen Quellpfad.
- Stellen Sie sicher, dass sich der Dateipfad nicht
nullin IhremInterceptsLocationAttribute(CS9150) befindet. Jedes Abfangen muss einen gültigen, nicht null-Dateipfad angeben, der die Quelldatei identifiziert, die den abzufangenden Aufruf enthält. - Stellen Sie positive, 1-basierte Zeilen- und Zeichenzahlen bereit (CS9157). Zeilennummern und Zeichenpositionen müssen bei 1 beginnen, nicht bei 0. Überprüfen Sie, ob der Quellgenerator beim Berechnen von Positionen eine 1-basierte Indizierung verwendet.
- Zeigen Sie auf den genauen Start des Methodennamentokens (CS9141, CS9147). Die Zeilen- und Zeichennummern müssen das erste Zeichen des Methodennamens im Aufruf identifizieren, nicht Leerzeichen, Operatoren oder andere Token. Wenn der Compiler alternative Koordinaten vorschlägt, verwenden Sie diese, um auf den richtigen Tokenstart anzusteuern.
- Bleiben Sie innerhalb der Grenzen der Datei (CS9142, CS9143). Überprüfen Sie, ob die Zeilennummer die Gesamtzahl der Zeilen nicht überschreitet, und die Zeichennummer überschreitet nicht die Zeilenlänge. Berechnen Sie Positionen neu, wenn sich die Quelldatei seit dem Generieren des Attributs geändert hat.
Falsche Interceptordeklaration
Die folgenden Fehler deuten auf Probleme mit Interceptordeklarationen hin, einschließlich Problemen mit dem InterceptsLocationAttribute Format oder Verstößen gegen Interceptor-Regeln:
- CS9138: Die Methode "methode" kann nicht als Interceptor verwendet werden, da der enthaltende Typ Typparameter aufweist.
- CS9146: Eine Interceptor-Methode muss eine gewöhnliche Membermethode sein.
-
CS9151: Der mögliche Methodenname
Mkann nicht abgefangen werden, da er nicht aufgerufen wird. - CS9152: Ein Aufruf in der Datei mit dem Pfad "Pfad" kann nicht abgefangen werden, da mehrere Dateien in der Kompilierung diesen Pfad aufweisen.
- CS9153: Der angegebene Aufruf wird mehrmals abgefangen.
- CS9160: Ein Nameofoperator kann nicht abgefangen werden.
-
CS9161: Ein Interceptor kann nicht mit
UnmanagedCallersOnlyAttributemarkiert werden. - CS9206: Ein Interceptor kann nicht im globalen Namespace deklariert werden.
- CS9207: 'method' kann nicht abgefangen werden, weil dies kein Aufruf einer gewöhnlichen Instanzmethode ist.
- CS9231: Das Datenargument "InterceptsLocationAttribute" weist nicht das richtige Format auf.
- CS9232: Version "Version" des Interceptors-Formats wird nicht unterstützt. Die neueste unterstützte Version ist "1".
- CS9233: Ein Aufruf in der Datei "Datei" kann nicht abgefangen werden, da er an anderer Stelle in der Kompilierung dupliziert wird.
- CS9234: Ein Aufruf in der Datei "Datei" kann nicht abgefangen werden, da in der Kompilierung keine übereinstimmende Datei gefunden wurde.
- CS9235: Das Datenargument "InterceptsLocationAttribute" verweist auf eine ungültige Position in der Datei "Datei".
Befolgen Sie die folgenden Regeln für gültige Interceptordeklarationsdeklarationen und InterceptsLocationAttribute -verwendung, um Fehler bei der Interceptordeklaration zu beheben:
- Formatieren Sie das
InterceptsLocationAttributeDatenargument richtig (CS9231). Das Attribut erfordert speziell strukturierte Daten, die Dateipfad- und Positionsinformationen codieren. Stellen Sie sicher, dass der Quellgenerator Daten im erwarteten Format erzeugt, das der aktuellen Interceptors-Spezifikation entspricht. - Verwenden Sie Version "1" in Ihrem
InterceptsLocationAttribute(CS9232), da sie die neueste unterstützte Version ist. Aktualisieren Sie den Quellgenerator auf die Ausgabe von Formatattributen der Version 1 anstelle nicht unterstützter Versionsnummern. - Stellen Sie eindeutige Dateipfade in Ihrer Kompilierung (CS9233, CS9234) sicher. Wenn die Kompilierung doppelte Dateipfade enthält, benennen Sie Dateien um, oder organisieren Sie sie neu, um jeden Pfad eindeutig zu machen. Stellen Sie sicher, dass der Dateipfad im Attribut einer Datei entspricht, die tatsächlich in der Kompilierung enthalten ist.
- Prüfen der Positionsdatenpunkte auf gültige Code-Lokationen (CS9235). Die Zeilen- und Zeichennummern müssen auf einen gültigen Abfangpunkt innerhalb der angegebenen Datei verweisen. Generieren Sie das Attribut neu, wenn die Quelldatei geändert wurde oder die Position außerhalb der Grenzen der Datei liegt.
- Deklarieren Sie nicht-generische Interceptormethoden in nicht-generischen Typen (CS9138). Interceptors können in Typen mit Typparametern nicht deklariert werden. Wenn Sie eine generische Methode abfangen müssen, erstellen Sie einen nicht generischen Interceptor in einem nicht generischen enthaltenden Typ, der mit dem spezifischen konstruierten Typ funktioniert.
- Machen Sie Interceptoren zu gewöhnlichen Membermethoden (CS9146). Interceptors können keine Operatoren, Konstruktoren, Finalizer, Eigenschaften oder Indexer sein. Deklarieren Sie den Interceptor als normale statische oder Instanzmethode.
- Abfangen tatsächlicher Methodenaufrufe, nicht Ausdrücke (CS9151, CS9207). Aufrufe von normalen Membermethoden können nur abgefangen werden. Sie können Methodengruppen, Delegaten oder Methoden, auf die verwiesen wird, nicht abfangen, ohne dass sie aufgerufen werden. Stellen Sie sicher, dass der abfangende Standort einen tatsächlichen Methodenaufruf identifiziert.
- Entfernen doppelter Abfangenversuche (CS9153). Jeder Methodenaufruf kann nur einmal abgefangen werden. Wenn mehrere
InterceptsLocationAttributeInstanzen auf denselben Aufruf abzielen, entfernen Sie alle außer einer Instanz, um die Mehrdeutigkeit zu beheben. - Abfangen Sie keine Operatoren
nameof(CS9160). DernameofOperator ruft zur Laufzeit keine Methoden auf, sodass er nicht abgefangen werden kann. Nur tatsächliche Methodenaufrufe abfangen, die zur Laufzeit ausgeführt werden. - Entfernen Sie
UnmanagedCallersOnlyAttributevon Interceptors (CS9161). Interceptors müssen aus verwaltetem Code aufgerufen werden können und können nicht mitUnmanagedCallersOnlyAttributemarkiert werden. Entfernen Sie das Attribut aus der Deklaration der Interceptor-Methode. - Deklarieren von Interceptoren in einem Namespace (CS9206). Interceptors können nicht im globalen Namespace deklariert werden und müssen in zumindest einer Namespace-Deklaration enthalten sein. Umschließen Sie die Interceptorklasse in einem Namespace.
- Auflösen doppelter Dateipfade auf Kompilierungsebene (CS9152). Wenn mehrere Dateien denselben Pfad in der Kompilierung gemeinsam nutzen, kann der Compiler nicht bestimmen, welche Datei abgefangen werden soll. Stellen Sie sicher, dass die Buildkonfiguration eindeutige Dateipfade erzeugt oder eine andere Organisationsstrategie für Ihre Quelldateien verwendet.