Aracılığıyla paylaş


.NET Framework'te Yan Yana Yürütme

Uyarı

Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.

Yan yana yürütme, bir uygulamanın veya bileşenin birden çok sürümünü aynı bilgisayarda çalıştırabilmektir. Ortak dil çalışma zamanının birden çok sürümüne ve çalışma zamanının bir sürümünü kullanan uygulama ve bileşenlerin birden çok sürümüne aynı anda aynı bilgisayarda sahip olabilirsiniz.

Aşağıdaki çizimde, aynı bilgisayarda çalışma zamanının iki farklı sürümünü kullanan çeşitli uygulamalar gösterilmektedir. A, B ve C uygulamaları çalışma zamanı 1.0 sürümünü, D uygulaması ise çalışma zamanı sürüm 1.1'i kullanır.

Farklı çalışma zamanı sürümlerinin yan yana yürütülmesi,

.NET Framework, ortak dil çalışma zamanından ve API türlerini içeren bir derleme koleksiyonundan oluşur. Çalışma zamanı ve .NET Framework derlemeleri ayrı olarak sürümlenir. Örneğin, çalışma zamanının 4.0 sürümü aslında 4.0.319, .NET Framework derlemelerinin 1.0 sürümü ise 1.0.3300.0 sürümüdür.

Aşağıdaki çizimde, aynı bilgisayardaki bir bileşenin iki farklı sürümünü kullanan çeşitli uygulamalar gösterilmektedir. Uygulama C aynı bileşenin 2.0 sürümünü kullanırken Uygulama A ve B bileşenin 1.0 sürümünü kullanır.

Bir bileşenin yan yana yürütülmesini gösteren diyagram.

Yan yana yürütme, bir uygulamanın hangi bileşen sürümlerine bağlandığı üzerinde daha fazla denetim ve bir uygulamanın hangi çalışma zamanı sürümünü kullandığı üzerinde daha fazla denetim sağlar.

Yan Yana Yürütmenin Avantajları

Windows XP ve .NET Framework'den önce, uygulamalar aynı kodun uyumsuz sürümleri arasında ayrım yapamadığından DLL çakışmaları oluştu. DLL'de yer alan tür bilgileri yalnızca bir dosya adına bağlıydı. Bir uygulamanın DLL'de bulunan türlerin, uygulamanın oluşturulduğu türlerle aynı tür olup olmadığını bilmesinin hiçbir yolu yoktu. Sonuç olarak, bir bileşenin yeni bir sürümü eski bir sürümün üzerine yazabilir ve uygulamaları bozabilir.

Yan yana yürütme ve .NET Framework, DLL çakışmalarını ortadan kaldırmak için aşağıdaki özellikleri sağlar:

  • Güçlü adlandırılmış derlemeler.

    Yan yana çalıştırma, tür bilgilerini bir derlemenin belirli bir sürümüne bağlamak için güçlü adlandırılmış derlemeler kullanır. Bu, bir uygulamanın veya bileşenin derlemenin geçersiz bir sürümüne bağlanmasını engeller. Tanımlayıcı adlandırılmış derlemeler, aynı bilgisayarda bir dosyanın birden çok sürümünün bulunmasına ve uygulamalar tarafından kullanılmasına da olanak tanır. Daha fazla bilgi için bkz. Strong-Named Meclisleri.

  • Sürüm farkındalığına sahip kod depolama.

    .NET Framework, küresel derleme önbelleğinde sürüm farkında kod depolama sağlar. Genel derleme önbelleği, .NET Framework'ün yüklü olduğu tüm bilgisayarlarda bulunan bilgisayar genelinde bir kod önbelleğidir. Derlemeleri sürüm, kültür ve yayımcı bilgilerine göre depolar ve bileşenlerin ve uygulamaların birden çok sürümünü destekler. Daha fazla bilgi için bkz. Genel Bütünleştirilmiş Kod Önbelleği.

  • Yalıtım.

    .NET Framework kullanarak yalıtılarak yürütülen uygulamalar ve bileşenler oluşturabilirsiniz. Yalıtım, yan yana yürütmenin temel bileşenlerinden biridir. Kullandığınız kaynakların farkında olmayı ve bir uygulamanın veya bileşenin birden çok sürümü arasında kaynakları güvenle paylaşmayı içerir. Yalıtım, dosyaları sürüme özgü bir şekilde depolamayı da içerir. Yalıtım hakkında daha fazla bilgi için bkz. Yan Yana Yürütme için Bileşen Oluşturma Yönergeleri.

