Güçlü adlandırılmış düzenekler kullanmanın avantajları nelerdir?
Normal bir montajla yapılamayan şeyler nelerdir?
Güçlü adlandırılmış düzenekler kullanmanın avantajları nelerdir?
Normal bir montajla yapılamayan şeyler nelerdir?
Yanıtlar:
Önce derlemenizi güçlü bir şekilde adlandırmanın avantajlarını listeleyeyim:
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.
Güçlü adlandırma, bu derleme için benzersiz bir adı garanti eder. Böylece başka hiç kimse aynı derleme adını kullanamaz.
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 ).
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.
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>
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.