Neden güçlü adlandırılmış derlemeler kullanılıyor?


107

Güçlü adlandırılmış düzenekler kullanmanın avantajları nelerdir?

Normal bir montajla yapılamayan şeyler nelerdir?

Yanıtlar:


92

Önce derlemenizi güçlü bir şekilde adlandırmanın avantajlarını listeleyeyim:

  1. Derlemenizi güçlü bir şekilde adlandırmak, derlemenizi Genel Derleme Önbelleğine (GAC) dahil etmenize olanak tanır . Böylelikle birden fazla uygulama arasında paylaşmanıza izin verir.

  2. Güçlü adlandırma, bu derleme için benzersiz bir adı garanti eder. Böylece başka hiç kimse aynı derleme adını kullanamaz.

  3. Kesin ad, bir derlemenin sürüm kökenini korur. Güçlü bir ad, hiç kimsenin montajınızın sonraki bir sürümünü üretememesini sağlayabilir. Uygulama kullanıcıları, yükledikleri derlemenin bir sürümünün, uygulamanın kurulduğu sürümü oluşturan aynı yayıncıdan gelmesi sağlanır.

Microsoft'tan güçlü adlandırma hakkında daha fazla bilgi, Kesin Adlandırılmış Derlemeler ( MSDN ).


1
4. maddeden emin misin? Sanırım bu bahavior son zamanlarda değişti. Kesinlikle adlandırılmış bir derlemenin yüklenmesini değiştirerek başarısız olmasını sağlamaya çalıştım, ancak olay olmadan yüklendi.
Jens

19
# 4 ile ilgili olarak bu yanlış. Kurcalamaya karşı koruma sağlamak için tasarlanmamıştır. Daha fazla bilgi için blogs.msdn.com/b/shawnfa/archive/2005/12/13/… bakın .
Colin Bowern

1
@ RobV8R Bağımlılıklarımızın% 90'ı açık kaynaklı, özel anahtarlar genel git depolarında (Microsoft önerilerine göre) ve isteyen herkes tarafından kullanılabilir.
trampster

1
@ RobV8R Burada ele geçirilen kelimeyi kullanamazsınız, bu, ilk etapta bir sır olarak tasarlandığı anlamına gelir. Microsoft yönergeleri, özel anahtarın genel kaynak deponuzda tutulması gerektiğidir. Özel anahtarlar tehlikeye atılmaz ve kasıtlı olarak yayınlanır. Özel anahtarların bilindiği ve ana projelerin açık kaynak kodunu değiştiren kişiler tarafından kullanılması amaçlandığı göz önüne alındığında (aksi takdirde lisans birçok durumda ihlal edilir), bunu yapan kişiler farklı bir sürüm numarası kullanırlar, ancak bu durumda aynı anahtarı kullanırlar. bir bağlama yönlendirmesinin gerekli olması durumunda.
trampster

1
@ RobV8R Başlangıçta anladığım şey, pek çok insanın, güçlü isimlendirmenin, bağımlılığınızın bir derlemenin belirli bir sürümüne kilitlendiğini garanti ettiğine inanıyor olması ve durum böyle değil, basit bir bağlama yönlendirmesi, kullandığınız sürümü değiştirebilir. aynı özel anahtarla imzalandı. Ve söylediğim gibi, özel anahtarlar, bağımlılıklarımızın çoğu için kasıtlı olarak yayınlandı.
trampster

9

Normal bir montajla yapılamayan şeyler nelerdir?

Nuget'in yükselişiyle başlayan tüm tartışmalar, güçlü adlandırılmış düzeneklerden tamamen kurtulmayı önerdiğinden, şirketim bunu denedi ve uygulama ayarları söz konusu olduğunda önemli bir davranış değişikliği ile karşılaştı:

VisualStudio tarafından sağlanan otomatik uygulamayı veya kullanıcı kapsamlı uygulama ayarlarını kullanırsanız (System.Configuration.ApplicationSettingsBase'i devralır), o zaman% LOCALAPPDATA% içinde tam olarak 1 dizin oluşturur, örneğin "YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdiufzsdouif" EXE nerede olursa olsun bulunan.

Ancak, güçlü bir ad olmadan EXE'nin konumu (= yol), DEBUG ve RELEASE yapıları arasında zaten farklı olan bir karma değeri oluşturmak için kullanılacaktır ve% LOCALAPPDATA% içinde "YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf" şeklinde adlandırılan birçok dizin oluşturacaktır. Bu, kurulum dizininin her güncellemede değiştiği ClickOnce dağıtımları için onu kullanılamaz hale getirir.


5

Güçlü bir isim olmadan yapılandırma dosyalarında bağlama yönlendirmelerini kullanamayacağınızı eklemek isterim.

Bu işe yaramayacak:

  <dependentAssembly>
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="null" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>

Genel bir anahtar jetonunuz olması gerekir

  <dependentAssembly>
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>

9
Güçlü bir adınız yoksa bağlama yönlendirmelerine gerek yoktur.
trampster

0

Sadece bir örnek: Güvenliğe daha fazla vurgu yaparak bir cevap vermek istiyorum . Üçüncü taraf için yeniden kullanılmasını istemediğimiz ancak test edilebilir olmasını istediğimiz bir kaynak kodlu derlemeler oluşturmamız durumunda, bir derlemeyi güçlü bir şekilde imzalayabilir ve dahili bileşenleri yalnızca aynı imza.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.