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:
- A szerelvényre hivatkozhat és használhatja más erős nevű szerelvények.
- A szerelvény a globális szerelvény-gyorsítótárban (GAC) tárolható.
- 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.