Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek se zabývá následujícími chybami kompilátoru:
- CS0181: Parametr konstruktoru atributu má typ, což není platný typ parametru atributu
- CS0243: Podmíněný atribut není platný pro metodu, protože jde o přetíženou metodu.
- CS0404: Atribut není pro tento typ deklarace platný.
- CS0415: Tento atribut je platný pouze u indexeru, který není explicitní deklarace člena rozhraní.
- CS0416: Parametr typu: Argument atributu nemůže použít parametry typu.
- CS0447: Atribut nelze použít s argumenty typu.
- CS0577: Podmíněný atribut není platný, protože se jedná o konstruktor, destruktor, operátor, výraz lambda nebo explicitní implementaci rozhraní.
- CS0578: Podmíněný atribut není pro funkci platný, protože jeho návratový typ není neplatný.
- CS0579: Duplicitní atribut
- CS0582: Podmíněný atribut není platný pro členy rozhraní.
- CS0592: Atribut není pro tento typ deklarace platný. Platí pouze pro konkrétní deklarace.
- CS0609: Nelze nastavit atribut u indexeru označeného jako override.
- CS0616: Typ není třída atributu
- CS0625: Pole instance v typech označených atributem StructLayout(LayoutKind.Explicit) musí mít atribut FieldOffset.
- CS0629: Podmíněný člen 'member' nemůže implementovat člena rozhraní 'member základní třídy' v typu 'Název typu'.
- CS0636: Atribut FieldOffset lze umístit pouze na členy typů označených StructLayout(LayoutKind.Explicit).
- CS0637: Atribut FieldOffset není povolen pro statická pole nebo pole const.
- CS0641: Tento atribut je platný pouze pro třídy odvozené ze System.Attribute'.
- CS0646: Nelze zadat atribut DefaultMember u typu obsahujícího indexer.
- CS0647: Chyba při generování atributu
- CS0653: Nelze použít třídu atributu 'class', protože je abstraktní.
- CS0657: Místo není platným místem atributu pro tuto deklaraci. Jsou uvedeny platné umístění atributů pro tuto deklaraci. Všechny atributy v tomto bloku budou ignorovány.
- CS0658: Toto umístění není rozpoznaným umístěním atributu. Jsou uvedena platná umístění atributů pro tuto deklaraci. Všechny atributy v tomto bloku budou ignorovány.
- CS0668: Dva indexery mají různé názvy; atribut IndexerName musí být použit se stejným názvem u každého indexeru v rámci typu.
- CS0685: Podmíněný člen člen nemůže mít výstupní parametr.
- CS0735: Neplatný typ zadaný jako argument pro atribut TypeForwardedTo
- CS0739: Duplicitní typForwardedToAttribute
- CS1608: Atribut RequiredAttribute není povolen u typů C#
- CS1614: Název atributu je nejednoznačný. Použijte buď @name, nebo explicitně uveďte příponu Atribut.
- CS1618: Nelze vytvořit delegáta s metodou, protože ona nebo metoda, kterou přepisuje, má atribut Conditional
- CS1667: Atribut není platný u vlastností nebo přístupových objektů událostí. Platí pouze pro konkrétní deklarace.
- CS1689: Atribut je platný pouze u metod nebo tříd atributů
- CS7014: Atributy nejsou v tomto kontextu platné.
- CS7046: Je nutné zadat parametr atributu.
- CS7047: Je třeba zadat parametr atributu parameter1 nebo parameter2.
- CS7067: Parametr konstruktoru atributu je volitelný, ale nebyla zadána žádná výchozí hodnota parametru.
- CS8959: CallerArgumentExpressionAttribute nelze použít, protože neexistují žádné standardní převody typu 1 na typ2
- CS8960: CallerArgumentExpressionAttribute použitý u parametru nebude mít žádný vliv. Přepíše se atributem CallerLineNumberAttribute.
- CS8961: CallerArgumentExpressionAttribute použitý u parametru nebude mít žádný vliv. Přepíše se atributem CallerFilePathAttribute.
- CS8962: CallerArgumentExpressionAttribute použitý u parametru nebude mít žádný vliv. Přepíše se atributem CallerMemberNameAttribute.
- CS8963: CallerArgumentExpressionAttribute použitý u parametru nebude mít žádný vliv. Použije se s neplatným názvem parametru.
- CS8968: Argument typu atributu nemůže použít parametry typu
- CS8783: Místní funkce "metoda" musí být statická, aby bylo možné použít podmíněný atribut
- CS8970: Typ nelze v tomto kontextu použít, protože jej nelze reprezentovat v metadatech.
- CS9331: Atribut nelze použít ručně.
Argumenty a parametry atributů
Při nesprávném použití argumentů nebo parametrů atributů se zobrazí následující chyby:
- CS0181: Parametr konstruktoru atributu má typ, což není platný typ parametru atributu
- CS0416: Parametr typu: Argument atributu nemůže použít parametry typu.
- CS0447: Atribut nelze použít s argumenty typu.
- CS0647: Chyba při generování atributu
- CS7046: Je nutné zadat parametr atributu.
- CS7047: Je třeba zadat parametr atributu parameter1 nebo parameter2.
- CS7067: Parametr konstruktoru atributu je volitelný, ale nebyla zadána žádná výchozí hodnota parametru.
- CS8968: Argument typu atributu nemůže použít parametry typu
- CS8970: Typ nelze v tomto kontextu použít, protože jej nelze reprezentovat v metadatech.
Pokud chcete tyto chyby opravit, postupujte podle těchto pravidel:
- Parametry konstruktoru atributů musí používat platné typy parametrů atributů (CS0181). Specifikace jazyka C# omezuje typy parametrů atributů na primitivní typy (
bool,byte,char,double,float,int,long,shortastring),object, ,System.Typevýčtové typy a jednorozměrná pole těchto typů. Ukazatele funkcí a jiné typy, které nelze reprezentovat v metadatech, nejsou platnými typy parametrů atributů. - Argumenty atributů musí být konstantní hodnoty kompilační doby, takže jako argumenty atributů nemůžete použít parametry typu (CS0416). Kompilátor musí přeložit argumenty atributů v době kompilace a parametry typu nejsou známé, dokud nebude vytvořen obecný typ.
- Argumenty typu nelze použít u ne generického atributu (CS0447). Pokud není třída atributu obecná, její použití nemůže obsahovat argumenty typu v úhlových závorkách.
- Všechny hodnoty předané konstruktoru atributů musí být správně naformátované a v platném rozsahu pro každý parametr (CS0647). Například GuidAttribute vyžaduje platný řetězec formátu GUID.
- Při použití atributu (CS7046, CS7047) musíte zadat všechny požadované parametry atributu. Zkontrolujte podpis konstruktoru atributu, abyste zjistili, které parametry jsou povinné, a zadejte platné argumenty pro každý parametr.
- Když definujete vlastní atribut s volitelnými parametry konstruktoru, zadejte výchozí hodnoty pro tyto parametry (CS7067). Použijte syntaxi
parameterType parameterName = defaultValuev konstruktoru atributu, aby volající mohli tyto argumenty vynechat. - Argumenty obecného typu atributu musí být konkrétní typy, nikoli parametry typu (CS8968). Kompilátor musí plně určit argumenty obecného typu atributu v době kompilace, takže parametry otevřeného typu nejsou povoleny.
- Typy používané jako argumenty atributů musí být reprezentovatelné v metadatech (CS8970). Některé vytvořené typy, například ty, které zahrnují
dynamicnebo některé názvy prvků řazené kolekce členů, nelze zakódovat do metadat a nejsou povoleny jako argumenty typu atributu.
Další informace naleznete v části Atributy, Obecné typy a specifikace jazyka C#u atributů.
Poznámka:
CS0447 a CS0647 jsou zastaralé. Aktuální kompilátor tyto chyby nevygeneruje.
Požadavky na třídu atributů
Při definování tříd atributů, které nevyhovují požadovaným omezením, se zobrazí následující chyby:
- CS0404: Atribut není pro tento typ deklarace platný.
- CS0579: Duplicitní atribut
- CS0616: Typ není třída atributu
- CS0641: Tento atribut je platný pouze pro třídy odvozené ze System.Attribute'.
- CS0653: Nelze použít třídu atributu 'class', protože je abstraktní.
- CS1614: Název atributu je nejednoznačný. Použijte buď @name, nebo explicitně zahrňte příponu Atribut.
Pokud chcete tyto chyby opravit, postupujte podle těchto pravidel:
- Použít atributy pouze na typy deklarací, které atribut AttributeUsageAttribute umožňuje (CS0404).
AttributeTargetsZkontrolujte hodnotu zadanou v atributuAttributeUsagea zjistěte, které cíle jsou platné. - Pokud stejný atribut použijete více než jednou pro jeden cíl, odeberte duplikát nebo sadu
AllowMultiple = truev atributu AttributeUsageAttribute (CS0579). Ve výchozím nastavení se atributy můžou na každém cíli zobrazovat jen jednou. - Typ použitý v syntaxi atributu musí dědit z System.Attribute (CS0616). Jako atributy lze použít pouze třídy odvozené z
System.Attribute. Jiné typy způsobují tuto chybu i v případě, že mají podobný název. - Lze použít AttributeUsageAttribute pouze pro třídy odvozené od
Attribute(CS0641). AtributAttributeUsageřídí způsob použití jiných atributů a je sám omezen na třídy atributů. - Třídy atributů nemohou být
abstract, protože kompilátor musí vytvořit instanci (CS0653). Odeberte modifikátor z atributové třídy, nebo vytvořte konkrétní třídu z abstraktního základu. - Pokud existují třídy obou
ExampleExampleAttributeatributů, kompilátor nemůže určit, který[Example]z nich odkazuje (CS1614). Odlište pomocí[@Example]pro kratší název nebo[ExampleAttribute]pro delší název.
Další informace naleznete v tématu Vytváření vlastních atributů a oddíl specifikace jazyka C# u atributů.
Kontext umístění atributu
K následujícím chybám dochází při použití atributů v neplatných umístěních nebo použití nesprávných cílových specifikátorů:
- CS0592: Atribut není pro tento typ deklarace platný. Platí pouze pro konkrétní deklarace.
- CS0657: Toto umístění není platné pro atribut v této deklaraci. Seznam platných umístění atributů pro tuto deklaraci je uveden. Všechny atributy v tomto bloku budou ignorovány.
- CS0658: Umístění není rozpoznáno jako umístění atributu. Jsou uvedena platná umístění atributů pro tuto deklaraci. Všechny atributy v tomto bloku budou ignorovány.
- CS1667: Atribut není platný pro vlastnosti nebo přístupové metody událostí. Je platný pouze pro určité deklarace.
- CS7014: Atributy nejsou v tomto kontextu platné.
Pokud chcete tyto chyby opravit, postupujte podle těchto pravidel. Další informace najdete v tématu Cíle atributů a část specifikace jazyka C# o specifikaci atributu.
- Každý atribut AttributeUsageAttribute určuje, na které typy deklarací cílí. Atribut musíte použít pouze u těchto typů (CS0592). Například nelze použít atribut definovaný pomocí
AttributeTargets.Interfacena třídu. - Pokud použijete specifikátor cíle atributu, například
method:neboproperty:, specifikátor musí být platný pro deklaraci, kde se zobrazí (CS0657). Zkontrolujte chybovou zprávu a zjistěte, které cílové specifikátory jsou pro konkrétní deklaraci povolené. - Specifikátor cíle atributu, který jste použili, není rozpoznaný specifikátor (CS0658). Mezi platné specifikátory patří
assembly:, ,module:type:method:property:field:,event:,param:, a .return: - Některé atributy, například ObsoleteAttribute a CLSCompliantAttribute, nejsou platné u vlastností nebo přístupových objektů událostí (CS1667). Přesuňte atribut z přístupového objektu do samotné vlastnosti nebo deklarace události.
- Atributy se můžou objevit pouze u prvků programu, které je podporují (CS7014). Pokud používáte atributy na úrovni sestavení nebo na úrovni modulu, použijte
assembly:specifikátory nebomodule:cílové specifikátory a umístěte je do horní části souboru.
Předdefinované atributy
Při nesprávném použití konkrétních předdefinovaných atributů .NET dochází k následujícím chybám:
- CS0415: Tento atribut je platný pouze u indexeru, který není explicitní deklarace člena rozhraní.
- CS0609: Atribut nelze nastavit u indexeru, který je označen jako 'override'.
- CS0625: Pole instance v typech označených atributem StructLayout(LayoutKind.Explicit) musí mít atribut FieldOffset.
- CS0636: Atribut FieldOffset lze umístit pouze na členy typů označených StructLayout(LayoutKind.Explicit).
- CS0637: Atribut FieldOffset není povolen pro statická pole nebo pole const.
- CS0646: Nelze zadat atribut DefaultMember u typu obsahujícího indexer.
- CS0668: Dva indexery mají různé názvy; atribut IndexerName musí být použit se stejným názvem u každého indexeru v rámci typu.
- CS0735: Neplatný typ zadaný jako argument pro atribut TypeForwardedTo
- CS0739: Duplicitní TypeForwardedToAttribute
- CS1608: Atribut RequiredAttribute není povolen u typů C#
- CS9331: Atribut nelze použít ručně.
Pokud chcete tyto chyby opravit, postupujte podle těchto pravidel. Další informace najdete v tématu Indexery, TypeForwardedToAttribute a volání platformy (P/Invoke).
- Můžete použít IndexerNameAttribute pouze pro indexery, které nejsou explicitní deklarace členů rozhraní (CS0415). Odeberte atribut z explicitních indexerů rozhraní, protože rozhraní již definuje název indexeru.
- Na indexery označené pomocí
IndexerNamenelze použítoverride, protože indexery přepsané pomocí dědí jejich název ze základní třídy (CS0609). Odeberte atributIndexerNamez přepisovacího indexeru. - Každé pole instance v typu označeném
StructLayout(LayoutKind.Explicit)musí mít FieldOffsetAttribute (CS0625). Explicitní rozložení vyžaduje, abyste pro každé pole instance zadali bajtový posun. -
FieldOffsetAttribute můžete umístit pouze na členy typů, u nichž je StructLayoutAttribute nastaveno na
LayoutKind.Explicit(CS0636). Přidejte atributStructLayoutdo deklarace typu, který obsahuje. - Atribut
FieldOffsetnení povolen prostaticpole neboconstpole, protože explicitní rozložení platí jenom pro pole instance (CS0637).FieldOffsetOdeberte atribut ze statického pole nebo z pole const. - Nelze použít DefaultMemberAttribute u typu, který už obsahuje indexer, protože kompilátor automaticky definuje výchozí člen pro typy s indexery (CS0646). Odeberte atribut
DefaultMember. - Všechny IndexerNameAttribute atributy v rámci typu musí určovat stejný název (CS0668). Změňte názvy tak, aby odpovídaly, protože modul runtime používá jeden název pro všechny indexery typu.
- Pro TypeForwardedToAttribute je nutné jako argument zadat negenerický, nevnořený, neukazatelový typ ani typ pole (CS0735). Platné cíle předávání jsou pouze pojmenované typy nejvyšší úrovně.
- Sestavení může mít pouze jeden TypeForwardedToAttribute pro každý externí typ (CS0739). Vyhledejte a odeberte duplicitní
TypeForwardedTodeklaraci. - Nemůžete použít typy RequiredAttributeAttribute definované v jazyce C# (CS1608). Tento atribut je vyhrazený pro jiné jazyky, které potřebují vynutit kompilátory, aby vyžadovaly konkrétní funkci.
- Některé atributy jsou vyhrazené pro kompilátor a nelze je použít ručně ve zdrojovém kódu (CS9331). Nahraďte atribut ekvivalentní syntaxí jazyka C#, která způsobí, že ho kompilátor vygeneruje.
Použití podmíněného atributu
Při použití ConditionalAttribute způsobů, které porušují omezení použití, se zobrazí následující chyby:
- CS0243: Podmíněný atribut není platný pro 'metodu', protože se jedná o přepsanou metodu.
- CS0577: Podmíněný atribut není platný, protože se jedná o konstruktor, destruktor, operátor, výraz lambda nebo explicitní implementaci rozhraní.
- CS0578: Podmíněný atribut není pro funkci platný, protože jeho návratový typ není neplatný.
- CS0582: Podmíněný atribut není platný pro členy rozhraní.
- CS0629: Podmíněný člen 'member' nemůže implementovat rozhraní 'člen' v typu 'Název typu'.
- CS0685: Podmíněný člen 'member' nemůže mít výstupní parametr.
- CS1618: Nelze vytvořit delegáta s metodou, protože metoda nebo některá z metod, které přepisuje, má atribut Conditional
- CS1689: Atribut je platný pouze u metod nebo tříd atributů
- CS8783: Místní funkce "metoda" musí být statická, aby bylo možné použít podmíněný atribut
Pokud chcete tyto chyby opravit, postupujte podle těchto pravidel. Další informace naleznete v tématu ConditionalAttribute, Podmíněné metody a Atributy.
- Kompilátor svazuje volání na deklaraci základní metody, nikoli na přepsanou, takže nelze použít atribut
Conditionalna metody označené jako override (CS0243). Odeberte atributConditionalz přetížené metody nebo odeberte klíčové slovooverride. - Atribut
Conditionalnení platný pro konstruktory, finalizátory, operátory, výrazy lambda nebo explicitní implementace rozhraní (CS0577). Tyto typy členů nelze podmíněně vynechat, protože mají požadované role v životním cyklu nebo smlouvě typu. - Podmíněné metody musí vrátit
void, protože kompilátor by mohl volání zcela vynechat a volajícímu by nebyla k dispozici žádná návratová hodnota (CS0578). Změňte návratový typ metody navoidnebo odeberteConditionalatribut. - Členy rozhraní nemohou být podmíněné, protože musí být implementovány všechny členy rozhraní (CS0582). Odeberte atribut
Conditionalz deklarace člena rozhraní. - Metody, které implementují členy rozhraní, nemohou být podmíněné, protože kontrakt rozhraní vyžaduje, aby byly přítomny ve všech buildech (CS0629). Odeberte atribut
Conditionalz implementační metody. - Podmíněné metody nemohou mít
outparametry, protožeouthodnota proměnné by nebyla definována, když kompilátor vynechá volání metody (CS0685). Odeberteoutparametry z metody nebo odeberteConditionalatribut. - Delegáta, který odkazuje na podmíněnou metodu, nelze vytvořit, protože tato metoda nemusí existovat v buildech, kde není definovaný symbol podmínky (CS1618). Odeberte atribut
Conditionalz metody nebo jej nepoužívejte jako cíl delegáta. - Atribut
Conditionalje platný pouze pro metody a třídy atributů (CS1689). Není platný u jiných typů deklarací, jako jsou třídy, struktury nebo rozhraní bez atributů. - Místní funkce musí být deklarována
statictak, aby používalaConditionalatribut (CS8783). Nestatické místní funkce zaznamenávají stav z uzavřené metody a kompilátor nemůže bezpečně vynechat volání, které by mohlo zahrnovat zachycené proměnné.staticPřidejte modifikátor do místní funkce nebo odeberte[Conditional]atribut.
Použití atributu CallerArgumentExpression
Při nesprávném použití CallerArgumentExpressionAttribute nebo konfliktu s jinými atributy informací o volajícím dojde k následujícím chybám:
- CS8959: CallerArgumentExpressionAttribute nelze použít, protože neexistují žádné standardní převody typu 1 na typ2
- CS8960: CallerArgumentExpressionAttribute použitý u parametru nebude mít žádný vliv. Přepíše se atributem CallerLineNumberAttribute.
- CS8961: CallerArgumentExpressionAttribute použitý u parametru nebude mít žádný vliv. Přepíše se atributem CallerFilePathAttribute.
- CS8962: CallerArgumentExpressionAttribute použitý u parametru nebude mít žádný vliv. Přepíše se atributem CallerMemberNameAttribute.
- CS8963: CallerArgumentExpressionAttribute použitý u parametru nebude mít žádný vliv. Použije se s neplatným názvem parametru.
Pokud chcete tyto chyby opravit, postupujte podle těchto pravidel. Další informace naleznete v tématu Atributy informací volajícího a CallerArgumentExpressionAttribute.
- Parametr zdobený musí mít typ
CallerArgumentExpressionnebo typ se standardním převodemstringzstring, protože atribut vložístringreprezentaci výrazu argumentu volajícího (CS8959). Změňte typ parametru nastringnebo kompatibilní typ. - Atribut
CallerArgumentExpressionnemá žádný vliv na parametr, který má CallerLineNumberAttributetaké , CallerFilePathAttributenebo CallerMemberNameAttribute (CS8960, CS8961, CS8962). Tyto atributy informací o volajícím mají přednost, proto atribut z parametru odeberteCallerArgumentExpression. - Argument řetězce předaný konstruktoru
CallerArgumentExpressionmusí odpovídat názvu jiného parametru ve stejném podpisu metody (CS8963). Pokud je název parametru chybně napsaný nebo odkazuje na neexistující parametr, atribut nemá žádný vliv.