Udostępnij za pośrednictwem


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ą 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:

  1. Zestaw może być przywoływany i używany przez inne zestawy o silnymi nazwami.
  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 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.