2009-04-20 25 views
7

Güçlü adlandırılmış bir derlemede ne değişiklikler AssemblyVersionAttribute'de bir değişikliği gerektiriyor? Açıkça, bir müşterinin bir kod değişikliği yapmak zorunda kalabileceği şekilde genel api'yi değiştirmek AssemblyVersion'da bir artış gerektirir. Ancak, istemcideki kod değişiklikleri gerektirmeyen genel API’daki değişiklikler nelerdir? Örneğin,.NET: AssemblyVersion ile ilgili olarak, ikili uyumluluğu ne tanımlar?

  • Genel bir sınıf veya arabirimin eklenmesi?
  • Genel bir üyenin genel bir sınıfa veya arabirime eklenmesi? (DÜZENLEME: drscroogemcduck, bir arabirime bir üye eklemenin tüm uygulayıcıları hortumlayacağını doğru bir şekilde işaret eder. Aptal ben.)
  • Bir sınıf üyesinin görünürlüğünün artırılması?

Bu, MSDN'de (veya MSS'nin bazı MSSE'nin kişisel blog'unda, MS) bilindiği bir yerde kesin bir belge olmalıdır. Ama ben sadece bulamıyorum. Lütfen yardım et!

cevap

4

Türler değişmeden kaldığı sürece (genel veya korunan düzenlerinde) ve yöntem imzaları değiştirilmediyse (yöntem veya türler eklendiğinde) JIT, DLL'yi yalnızca iyi bir şekilde bağlayabilmelidir . sözü

, bunu çalışır olsa bile bunu gerektiğini düşünüyorum. Yeni bir sürüm oluşturun ve gerekirse eski sürümü yeni sürümle eşlemek için bir ilke kullanın. Aksi halde kendinizi DLL cehennemine doğru sürüyorsunuz ... ve eminim ki bunu istemiyorsunuz. Bir arabirime yöntem eklemek

+0

İki soru: * Eğer belgelerine beni işaret edebilir - Resmi veya başka - İlk ekstresinde? * ikinci ifadenizi hazırlar mısınız? Bu patentli durumda, kamu sınıfından bir memurun içten topluma görünürlüğünü arttırmak istiyorum. Bunun nasıl (DLL of GAC sürümü) cehenneme yol açacağı açık değil. – cero

+0

İlk önce: Onu aramak zorundayım. Temel olarak, JIT yöntemleri gerektiği kadar geç derler. Son bağlanma, yalnızca JIT yöntemi derlediğinde gerçekleşir, bu nedenle yöntem oradaysa ve imzayla eşleşirse, işe yarayacaktır - bu benim deneyimimdir. Kamu arabirimlerine yöntem eklemek, yine de, eksik yöntemlere yol açabileceğinden, iyi bir fikir olmayacaktır. – Lucero

+0

İkinci ifadeye gelince, kodu değiştirmek ve montaj kimliğini aynı bırakmak farklı davranışlara yol açabilir. Örneğin, yansıma yaptığınızda, özel veya genel üyeler bulmak isteyip istemediğinizi belirtirsiniz. Eğer sadece "özel" ciltleme kullanılırsa, (durumunuza göre) ctoru daha fazla bulamaz ve kullanıcı (ve çalışma zamanı) aynı versiyonunu düşünürse bile hata mesajı alır.ve eğer montaj GAC da varsa çalışma zamanını karıştırır. Yapma. – Lucero

1
eski sağlayıcılar yeni yöntemleri uygulayamaz çünkü iyi olmamalıdır.
+0

İyi nokta. Orijinal gönderiyi düzenleme. :) – cero

1

Microsoft, .NET kütüphanelerinde AssemblyVersion (hala 2.0.0.0/3.0.0.0) değiştirmeden hizmet paketi sürümlerinde yeni yöntemler/sınıflar ekliyor. Microsoft, yalnızca AssemblyFileVersion değiştirir. Örneğin, .NET 2.0 SP1'de DateTimeOffset yapısı eklendi.

Bu uygulama Microsoft'un bunu yapması nedeniyle bize önerilebilir mi? Bu kafa karıştırıcı. Martijn cömertliğiyle cevaben