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:
- CS0104: Chyba: 'reference' je nejednoznačný odkaz mezi 'identifikátorem' a 'identifikátorem'.
- CS0116: Chyba: Obor názvů nemůže přímo obsahovat členy, jako jsou pole, metody nebo příkazy.
- CS0138: Chyba: Použití direktivy oboru názvů lze použít pouze na obory názvů; Type je typ, který není oborem názvů.
- CS0430: Chyba: Externí alias alias alias nebyl zadán v parametru /reference.
-
CS0431: Chyba: Nelze použít alias identifikátor, protože
::alias odkazuje na typ. Použijte.místo toho. - CS0432: Chyba: Alias identifikátor nebyl nalezen.
- CS0434: Chyba: Obor názvů NamespaceName1 v NamespaceName2 je v konfliktu s typem TypeName1 v NamespaceName3.
- CS0438: Chyba: Typ v module_1 je v konfliktu s oborem názvů v module_2.
- CS0439: Chyba: Deklarace externího aliasu musí předcházet všem ostatním prvkům definovaným v oboru názvů.
- CS0518: Chyba: Předdefinovaný typ Type není definován nebo importován.
- CS0576: Chyba: Obor názvů 'namespace' obsahuje definici, která je v konfliktu s aliasem 'identifikátor'.
-
CS0687: Chyba: Kvalifikátor
::aliasu oboru názvů se vždy překládá na typ nebo obor názvů, a proto je zde neplatný. Zvažte použití.místo toho. - CS1022: Chyba: Typ nebo definice oboru názvů nebo očekávaný konec souboru.
- CS1529: Chyba: Klauzule using musí předcházet všem ostatním prvkům definovaným v oboru názvů kromě deklarací externích aliasů.
- CS1537: Chyba: Alias 'alias' se již dříve objevil v tomto jmenném prostoru.
- CS1671: Chyba: Deklarace oboru názvů nemůže obsahovat modifikátory nebo atributy.
- CS1679: Chyba: Neplatný externí alias pro /reference; Identifikátor není platný identifikátor.
- CS1680: Chyba: Neplatná možnost aliasu odkazu: alias=, chybí název souboru.
- CS1681: Chyba: Globální externí alias nelze předefinovat.
- CS1730: Chyba: Atributy sestavení a modulu musí předcházet všem ostatním prvkům definovaným v souboru s výjimkou klauzulí using a externích deklarací aliasů.
- CS2034: Chyba: Možnost /odkaz, která deklaruje externí alias, může mít pouze jeden název souboru. Pokud chcete zadat více aliasů nebo názvů souborů, použijte více možností /reference.
- CS7000: Chyba: Neočekávané použití aliasovaného názvu
-
CS7007: Chyba: Direktiva
using staticlze použít pouze u typů. Místo toho zvažte direktivuusing namespace. - CS7015: Chyba: Extern alias není v tomto kontextu platný.
- CS7021: Chyba: Nelze deklarovat obor názvů v kódu skriptu.
- CS8083: Chyba: Název kvalifikovaný aliasem není výraz.
- CS8085: Chyba: K deklaraci aliasu nelze použít direktivu using static.
- CS8914: Chyba: Globální direktivu using nelze použít v deklaraci oboru názvů.
- CS8915: Chyba: Globální direktiva using musí předcházet všem neglobálním direktivám using.
- CS8954: Chyba: Zdrojový soubor může obsahovat pouze jednu deklaraci prostoru názvů omezenou na soubor.
- CS8955: Chyba: Zdrojový soubor nemůže obsahovat deklarace souborově orientovaných oborů názvů a zároveň normální deklarace oborů názvů.
- CS8956: Chyba: Obor názvů omezený na soubor musí předcházet všem ostatním členům v souboru.
-
CS9130: Chyba: Alias nemůže být použit jako typ
ref. -
CS9131: Chyba: Pouze alias using může být
unsafe. - CS9132: Chyba: Použití aliasu nemůže být nulovatelným referenčním typem.
-
CS9133: Chyba: modifikátor
staticmusí předcházet modifikátoruunsafe. - CS9162: Typ není platný pro použití statického typu. Lze použít pouze třídu, strukturu, rozhraní, výčt, delegát nebo obor názvů.
A následující upozornění kompilátoru:
- CS0105: Upozornění: Direktiva using pro jmenný prostor už byla použita v tomto prostoru názvů.
- CS0435: Upozornění: Obor názvů 'namespace' v 'assembly' je v konfliktu s importovaným typem 'type' v 'assembly'. Používá se obor názvů definovaný v 'assembly'.
- CS0436: Upozornění: Typ 'type' v 'assembly' je v konfliktu s importovaným typem 'type2' v 'assembly'. Používá se typ definovaný v 'assembly'.
- CS0437: Upozornění: Typ 'type' v 'sestavení2' je v konfliktu s importovaným oborem názvů 'namespace' v 'sestavení1'. Použit je typ definovaný v 'sestavení'.
-
CS0440: Upozornění: Definování pojmenovaného
globalaliasu je špatně doporučeno, protožeglobal::vždy odkazuje na globální obor názvů, nikoli alias. - CS8019: Informace: Nepotřebné použití direktivy.
- CS8020: Informace: Nepoužitý extern alias.
- CS8933: Informace: Direktiva using se dříve objevila jako globální použití.
Tyto chyby a upozornění označují problémy se using direktivami, deklaracemi oboru názvů nebo konflikty názvů mezi typy a obory názvů. Následující části popisují tyto chyby a jejich opravu.
Direktiva používání
Následující chyby se týkají using direktiv:
- CS0105: Direktiva using pro obor názvů se objevila dříve v tomto oboru názvů.
- CS0430: Externí alias alias alias nebyl zadán v parametru /reference.
- CS0439: Deklarace externího aliasu musí předcházet všem ostatním prvkům definovaným v oboru názvů.
- CS1529: Klauzule using musí předcházet všem ostatním prvkům definovaným v oboru názvů s výjimkou deklarací externích aliasů.
- CS1679: Neplatný externí alias pro /reference; Identifikátor není platný identifikátor.
- CS1680: Neplatná možnost aliasu odkazu: alias=, chybí název souboru.
- CS1681: Globální externí alias nelze předefinovat.
- CS1730: Atributy sestavení a modulu musí předcházet všem ostatním prvkům definovaným v souboru s výjimkou klauzulí using a deklarací externích aliasů.
- CS2034: Možnost /reference, která deklaruje externí alias, může mít pouze jeden název souboru. Pokud chcete zadat více aliasů nebo názvů souborů, použijte více možností /reference.
- CS7015: Extern alias není v tomto kontextu platný.
- CS8019: Nepotřebné použití direktivy.
- CS8020: Nepoužitý extern alias.
- CS8933: Direktiva using se dříve objevila jako globální using.
Pravidla, která řídí tyto diagnostiky, naleznete v referenčních informacích k jazykovým prvkům direktiva using a extern alias. Mezi potenciální opravy patří:
- Přesuňte všechny direktivy
usingna začátek souboru nebo na začátek deklarace jmenného prostoru. Jazyk C# vyžadujeusing, aby direktivy byly umístěny před další prvky v oboru názvů (CS1529). - Přesuňte všechny
extern aliasdeklarace před jakékoliusingdirektivy. Jazyk vyžaduje externí aliasy před všemi ostatními prvky, včetněusingdirektiv (CS0439, CS7015). - Přesuňte všechny atributy na úrovni sestavení a modulu za
usingklauzule aextern aliasdeklarace, ale před jakékoli deklarace typu. Atributy musí dodržovat direktivy, ale musí předcházet typům (CS1730). - Ujistěte se, že každá
extern aliasdeklarace ve zdrojovém kódu má odpovídající alias definovaný v možnostech odkazu projektu. Kompilátor nemůže přeložit alias, který nebyl zadán (CS0430). - Pro každý externí alias použijte samostatnou
/referencemožnost místo kombinování více aliasů v jedné možnosti. Kompilátor vyžaduje jeden alias pro každou možnost odkazu (CS2034). - Ujistěte se, že je alias ve vaší
/referencemožnosti platný identifikátor jazyka C#. Alias musí dodržovat pravidla pojmenování identifikátorů (CS1679). Pro možnost odkazu aliasu zadejte název souboru za znak=. Kompilátor potřebuje vědět, na které sestavení alias odkazuje (CS1680). - Nepokoušejte se předefinovat externí
globalalias.globalje předdefinovaný alias, který se odkazuje na všechny nealiasované odkazy (CS1681). - Odeberte duplicitní
usingdirektivy. Kompilátor upozorní, když se stejný obor názvů naimportuje vícekrát (CS0105, CS8019, CS8933). - Odeberte nepoužívané
extern aliasdeklarace. Kompilátor vydá diagnostiku, když je externí alias deklarován, ale nikdy se na váš kód neodkazuje (CS8020).
Použití statické direktivy
Následující chyby se týkají using static direktiv:
- CS0138: Direktivu oboru názvů using lze použít pouze na obory názvů; 'type' je typ, který není oborem názvů.
-
CS7007: Direktivu
using staticlze použít pouze u typů. Místo toho zvažte direktivuusing namespace. -
CS9133:
staticmodifikátor musí předcházetunsafemodifikátoru. - CS9162: Typ není platný pro použití statického typu. Lze použít pouze třídu, strukturu, rozhraní, výčt, delegát nebo obor názvů.
Informace o pravidlech, která řídí tyto diagnostiky, najdete v referenčních informacích k jazyku statické direktivy . Mezi potenciální opravy patří:
- Při přímém importu
staticčlenů typu přidejte modifikátor, protože vynechánístaticříká kompilátoru, že importujete obor názvů místo typu (CS0138). -
staticPři importu oboru názvů odeberte modifikátor, protožeusing staticho lze použít pouze u typů, nikoli na obory názvů (CS7007). Zajistěte, aby cílemusing staticdirektivy byla třída, struktura, rozhraní, výčet nebo delegát, protože jiné typy nejsou platnými cíli pro statické importy (CS9162). - Umístěte modifikátor
staticpřed modifikátorunsafepři kombinování obou, protože jazyk vyžaduje modifikátory v určitém pořadí (CS9133).
Globální direktiva using
Následující chyby se týkají global using direktiv:
- CS8914: Globální direktivu using nelze použít v deklaraci oboru názvů.
- CS8915: Globální direktiva using musí předcházet všem neglobálním direktivám using.
Informace o pravidlech, která řídí tyto diagnostiky, najdete v referenčních informacích k jazyce příkazu global using. Mezi potenciální opravy patří:
- Přesuňte
global usingdirektivy mimo jakoukoli deklaraci oboru názvů na úroveň souboru, protože globální direktivy platí pro celý projekt a nelze je vymezit pouze na obor názvů (CS8914). -
global usingVšechny direktivy umístěte před jakékoli jiné než globálníusingdirektivy v souboru, protože jazyk vyžaduje, aby před místními direktivy (CS8915) předchází globální direktivy. - Všimněte si, že direktiva
static global usingnemůže odkazovat na místní typ souboru .
Jmenný prostor ohraničený souborem
Následující chyby se týkají oborů názvů s oborem souborů:
- CS8954: Zdrojový soubor může obsahovat pouze jednu deklaraci oboru názvů s rozsahem souboru.
- CS8955: Zdrojový soubor nemůže obsahovat deklarace oboru názvů na úrovni souboru a zároveň běžného oboru názvů.
- CS8956: Namespace souboru musí předcházet všem ostatním členům.
Pravidla, která řídí tyto diagnostiky, naleznete v referenční dokumentaci k soborově omezenému oboru názvů. Mezi potenciální opravy patří:
- Pro každý soubor použijte pouze jednu deklaraci oboru názvů s oborem souborů, protože jazyk umožňuje nastavit obor názvů pouze pro všechny typy v souboru (CS8954).
- Zvolte buď deklaraci oboru názvů s oborem platným pro soubor nebo s oborem platným pro blok v rámci jednoho souboru, protože jazyk neumožňuje oba styly zkombinovat (CS8955).
- Přesuňte deklaraci oboru názvů s oborem souborů před deklarace typu, protože obor názvů musí být vytvořen před deklarací typů (CS8956).
Kvalifikátor aliasů
Následující chyby souvisejí s kvalifikátorem aliasu:
-
CS0431: Nelze použít alias "identifikátor"
::, protože alias odkazuje na typ. Použijte.místo toho. - CS0432: Alias identifikátor nebyl nalezen.
-
CS0440: Definování pojmenovaného
globalaliasu se nedoporučuje, protožeglobal::vždy odkazuje na globální obor názvů, nikoli alias. -
CS0687: Kvalifikátor
::aliasu oboru názvů se vždy překládá na typ nebo obor názvů, proto je zde neplatný. Místo toho zvažte použití. - CS7000: Neočekávané použití aliasovaného názvu
- CS8083: Název kvalifikovaný alias-em není výraz.
Najděte pravidla, která řídí tyto diagnostiky, v jazykové referenci k kvalifikátoru aliasu oboru názvů. Mezi potenciální opravy patří:
- Nahradit operátor
::operátorem.při přístupu k členům aliasu typu, protože kvalifikátor::je platný pouze pro aliasy oboru názvů, nikoli pro aliasy typu (CS0431, CS0687). - Ujistěte se, že je odkazovaný alias deklarován direktivou
using, neboextern alias, protože kompilátor nedokáže rozpoznat nedefinovaný alias (CS0432). - Kvalifikátor aliasu použijte pouze v kontextech, kde se očekává název typu nebo oboru názvů, protože kvalifikované názvy aliasů nejsou platné jako výrazy (CS7000, CS8083).
- Místo toho
globalzvolte jiný název aliasu, protožeglobalje vyhrazený pro odkazování na globální obor názvů a nelze jej znovu definovat (CS0440).
Použití omezení aliasů
Následující chyby se týkají omezení používání aliasů:
- CS0576: Jmenný prostor 'namespace' obsahuje definici, která je v konfliktu s aliasem 'identifikátor'.
- CS1537: V tomto oboru názvů se dříve objevil alias 'alias'.
- CS8085: Direktivu using static nelze použít k deklaraci aliasu.
-
CS9130: Alias nelze použít jako
reftyp. -
CS9131: Jenom alias použití může být
unsafe. - CS9132: Použití aliasu nelze být typem odkazu, který může mít hodnotu null.
Informace o pravidlech, která řídí tyto diagnostiky, najdete v jazykové referenci k using alias. Mezi potenciální opravy patří:
- Zvolte jedinečný název pro svůj alias, který není v konfliktu s existujícími názvy typů nebo oboru názvů, kvůli tomu, že kompilátor nemůže rozlišovat mezi aliasem a existující definicí (CS0576).
- Každý název aliasu použijte pouze jednou v rámci oboru názvů, protože duplicitní deklarace aliasů vytvářejí nejednoznačnost (CS1537).
- Při deklarování aliasu
staticodeberte modifikátor, protože aliasy a statické importy se vzájemně vylučují – buď se používajíusing statick importu členů, nebousing Alias =k vytvoření aliasu, ale ne k obojímu (CS8085).
Počínaje jazykem C# 12 platí následující omezení pro používání aliasů:
- Nepoužívejte
ref,inanioutmodifikátory v aliasu using, protože tyto modifikátory parametrů nejsou platné v kontextech aliasů typu (CS9130). -
unsafeModifikátor použijte pouze u aliasů, které odkazují na typy ukazatelů nebo direktivyusing static, protožeunsafebez aliasu nebo statického importu není povolen (CS9131). - Při vytváření aliasu k odkazovému typu použijte nenulovatelný odkazový typ, protože nulovatelné odkazové typy nelze aliasovat přímo (CS9132).
Deklarace jmenného prostoru
Následující chyby se vztahují k pravidlům deklarace oboru názvů:
- CS0116: Obor názvů nemůže přímo obsahovat členy, jako jsou pole, metody nebo příkazy.
- CS1022: Typ nebo definice oboru názvů, nebo očekávaný konec souboru.
- CS1671: Deklarace oboru názvů nemůže obsahovat modifikátory ani atributy.
- CS7021: Nelze deklarovat obor názvů v kódu skriptu.
Podívejte se na klíčové slovo oboru názvů a Obecná struktura programu C# v jazykové referenci, kde najdete pravidla, která řídí tyto diagnostiky. Mezi potenciální opravy patří:
- Zajistěte, aby všechny metody, pole a vlastnosti byly deklarovány uvnitř typu (třída, struktura, záznam nebo rozhraní) místo přímo uvnitř oboru názvů, protože obory názvů můžou obsahovat pouze deklarace typů, vnořené obory názvů a
usingdirektivy (CS0116). - Zkontrolujte neshodované složené závorky ve zdrojovém souboru, protože nadbytečná pravá složená závorka po definici oboru názvů nebo typu způsobí chybu, když kompilátor na konci souboru narazí na neočekávaný obsah (CS1022).
- Odeberte všechny modifikátory přístupu nebo atributy z deklarací oboru názvů, protože obory názvů nepodporují modifikátory jako
publicneboprivatea atributy nelze u nich použít (CS1671). - Přesun deklarací oboru názvů ze souborů skriptů jazyka C# (
.csx) a do běžných zdrojových souborů (.cs), protože kód skriptu se vyhodnocuje v jednom kontextu spuštění, který nepodporuje deklarace oborů názvů (CS7021).
Konflikty v namespaces a pojmenování typů
Chyby a upozornění, jež následují, se týkají konfliktů mezi názvy v oborech a typy.
- CS0104: 'odkaz' je nejasný mezi 'identifikátorem' a 'identifikátorem'.
- CS0434: Obor názvů NamespaceName1 v NamespaceName2 je v konfliktu s typem TypeName1 v NamespaceName3.
- CS0435: Obor názvů 'namespace' v 'assembly' je v konfliktu s importovaným typem 'type' v 'assembly'. Používá se obor názvů definovaný v 'assembly'.
- CS0436: Typ 'type' v 'assembly' je v konfliktu s importovaným typem 'type2' v 'assembly'. Použití typu definovaného v 'assembly'.
- CS0437: Typ 'type' v 'sestavení2' je v konfliktu s importovaným oborem názvů 'namespace' v 'sestavení1'. Použití typu definovaného v 'sestavení'.
- CS0438: Typ "type" v „module_1“ je v konfliktu s jmenným prostorem „namespace“ v „module_2“.
Prozkoumejte příručku jazyka k using directive, extern alias a namespace alias qualifier pro pravidla, která řídí tyto diagnostiky. Mezi potenciální opravy patří:
- Pokud váš kód odkazuje na název, který existuje ve více importovaných oborech názvů, použijte plně kvalifikovaný název nebo alias oboru názvů .
- Kompilátor nemůže určit, který typ chcete použít, pokud se stejný název zobrazí ve dvou nebo více oborech názvů importovaných direktivami
using(CS0104). - Přejmenujte typ nebo obor názvů, pokud importovaný typ a importovaný vnořený obor názvů sdílí stejný plně kvalifikovaný název. Kompilátor mezi nimi nemůže rozlišovat při odkazování na název (CS0434, CS0438).
Pokud chcete vyřešit upozornění na konfliktní názvy, přejmenujte jednu z konfliktních deklarací, použijte jiný obor názvů, odeberte nepotřebný odkaz na sestavení nebo použijte extern alias k rozlišení mezi těmito dvěma definicemi. Kompilátor tyto konflikty vyřeší automaticky – pomocí místně definovaného oboru názvů nad importovaným typem (CS0435), místně definovaným typem nad importovaným typem (CS0436) nebo místně definovaným typem v importovaném oboru názvů (CS0437), ale upozornění značí potenciální zdroj nejasností, které byste měli řešit.
Importy předdefinovaných typů
Následující chyba souvisí s chybějícími předdefinovanými definicemi typu:
- CS0518: Předdefinovaný typ Type není definován nebo importován.
Poznámka:
Toto upozornění se hlásí pouze během explicitních operací sestavení nebo opětovného sestavení . Nezobrazuje se během psaní v integrovaném vývojovém prostředí jako součást diagnostiky IntelliSense. To znamená, že pokud upozornění opravíte použitím pole nebo jeho odstraněním, upozornění může v seznamu chyb zůstat, dokud projekt znovu nepostavíte nebo nepřestavíte.
Referenční informace k jazyku možností kompilátoru NoStandardLib najdete v pravidlech, která řídí tuto diagnostiku.
Ověřte, že projekt cílí na správný modul runtime .NET. Předdefinované typy jako System.Int32 a System.String pocházejí z knihovny modulu runtime. Nesprávná nebo chybějící <TargetFramework> specifikace brání kompilátoru v hledání těchto typů (CS0518). Ujistěte se, že <TargetFramework> vlastnost v .csproj souboru určuje zamýšlený runtime (například net10.0). Nezadávejte možnost kompilátoru NoStandardLib, pokud nemáte v úmyslu definovat vlastní System obor názvů. Tato možnost zabraňuje importu standardní knihovny, která definuje všechny předdefinované typy (CS0518). Pokud chyba přetrvává, zkuste znovu načíst projekt ve Visual Studio, odstranit složky obj a bin, znovu sestavit projekt nebo přeinstalovat runtime prostředí .NET (CS0518).