Aracılığıyla paylaş


Güçlü adlandırma

Güçlü adlandırma, bir derlemeyi bir anahtarla imzalamayı ve güçlü adla imzalanmış bir derleme oluşturmayı ifade eder. Bir derleme güçlü adla adlandırıldığında, adı ve derleme sürüm numarasına dayalı benzersiz bir kimlik oluşturur ve derleme çakışmalarını önlemeye yardımcı olabilir.

Güçlü adlandırmanın dezavantajı, Windows üzerinde .NET Framework'ün bir derleme güçlü adlandırıldığında derlemelerin sıkı bir şekilde yüklenmesini etkinleştirmesidir. Güçlü adına sahip bir derleme başvurusu, yüklenen derlemenin sürümüyle tam olarak eşleşmelidir ve bu durum, geliştiricileri derlemeyi kullanırken bağlama yeniden yönlendirmelerini yapılandırmak zorunda bırakır:

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

.NET geliştiricileri güçlü adlandırmadan şikayet ettiğinde, genellikle şikayet ettikleri şey katı derleme yüklemedir. Neyse ki, bu sorun .NET Framework'e yalıtılmış. .NET 5+, .NET Core, UWP ve diğer .NET uygulamalarının çoğu katı derleme yüklemesine sahip değildir ve bu, güçlü adlandırmanın ana dezavantajıdır.

.NET Framework'te güçlü adlandırmanın önemli bir yönü, bunun viral olmasıdır: güçlü adlandırılmış bir derleme yalnızca diğer tanımlayıcı adlandırılmış derlemelere başvurabilir. Kitaplığınızın adı güçlü değilse, güçlü adlandırma gerektiren .NET Framework uygulamaları ve kitaplıkları bunu kullanamaz.

.NET Framework'te güçlü adlandırmanın avantajları şunlardır:

  1. Derlemeye başvurulabilir ve diğer tanımlayıcı adlandırılmış derlemeler tarafından kullanılabilir.
  2. Derleme Genel Derleme Önbelleği'nde (GAC) depolanabilir.
  3. Derleme, derlemenin diğer sürümleriyle yan yana yüklenebilir. Yan yana derleme yüklemesi genellikle eklenti mimarilerine sahip uygulamalar için gereklidir.

Güçlü adlandırmanın .NET Core/5+ üzerinde hiçbir avantajı yoktur. C# derleyicisi, güçlü adla imzalanmış derlemelerin güçlü adla imzalanmamış derlemelere atıfta bulunması durumunda CS8002 uyarısı üretir. Yalnızca .NET Core/5+'ı hedefleyen kitaplıklar için bu uyarıyı gizlemeniz yeterlidir.

.NET kitaplıklarına ne zaman güçlü bir ad vereceğimiz?

Yalnızca .NET Core/5+ hedef alan kitaplıklar için güçlü adlandırma gerekli değildir. Hedefleri .NET Framework veya .NET Standard ise, açık kaynak .NET kitaplıklarınızı kesin olarak adlandırmalısınız.

Uyarı

Bu kılavuz, NuGet.org'de yayımlanan .NET kitaplıkları gibi genel olarak dağıtılmış .NET kitaplıklarına özgüdür. Çoğu .NET uygulaması için güçlü adlandırma gerekli değildir ve varsayılan olarak yapılmamalıdır.

✔️ Kitaplığınızın derlemelerinin .NET Framework veya .NET Standard'a yönelik olduğunu belirtmek istiyorsanız güçlü isimlendirmeyi göz önünde bulundurun.

Güçlü adlandırmanın modern .NET çalışma zamanları üzerinde hiçbir etkisi yoktur. Kitaplığınız yalnızca modern .NET'i hedef alıyorsa derlemelerinize kesin ad vermeniz gerekmez.

.NET Framework/.NET Standard ve modern .NET arasında çoklu hedef oluşturuyorsanız, tüm Hedef Çerçeveleriniz için strong name kullanmanız gerekir.

✔️ Güçlü adlandırma anahtarı çiftini (genel + özel) kaynak denetim sisteminize eklemeyi göz önünde bulundurun.

Genel kullanıma açık anahtar çifti, geliştiricilerin kitaplık kaynak kodunuzu aynı anahtarla değiştirmesine ve yeniden derlemesine olanak tanır.

Geçmişte kısmi güven senaryolarında özel izinler vermek için kullanıldıysa, güçlü adlandırma anahtarı çiftini genel yapmamalısınız. Aksi takdirde, mevcut ortamların güvenliğini tehlikeye atabilirsiniz.

Ortak + özel anahtar çiftini teslim edemezseniz, ortak anahtarı teslim edin ve normal derlemeler için açık anahtarla imzalamayı kullanın. Genel imzalama, geliştiricilerin çoğu senaryoda kitaplığınızı yeniden derlemesine ve kullanmasına izin verir.

Önemli

Kodun yayımcısının kimliği istendiğinde Authenticode ve NuGet Paket İmzalama önerilir. Kod Erişim Güvenliği (CAS) bir güvenlik azaltması olarak kullanılmamalıdır.

✔️ Kullanıcıların bağlama yeniden yönlendirmelerini azaltmasına ve güncelleştirme sıklıklarını azaltmasına yardımcı olmak için derleme sürümünü yalnızca ana sürüm değişikliklerinde artırmayı göz önünde bulundurun.

Sürüm oluşturma ve derleme sürümü hakkında daha fazla bilgi edinin.

❌ Güçlü adlandırma anahtarını eklemeyin, kaldırmayın veya değiştirmeyin.

Derlemenin güçlü adlandırma anahtarının değiştirilmesi, derlemenin kimliğini değiştirir ve bunu kullanan derlenmiş kodu keser. Daha fazla bilgi için bkz. ikili uyumluluğu bozan değişiklikler.

❌ Kitaplığınızın güçlü adlandırılmış ve güçlü adlandırılmamış sürümlerini YAYINLAMAYIN. Örneğin, Contoso.Api ve Contoso.Api.StrongNamed.

İki paket yayımlamak, geliştirici ekosisteminizi dallandırır. Ayrıca, bir uygulama her iki pakete bağlı olarak sona eriyorsa geliştirici tür adı çakışmaları ile karşılaşabilir. .NET söz konusu olduğunda, bunlar farklı derlemelerde farklı türlerdir.