Share via


Kesin adlandırma

Güçlü adlandırma, bir derlemeyi bir anahtarla imzalamayı ve tanımlayıcı adlandırılmış bir derleme oluşturmayı ifade eder. Bir derleme tanımlayıcı olarak adlandırıldığında, adı ve derleme sürüm numarasını temel alan 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 derlemenin adı güçlü olduğunda derlemelerin katı yüklenmesini etkinleştirmesidir. Tanımlayıcı adlandırılmış derleme başvurusu, yüklenen derlemenin sürümüyle tam olarak eşleşmelidir ve geliştiricileri derlemeyi kullanırken bağlama yeniden yönlendirmelerini yapılandırmaya zorlar :

<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, Xamarin, 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ü olmayan adlandırılmış derlemelere başvuran tanımlayıcı adlandırılmış derlemeler için CS8002 uyarısı üretir. Yalnızca .NET Core/5+'ı hedefleyen kitaplıklar için bu uyarıyı gizlemeniz yeterlidir.

Tanımlayıcı adlandırılmış .NET kitaplıkları oluşturma

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

Not

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 derlemelerini güçlü bir şekilde adlandırmayı göz önünde bulundurun.

✔️ Güçlü adlandırma anahtarını kaynak denetim sisteminize eklemeyi göz önünde bulundurun.

Genel kullanıma açık anahtar, 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ını genel yapmamalısınız. Aksi takdirde, mevcut ortamların güvenliğini tehlikeye atabilirsiniz.

Ö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ı EKLEMEYİ, kaldırmayı 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 hataya neden olan değişiklikler.

❌ Kitaplığınızın tanımlayıcı adlı ve tanımlayıcı olmayan sürümlerini YAYıMLAMAYIN. Örneğin, Contoso.Api ve Contoso.Api.StrongNamed.

İki paket yayımlama, geliştirici eko sisteminizin çatallarını oluşturur. 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.