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:

  1. Zestaw może być przywołyny i używany przez inne zestawy o silnych nazwach.
  2. Zestaw można przechowywać w globalnej pamięci podręcznej zestawów (GAC).
  3. 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.