Erős elnevezés

Az erős elnevezés azt jelenti, hogy egy szerelvényt egy kulccsal ír alá, és egy erős nevű szerelvényt hoz létre. Ha egy szerelvény neve erős, a név és a szerelvény verziószáma alapján egyedi identitást hoz létre, és segít megelőzni a szerelvényütközéseket.

Az erős elnevezés hátránya, hogy a Windows .NET-keretrendszer lehetővé teszi a szerelvények szigorú betöltését, ha egy szerelvény neve erős. Az erős névvel ellátott szerelvényhivatkozásnak pontosan meg kell egyeznie a betöltött szerelvény verziójával, így a fejlesztőknek kötelező átirányításokat kell konfigurálnia a szerelvény használatakor:

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

Amikor a .NET-fejlesztők az erős elnevezésre panaszkodnak, általában a szigorú szerelvénybetöltésről panaszkodnak. Szerencsére ez a probléma el van különítve a .NET-keretrendszer. A .NET 5+, a .NET Core, a Xamarin, az UWP és a legtöbb más .NET-implementáció nem rendelkezik szigorú szerelvénybetöltéssel, ami az erős elnevezés fő hátránya.

Az erős elnevezés egyik fontos aspektusa a .NET-keretrendszer, hogy vírusos: az erős nevű szerelvény csak más, erős nevű szerelvényekre hivatkozhat. Ha a kódtár neve nem erős, akkor .NET-keretrendszer erős elnevezést igénylő alkalmazások és tárak nem használhatják.

Az erős elnevezés előnyei a .NET-keretrendszer a következők:

  1. A szerelvényre hivatkozhat és használhatja más erős nevű szerelvények.
  2. A szerelvény a globális szerelvény-gyorsítótárban (GAC) tárolható.
  3. A szerelvény egymás mellett tölthető be a szerelvény más verzióival együtt. A beépülő modularchitektúrákkal rendelkező alkalmazások gyakran igénylik az egymás melletti szerelvénybetöltést.

Az erős elnevezésnek nincs előnye a .NET Core/5+-on. A C# fordító cs8002 figyelmeztetést állít elő a nem erős nevű szerelvényekre hivatkozó erős nevű szerelvényekre. Ezt a figyelmeztetést érdemes mellőzni olyan kódtárak esetében, amelyek csak a .NET Core/5+ verziót célják.

Erős nevű .NET-kódtárak létrehozása

A nyílt forráskódú .NET-kódtáraknak erős nevet kell adnia, ha a céljuk .NET-keretrendszer vagy .NET Standard. A csak .NET Core/5+ verziót megcélzó kódtárakhoz nincs szükség erős elnevezésre.

Feljegyzés

Ez az útmutató a nyilvánosan elosztott .NET-kódtárakra vonatkozik, például a NuGet.org közzétett .NET-kódtárakra. A legtöbb .NET-alkalmazás nem igényel erős elnevezést, ezért alapértelmezés szerint nem szabad elvégezni.

✔️ FONTOLJA meg a kódtár szerelvények erős elnevezését.

✔️ VEGYE FONTOLÓRA, hogy hozzáadja az erős elnevezési kulcsot a forrásvezérlő rendszerhez.

A nyilvánosan elérhető kulcsokkal a fejlesztők módosíthatják és újrafordíthatja a kódtár forráskódját ugyanazzal a kulccsal.

Nem szabad nyilvánossá tenni az erős elnevezési kulcsot, ha azt a múltban használták a részleges megbízhatósági forgatókönyvek speciális engedélyeinek adására. Ellenkező esetben veszélyeztetheti a meglévő környezeteket.

Fontos

Ha a kód közzétevőjének identitása szükséges, az Authenticode és a NuGet-csomagaláírás ajánlott. A Code Access Security (CAS) nem használható biztonsági kockázatcsökkentésként.

✔️ Fontolja meg a szerelvény verziószámának növelését csak a főverzió módosításain, így a felhasználók csökkenthetik a kötésátirányításokat, és hogy milyen gyakran frissülnek.

További információ a verziószámozásról és a szerelvény verziójáról.

❌ NE adja hozzá, távolítsa el vagy módosítsa az erős elnevezési kulcsot.

A szerelvény erős elnevezési kulcsának módosítása megváltoztatja a szerelvény identitását, és megszakítja az azt használó lefordított kódot. További információkért lásd a bináris kompatibilitástörő változásokat.

❌ NE tegye közzé a kódtár erősnevű és nem erős nevű verzióit. Például: Contoso.Api és Contoso.Api.StrongNamed.

Két csomag közzététele elágaztathatja a fejlesztői ökorendszert. Ha egy alkalmazás mindkét csomagtól függően végződik, a fejlesztő típusnévütközésekbe ütközhet. Ami a .NET-et illeti, ezek különböző típusúak a különböző szerelvényekben.