Řešení upozornění souvisejících s používáním a deklarováním jmenných prostorů

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 static lze použít pouze u typů. Místo toho zvažte direktivu using 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 static musí předcházet modifikátoru unsafe.
  • 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 global aliasu je špatně doporučeno, protože global:: 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 using na začátek souboru nebo na začátek deklarace jmenného prostoru. Jazyk C# vyžaduje using, aby direktivy byly umístěny před další prvky v oboru názvů (CS1529).
  • Přesuňte všechny extern alias deklarace před jakékoli using direktivy. Jazyk vyžaduje externí aliasy před všemi ostatními prvky, včetně using direktiv (CS0439, CS7015).
  • Přesuňte všechny atributy na úrovni sestavení a modulu za using klauzule a extern alias deklarace, 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 alias deklarace 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 /reference mož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ší /reference mož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í global alias. global je předdefinovaný alias, který se odkazuje na všechny nealiasované odkazy (CS1681).
  • Odeberte duplicitní using direktivy. Kompilátor upozorní, když se stejný obor názvů naimportuje vícekrát (CS0105, CS8019, CS8933).
  • Odeberte nepoužívané extern alias deklarace. 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 static lze použít pouze u typů. Místo toho zvažte direktivu using namespace .
  • CS9133: static modifikátor musí předcházet unsafe modifiká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).
  • static Při importu oboru názvů odeberte modifikátor, protože using static ho lze použít pouze u typů, nikoli na obory názvů (CS7007). Zajistěte, aby cílem using static direktivy 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 static před modifikátor unsafe př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 using direktivy 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 using Všechny direktivy umístěte před jakékoli jiné než globální using direktivy 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 using nemůž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 global aliasu se nedoporučuje, protože global:: 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 , nebo extern 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že global je 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 ref typ.
  • 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 static odeberte modifikátor, protože aliasy a statické importy se vzájemně vylučují – buď se používají using static k importu členů, nebo using 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, inani out modifikátory v aliasu using, protože tyto modifikátory parametrů nejsou platné v kontextech aliasů typu (CS9130).
  • unsafe Modifikátor použijte pouze u aliasů, které odkazují na typy ukazatelů nebo direktivyusing static, protože unsafe bez 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 using direktivy (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 public nebo privatea 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).