Silne nazewnictwo
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ą silnego nazewnictwa jest to, że program .NET Framework w systemie Windows umożliwia ścisłe ładowanie zestawów, gdy zestaw jest silny. 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 jest izolowany do programu .NET Framework. .NET 5+, .NET Core, Xamarin, 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łyny i używany przez inne zestawy o silnych nazwach.
- 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 w programie .NET Core/5+. Kompilator języka C# tworzy ostrzeżenie CS8002 dla zestawów o silnych nazwach odwołujące się do zestawów o nie silnych nazwach. Należy pominąć to ostrzeżenie dla bibliotek przeznaczonych tylko dla platformy .NET Core/5+.
Tworzenie silnych bibliotek platformy .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
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 silnego klucza nazewnictwa do systemu kontroli źródła.
Klucz dostępny publicznie umożliwia deweloperom modyfikowanie i ponowne kompilowanie kodu źródłowego biblioteki przy użyciu tego samego klucza.
Nie należy upublicznić silnego klucza nazewnictwa, jeśli został on użyty w przeszłości w celu udzielenia specjalnych uprawnień w scenariuszach częściowego zaufania. W przeciwnym razie można naruszyć bezpieczeństwo istniejących środowisk.
Ważne
Gdy tożsamość wydawcy kodu jest wymagana, zalecane są podpisywanie pakietów Authenticode i NuGet. Zabezpieczenia dostępu kodu (CAS) nie powinny być używane jako środki zaradcze zabezpieczeń.
✔️ ROZWAŻ zwiększanie wersji zestawu tylko w przypadku zmian wersji głównych, aby ułatwić użytkownikom zmniejszenie przekierowań powiązań i częstotliwość ich aktualizowania.
Przeczytaj więcej na temat przechowywania wersji 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. Aby uzyskać więcej informacji, zobacz zmiany powodujące niezgodność binarną.
❌ NIE należy publikować wersji biblioteki o silnych nazwach i nieopartych na silnych nazwach. Przykład: Contoso.Api
i Contoso.Api.StrongNamed
.
Publikowanie dwóch pakietów rozwidlenia środowiska dewelopera. Ponadto jeśli aplikacja kończy się w zależności 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.