Sürüm Uyumluluğu

.NET Framework'ün 1.0 ve 1.1 sürümleri birbiriyle uyumlu olacak şekilde tasarlanmıştır. .NET Framework sürüm 1.0 ile oluşturulan bir uygulama 1.1 sürümünde, .NET Framework sürüm 1.1 ile oluşturulmuş bir uygulama ise 1.0 sürümünde çalıştırılmalıdır. Ancak, .NET Framework'ün 1.1 sürümünde eklenen API özelliklerinin .NET Framework'ün 1.0 sürümüyle çalışmayacağını unutmayın. Sürüm 2.0 ile oluşturulan uygulamalar yalnızca sürüm 2.0'da çalışır. Sürüm 2.0 uygulamaları sürüm 1.1 veya önceki sürümlerde çalışmaz.

.NET Framework sürümleri, çalışma zamanı ve ilişkili .NET Framework derlemelerinden (derleme birleştirme olarak adlandırılan bir kavram) oluşan tek bir birim olarak değerlendirilir. Derleme bağlamasını .NET Framework derlemelerinin diğer sürümlerini içerecek şekilde yeniden yönlendirebilirsiniz, ancak varsayılan derleme bağlamasını geçersiz kılma riskli olabilir ve dağıtımdan önce sıkı bir şekilde test edilmelidir.

Çalışma Zamanı Sürüm Bilgilerini Bulma

Bir uygulamanın veya bileşenin hangi çalışma zamanı sürümüyle derlendiği ve uygulamanın çalıştırması için gereken çalışma zamanı sürümlerinin iki konumda depolandığı hakkında bilgiler. Bir uygulama veya bileşen derlendiğinde, derlemek için kullanılan çalışma zamanı sürümüyle ilgili bilgiler yönetilen yürütülebilir dosyada depolanır. Uygulamanın veya bileşenin gerektirdiği çalışma zamanı sürümleriyle ilgili bilgiler uygulama yapılandırma dosyasında depolanır.

Yönetilen Yürütülebilir Dosyada Çalışma Zamanı Versiyon Bilgileri

Yönetilen her uygulamanın ve bileşenin taşınabilir yürütülebilir (PE) dosya üst bilgisi, birlikte oluşturulduğu çalışma zamanı sürümü hakkında bilgi içerir. Ortak dil çalışma zamanı, uygulamanın çalıştırması gereken çalışma zamanının en olası sürümünü belirlemek için bu bilgileri kullanır.

Uygulama Yapılandırma Dosyasındaki Çalışma Zamanı Sürüm Bilgileri

PE dosya üst bilgisindeki bilgilere ek olarak, bir uygulama çalışma zamanı sürüm bilgileri sağlayan bir uygulama yapılandırma dosyası ile dağıtılabilir. Uygulama yapılandırma dosyası, uygulama geliştiricisi tarafından oluşturulan ve bir uygulamayla birlikte gelen XML tabanlı bir dosyadır. <requiredRuntime> Bölümün<startup> Öğesi, bu dosyada varsa, çalışma zamanının hangi sürümlerini ve uygulamanın desteklediği bir bileşenin hangi sürümlerini belirtir. Bu dosyayı, bir uygulamanın çalışma zamanının farklı sürümleriyle uyumluluğunu test etmek için testte de kullanabilirsiniz.

