Sdílet prostřednictvím


Silné názvy

Silné pojmenování odkazuje na podepsání sestavení pomocí klíče, čímž vzniká sestavení se silným názvem. Když má sestavení silné jméno, vytvoří jedinečnou identitu založenou na názvu a čísle verze sestavení a může pomoci zabránit konfliktům mezi sestaveními.

Nevýhodou silného názvosloví je, že rozhraní .NET Framework ve Windows umožňuje striktní načítání sestavení po jeho silném pojmenování. Odkaz na sestavení se silným názvem musí přesně odpovídat verzi načteného sestavení, aby vývojáři při použití sestavení konfigurovali přesměrování vazby:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="myAssembly" publicKeyToken="32ab4ba45e0a69a1" culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

Když si vývojáři .NET stěžují na silné pojmenování, obvykle si stěžují na striktní načítání sestavení. Naštěstí je tento problém izolovaný na rozhraní .NET Framework. .NET 5+, .NET Core, UWP a většina ostatních implementací .NET nemá přísné načítání sestavení, což je hlavní nevýhodou silného názvování.

Jedním z důležitých aspektů silného pojmenování v rozhraní .NET Framework je to, že je virální: sestavení se silným názvem může odkazovat pouze na jiná sestavení se silným názvem. Pokud vaše knihovna není silně pojmenovaná, aplikace a knihovny rozhraní .NET Framework, které potřebují silné pojmenování, ji nemůžou používat.

Výhody silného pojmenování v rozhraní .NET Framework jsou:

  1. Na sestavení mohou odkazovat a používat ho další sestavení se silným názvem.
  2. Sestavení lze uložit do globální mezipaměti sestavení (GAC).
  3. Sestavení lze načíst souběžně s jinými verzemi sestavení. Souběžné načítání komponent je běžně vyžadováno aplikacemi s plug-in architekturami.

Silné pojmenování nemá žádné výhody pro .NET Core/5+. Kompilátor jazyka C# vytváří upozornění CS8002 pro sestavení se silným názvem odkazující na sestavení, která nemají silný název. U knihoven, které cílí jenom na .NET Core/5 nebo novější, je dobré toto upozornění potlačit.

Vytvoření silných pojmenovaných knihoven .NET

Měli byste své opensourcové knihovny .NET opatřit silným jménem, pokud jejich cíle zahrnují .NET Framework nebo .NET Standard. Pro knihovny, které cílí jenom na .NET Core/5 nebo novější, se nevyžaduje silné pojmenování.

Poznámka

Tyto pokyny jsou specifické pro veřejně distribuované knihovny .NET, jako jsou knihovny .NET publikované na NuGet.org. Většina aplikací .NET nevyžaduje silné pojmenování a nemělo by se ve výchozím nastavení provádět.

✔️ ZVAŽTE silné pojmenování sestavení knihovny.

✔️ ZVAŽTE přidání silného klíče pro pojmenování do systému správy zdrojového kódu.

Veřejně dostupný klíč umožňuje vývojářům upravovat a překompilovat zdrojový kód knihovny se stejným klíčem.

Neměli byste zpřístupnit silný klíč pro pojmenování, pokud byl v minulosti použit k udělení zvláštních oprávnění ve scénářích s částečnou důvěryhodností . V opačném případě můžete ohrozit stávající prostředí.

Důležitý

Pokud je požadována identita vydavatele kódu, doporučujeme Authenticode a podepisování balíčků NuGet. Zabezpečení přístupu kódu (CAS) by se nemělo používat jako omezení zabezpečení.

✔️ ZVAŽTE zvýšení verze sestavení pouze u změn hlavních verzí, což uživatelům pomáhá omezit přesměrování vazeb a snižuje četnost jejich aktualizací.

Přečtěte si další informace o verzování a sestavení.

❌ NEPŘIDÁVEJTE, NEODSTRAŇUJTE ani NEMĚŇTE silný klíč pro pojmenování.

Úprava silného klíče pojmenování sestavení změní identitu sestavení a přeruší zkompilovaný kód, který ho používá. Pro více informací viz zpětně nekompatibilní binární změny.

❌ NEpublikujte verze své knihovny se silným názvem ani bez něj. Například Contoso.Api a Contoso.Api.StrongNamed.

Publikováním dvou balíčků se vytvoří fork vašeho vývojářského ekosystému. Pokud aplikace nakonec závisí na obou balíčcích, může vývojář narazit na konflikty názvů typů. Pokud jde o .NET, jedná se o různé typy v různých sestaveních.