Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Silne nazewnictwo odnosi się do podpisywania zestawu za pomocą klucza, tworząc zestaw o silnej nazwie. Gdy zestaw ma silną nazwę, tworzy unikatową tożsamość na podstawie nazwy i numeru wersji zestawu i może pomóc w zapobieganiu konfliktom zestawów.
Wadą silnej nazwy jest to, że program .NET Framework w systemie Windows wymusza ścisłe ładowanie zestawów, gdy zestaw ma silną nazwę. Odwołanie do zestawu o silnej nazwie musi dokładnie odpowiadać wersji załadowanego zestawu, co zmusza deweloperów do konfigurowania przekierowań powiązań podczas korzystania z zestawu:
<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>
Gdy deweloperzy platformy .NET narzekają na silne nazewnictwo, zwykle narzekają na ścisłe ładowanie zestawów. Na szczęście ten problem dotyczy tylko programu .NET Framework. .NET 5+, .NET Core, UWP i większość innych implementacji platformy .NET nie ma ścisłego ładowania zestawów, co jest główną wadą silnego nazewnictwa.
Jednym z ważnych aspektów silnego nazewnictwa w programie .NET Framework jest to, że jest to wirusowe: zestaw o silnej nazwie może odwoływać się tylko do innych zestawów o silnych nazwach. Jeśli biblioteka nie ma silnej nazwy, aplikacje i biblioteki programu .NET Framework, które wymagają silnego nazewnictwa, nie mogą jej używać.
Zalety silnego nazewnictwa na platformie .NET Framework to:
- Zestaw może być przywoływany i używany przez inne zestawy o silnymi nazwami.
- Zestaw można przechowywać w globalnej pamięci podręcznej zestawów (GAC).
- Zestaw można załadować obok innych wersji zestawu. Ładowanie zestawów równoległych jest często wymagane przez aplikacje z architekturami wtyczek.
Silne nazewnictwo nie ma żadnych korzyści na platformie .NET Core/5+. Kompilator języka C# tworzy ostrzeżenie CS8002 dla zestawów o silnych nazwach odwołujących się do zestawów bez silnych nazw. Należy pominąć to ostrzeżenie dla bibliotek przeznaczonych tylko dla platformy .NET Core/5+.
Tworzenie podpisanych kryptograficznie bibliotek .NET
Należy nadać silnej nazwie biblioteki .NET typu open source, jeśli ich cele obejmują program .NET Framework lub .NET Standard. Silne nazewnictwo nie jest wymagane w przypadku bibliotek przeznaczonych tylko dla platformy .NET Core/5+.
Uwaga / Notatka
Te wskazówki są specyficzne dla publicznie rozproszonych bibliotek .NET, takich jak biblioteki platformy .NET opublikowane w NuGet.org. Silne nazewnictwo nie jest wymagane przez większość aplikacji platformy .NET i nie powinno być wykonywane domyślnie.
✔️ ROZWAŻ silne nazewnictwo zestawów biblioteki.
✔️ ROZWAŻ dodanie silnej pary kluczy nazewnictwa (publiczne i prywatne) do systemu kontroli źródła.
Para publicznie dostępnych kluczy umożliwia deweloperom modyfikowanie i ponowne kompilowanie kodu źródłowego biblioteki przy użyciu tego samego klucza.
Nie należy upowszechniać silnej pary kluczy, jeśli została ona użyta w przeszłości do udzielania specjalnych uprawnień w scenariuszach częściowego zaufania. W przeciwnym razie można naruszyć bezpieczeństwo istniejących środowisk.
Jeśli nie możesz zaewidencjonować pary kluczy publicznych i prywatnych, zaewidencjonuj klucz publiczny i użyj podpisywania publicznego do regularnych kompilacji. Podpisywanie publiczne nadal umożliwia deweloperom ponowne kompilowania i używania biblioteki w większości scenariuszy.
Ważne
Gdy pożądana jest identyfikacja wydawcy kodu, zaleca się użycie Authenticode i Podpisywania Pakietów NuGet. Zabezpieczenia dostępu kodu (CAS) nie powinny być używane jako środek zaradczy w zakresie bezpieczeństwa.
✔️ ROZWAŻ zwiększanie wersji zestawu tylko przy dużych zmianach wersji, aby ułatwić użytkownikom zmniejszenie liczby przekierowań powiązań i częstotliwości ich aktualizowania.
Przeczytaj więcej na temat wersjonowania i wersji zestawu.
❌ NIE dodawaj, usuwaj ani zmieniaj silnego klucza nazewnictwa.
Modyfikowanie silnego klucza nazewnictwa zestawu zmienia tożsamość zestawu i przerywa skompilowany kod, który go używa. Więcej informacji znajdziesz w zmianach powodujących niezgodność binarną.
❌ NIE należy publikować wersji biblioteki o silnych nazwach ani bez silnych nazw. Przykład: Contoso.Api
i Contoso.Api.StrongNamed
.
Publikowanie dwóch pakietów dzieli ekosystem dewelopera. Ponadto, jeśli aplikacja zależy od obu pakietów, deweloper może napotkać konflikty nazw typów. Jeśli chodzi o platformę .NET, są one różne typy w różnych zestawach.