Aracılığıyla paylaş


Gölge Kopyalama Derlemeleri

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.

Gölge kopyalama, bir uygulama etki alanında kullanılan derlemelerin, uygulama etki alanı kaldırılmadan güncellenmesini sağlar. Bu, özellikle ASP.NET siteleri gibi sürekli kullanılabilir olması gereken uygulamalar için kullanışlıdır.

Önemli

Windows 8.x Store uygulamalarında gölge kopyalama desteklenmez.

Ortak dil çalışma zamanı, derleme yüklendiğinde bir derleme dosyasını kilitler, bu nedenle derleme kaldırılana kadar dosya güncelleştirilemez. Bir derlemeyi uygulama etki alanından kaldırmanın tek yolu uygulama etki alanını kaldırmaktır, bu nedenle normal koşullarda, onu kullanan tüm uygulama etki alanları kaldırılana kadar derleme diskte güncelleştirilemez.

Bir uygulama etki alanı gölge kopya dosyalarına yapılandırıldığında, uygulama yolundaki derlemeler başka bir konuma kopyalanır ve bu konumdan yüklenir. Kopya kilitlenir, ancak özgün derleme dosyasının kilidi açılır ve güncelleştirilebilir.

Önemli

Gölge kopyalanabilen tek derlemeler, uygulama etki alanı yapılandırıldığında ApplicationBase ve PrivateBinPath özellikleri ile belirlenen uygulama dizininde veya alt dizinlerinde depolanan derlemelerdir. Küresel derleme önbelleğinde depolanan derlemeler gölge kopyalanamaz.

Bu makale aşağıdaki bölümleri içerir:

  • Gölge Kopyalamayı Etkinleştirme ve Kullanma , temel kullanımı ve gölge kopyalama için kullanılabilen seçenekleri açıklar.

  • Başlangıç Performansı , başlangıç performansını geliştirmek için .NET Framework 4'te gölge kopyalamada yapılan değişiklikleri ve önceki sürümlerin davranışına nasıl geri dönüldüğünü açıklar.

  • Eski Yöntemler , .NET Framework 2.0'da gölge kopyalamayı denetleyen özelliklerde ve yöntemlerde yapılan değişiklikleri açıklar.

Gölge Kopyalamayı Etkinleştirme ve Kullanma

Bir uygulama etki alanını gölge kopyalama için yapılandırmak için sınıfın AppDomainSetup özelliklerini aşağıdaki gibi kullanabilirsiniz:

  • ShadowCopyFiles özelliğini dize değeri "true" olarak ayarlayarak gölge kopyalamayı etkinleştirin.

    Varsayılan olarak, bu ayar uygulama yolundaki tüm derlemelerin yüklenmeden önce bir indirme önbelleğine kopyalanmasına neden olur. Bu, diğer bilgisayarlardan indirilen dosyaları depolamak için ortak dil çalışma zamanı tarafından tutulan önbellekle aynıdır ve ortak dil çalışma zamanı artık gerekli olmadığında dosyaları otomatik olarak siler.

  • İsteğe bağlı olarak, CachePath özelliğini ve ApplicationName özelliğini kullanarak gölge kopyalanan dosyalar için özel bir konum ayarlayın.

    Konumun temel yolu, ApplicationName özelliğini CachePath özelliğine alt dizin olarak birleştirmek suretiyle oluşturulur. Derlemeler, temel yolun kendisine değil, bu yolun alt klasörlerine gölge olarak kopyalanır.

    Uyarı

    Eğer ApplicationName özelliği ayarlanmazsa, o zaman CachePath özelliği göz ardı edilir ve indirme önbelleği kullanılır. İstisna atılmaz.

    Özel bir konum belirtirseniz, artık gerekli olmadığında dizinleri ve kopyalanan dosyaları temizlemek sizin sorumluluğunuzdadır. Bunlar otomatik olarak silinmez.

    Gölge kopyalanan dosyalar için özel bir konum ayarlamak istemenin birkaç nedeni vardır. Uygulamanız çok sayıda kopya oluşturuyorsa, gölge kopyalanan dosyalar için özel bir konum ayarlamak isteyebilirsiniz. İndirme önbelleği yaşam süresine göre değil boyuta göre sınırlıdır, bu nedenle ortak dil çalışma zamanının hala kullanımda olan bir dosyayı silmeyi denemesi mümkündür. Özel konum ayarlamanın bir diğer nedeni de uygulamanızı çalıştıran kullanıcıların indirme önbelleği için ortak dil çalışma zamanının kullandığı dizin konumuna yazma erişimi olmamasıdır.

  • İsteğe bağlı olarak, ShadowCopyDirectories özelliğini kullanarak gölge kopyalanan derlemeleri sınırlayın.

    Bir uygulama etki alanı için gölge kopyalamayı etkinleştirdiğinizde, varsayılan olarak uygulama yolundaki tüm derlemeleri ApplicationBase ve PrivateBinPath özellikleri tarafından belirtilen dizinlerde kopyalamaktır. Yalnızca gölge kopyasını almak istediğiniz dizinleri içeren bir dize oluşturup, dizeyi ShadowCopyDirectories özelliğine atayarak, kopyalamayı seçili dizinlerle sınırlayabilirsiniz. Dizinleri noktalı virgülle ayırın. Gölge kopyalanan tek derlemeler, seçili dizinlerdeki derlemelerdir.

    Uyarı

    Özelliğe ShadowCopyDirectories bir dize atamazsanız veya bu özelliği null olarak ayarlarsanız, ApplicationBase ve PrivateBinPath özellikleri tarafından belirtilen dizinlerdeki tüm derlemeler gölge kopyalanır.

    Önemli

    Noktalı virgül sınırlayıcı karakteri olduğundan dizin yolları noktalı virgül içermemelidir. Noktalı virgüller için kaçış karakteri yoktur.