COM ve COM+ uygulamaları da dahil olmak üzere yönetilmeyen kod, çalışma zamanının yönetilen kodla etkileşim için kullandığı uygulama yapılandırma dosyalarına sahip olabilir. Uygulama yapılandırma dosyası, COM aracılığıyla etkinleştirdiğiniz tüm yönetilen kodları etkiler. Dosya, hangi çalışma zamanı sürümlerini ve derleme yeniden yönlendirmelerini desteklediğini belirtebilir. Varsayılan olarak, yönetilen koda çağrı yapan COM birlikte çalışma uygulamaları bilgisayarda yüklü olan çalışma zamanının en son sürümünü kullanır.

Uygulama yapılandırma dosyaları hakkında daha fazla bilgi için bkz. Uygulamaları Yapılandırma.

Çalışma Zamanının Yüklenecek Sürümünü Belirleme

Ortak dil çalışma zamanı, bir uygulama için çalışma zamanının hangi sürümünün yükleneceğini belirlemek için aşağıdaki bilgileri kullanır:

  • Kullanılabilir çalışma zamanı sürümleri.

  • Bir uygulamanın desteklediği çalışma zamanı sürümleri.

Desteklenen Çalışma Zamanı Sürümleri

Çalışma zamanı, bir uygulamanın hangi çalışma zamanını desteklediğini belirlemek için uygulama yapılandırma dosyasını ve taşınabilir yürütülebilir (PE) dosya üst bilgisini kullanır. Uygulama yapılandırma dosyası yoksa, çalışma zamanı uygulamanın PE dosya üst bilgisinde belirtilen çalışma zamanı sürümünü (bu sürüm varsa) yükler.

Bir uygulama yapılandırma dosyası varsa, çalışma zamanı aşağıdaki işlemin sonuçlarına göre yüklenecek uygun çalışma zamanı sürümünü belirler:

  1. Çalışma zamanı, uygulama yapılandırma dosyasındaki <supportedRuntime> Element öğesini inceler. öğesinde <supportedRuntime> belirtilen desteklenen çalışma zamanı sürümlerinden biri veya daha fazlası varsa, çalışma zamanı ilk <supportedRuntime> öğe tarafından belirtilen çalışma zamanı sürümünü yükler. Bu sürüm kullanılamıyorsa, çalışma zamanı sonraki <supportedRuntime> öğeyi inceler ve belirtilen çalışma zamanı sürümünü yüklemeyi dener. Bu çalışma zamanı sürümü kullanılamıyorsa, takip eden <supportedRuntime> öğeler incelenir. Desteklenen çalışma zamanı sürümlerinden hiçbiri kullanılamıyorsa, çalışma zamanı bir çalışma zamanı sürümünü yükleyemiyor ve kullanıcıya bir ileti görüntülüyor (bkz. 3. adım).

  2. Çalışma zamanı, uygulamanın yürütülebilir dosyasının PE dosya üst bilgisini okur. PE dosya üst bilgisi tarafından belirtilen çalışma zamanı sürümü kullanılabilir durumdaysa, çalışma zamanı bu sürümü yükler. Belirtilen çalışma zamanı sürümü kullanılamıyorsa, çalışma zamanı, PE üst bilgisindeki çalışma zamanı sürümüyle uyumlu olması için Microsoft tarafından belirlenen bir çalışma zamanı sürümünü arar. Bu sürüm bulunamazsa, işlem 3. adıma devam eder.

  3. Çalışma zamanı, uygulama tarafından desteklenen çalışma zamanı sürümünün kullanılamadığını belirten bir ileti görüntüler. Çalışma zamanı yüklenmedi.

    Uyarı

    HKLM\Software\Microsoft\.NETFramework kayıt defteri anahtarı altındaki NoGuiFromShim değerini veya COMPLUS_NoGuiFromShim ortam değişkenini kullanarak bu iletinin görüntülenmesini gizleyebilirsiniz. Örneğin, genellikle katılımsız yüklemeler veya Windows hizmetleri gibi kullanıcıyla etkileşimde bulunmayan uygulamalar için iletiyi gizleyebilirsiniz. Bu ileti görüntülenmediğinde, çalışma zamanı olay günlüğüne bir ileti yazar. Bir bilgisayardaki tüm uygulamalar için bu iletiyi engellemek için NoGuiFromShim kayıt defteri değerini 1 olarak ayarlayın. Alternatif olarak, belirli bir kullanıcı bağlamında çalışan uygulamaların iletisini engellemek için COMPLUS_NoGuiFromShim ortam değişkenini 1 olarak ayarlayın.

Uyarı

Çalışma zamanı sürümü yüklendikten sonra, derleme bağlama yeniden yönlendirmeleri tek bir .NET Framework derlemesinin farklı bir sürümünün yükleneceğini belirtebilir. Bu bağlama yeniden yönlendirmeleri yalnızca yeniden yönlendirilen belirli derlemeyi etkiler.

Kısmen Nitelenmiş Bütünleştirilmiş Kod Adları ve Yan Yana Çalıştırma

Bunlar yan yana sorunların olası bir kaynağı olduğundan, kısmen nitelenmiş derleme başvuruları yalnızca bir uygulama dizini içindeki derlemelere bağlanmak için kullanılabilir. Kodunuzda kısmen belirtilmiş derleme referanslarından kaçının.

Koddaki kısmen nitelenmiş derleme başvurularını azaltmak için, bir uygulama yapılandırma dosyasındaki qualifyAssembly< öğesini kullanarak> kodda gerçekleşen kısmen nitelenmiş derleme başvurularını tam olarak niteleyebilirsiniz. <qualifyAssembly> öğesini yalnızca kısmi başvuruda ayarlanmayan alanları belirtmek için kullanın. özniteliğinde fullName listelenen derleme kimliği, derleme adını tam olarak nitelerken gereken tüm bilgileri içermelidir: derleme adı, ortak anahtar, kültür ve sürüm.

Aşağıdaki örnek, myAssembly derlemesini tam nitelemek için uygulamanın yapılandırma dosyası girişini göstermektedir.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="myAssembly"
fullName="myAssembly,
      version=1.0.0.0,
publicKeyToken=...,
      culture=neutral"/>
</assemblyBinding>

Bir derleme yükleme deyimi her myAssembly başvurusu yapıldığında, bu yapılandırma dosyası ayarları çalışma zamanının kısmen tanımlanmış myAssembly başvuruyu otomatik olarak tam nitelenmiş başvuruya çevirmesine neden olur. Örneğin, Assembly.Load("myAssembly") Assembly.Load("myAssembly, version=1.0.0.0, publicKeyToken=..., culture=neutral") olur.

Uyarı

Ortak dil çalışma zamanı kısıtlamasını, kısmen başvurulan derlemelerin genel derleme önbelleğinden yüklenmesini engelleyen bu kısıtlamayı atlamak için LoadWithPartialName yöntemini kullanabilirsiniz. Yan yana yürütmede kolayca sorunlara neden olabileceğinden bu yöntem yalnızca uzaktan iletişim senaryolarında kullanılmalıdır.

Başlık Açıklama
Nasıl Yapılır: Otomatik Bağlama Yeniden Yönlendirmeyi Etkinleştirme ve Devre Dışı Bırakma Bir uygulamanın derlemenin belirli bir sürümüne nasıl bağlanacağını açıklar.
Derleme Bağlama Yeniden Yönlendirmesini Yapılandırma Derleme bağlama başvurularını .NET Framework derlemelerinin belirli bir sürümüne yeniden yönlendirmeyi açıklar.
Yan Yana ÇalıştırmaIn-Process CLR'nin birden çok sürümünü tek bir işlemde çalıştırmak için işlem içi yan yana çalışma zamanı ana bilgisayar etkinleştirmesini nasıl kullanabileceğinizi açıklar.
.NET'teki derlemeler Derlemelere kavramsal bir genel bakış sağlar.
Uygulama Etki Alanları Uygulama etki alanlarına kavramsal bir genel bakış sağlar.

Kaynak

<supportedRuntime> Öğesi