Başlangıç Performansı

Gölge kopyalama kullanan bir uygulama etki alanı başlatıldığında, uygulama dizinindeki derlemeler gölge kopya dizinine kopyalanırken veya zaten bu konumda olup olmadığı doğrulanırken bir gecikme olur. .NET Framework 4'ün öncesinde, tüm derlemeler geçici bir dizine kopyalandı. Her derleme, derleme adını doğrulamak için açıldı ve tanımlayıcı ad doğrulandı. Her derleme, gölge kopya dizinindeki kopyadan daha yakın zamanda güncelleştirilip güncelleştirilmediğini görmek için denetlendi. O hâlde, gölge kopya dizinine kopyalandı. Son olarak, geçici kopyalar atılır.

.NET Framework 4'le başlayarak varsayılan başlatma davranışı, uygulama dizinindeki her derlemenin dosya tarihini ve saatini gölge kopya dizinindeki kopyanın dosya tarihi ve saatiyle doğrudan karşılaştırmaktır. Derleme güncelleştirildiyse, .NET Framework'ün önceki sürümlerinde olduğu gibi aynı yordam kullanılarak kopyalanır; aksi takdirde, gölge kopya dizinindeki kopya yüklenir.

Elde edilen performans iyileştirmesi, derlemelerin sık değişmediği ve değişikliklerin genellikle derlemelerin küçük bir alt kümesinde gerçekleştiği uygulamalar için en büyüktür. Bir uygulamadaki derlemelerin çoğu sık değişiyorsa, yeni varsayılan davranış performans regresyonuna neden olabilir. Yapılandırma dosyasına <shadowCopyVerifyByTimestamp> öğesini enabled="false" ekleyerek, .NET Framework'ün önceki sürümlerinin başlangıç davranışını geri yükleyebilirsiniz.

Eski Yöntemler

AppDomain sınıfının, bir uygulama etki alanında gölge kopyalamayı yönetmek için kullanılabilecek SetShadowCopyFiles ve ClearShadowCopyPath gibi çeşitli yöntemleri vardır, ancak bunlar .NET Framework sürüm 2.0'da kullanım dışı olarak işaretlenmiştir. Bir uygulama etki alanını gölge kopyalama için yapılandırmanın önerilen yolu, sınıfın AppDomainSetup özelliklerini kullanmaktır.

Ayrıca bakınız