Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 2833|Yanıt: 1

[.NET Core] .NET/C#, AssemblyLoadContext tabanlı DLL eklenti sıcak güncellemelerini uygular

[Bağlantıyı kopyala]
2024-6-28 14:28:33 tarihinde yayınlandı | | | |
Gereksinimler: İş mantığı karmaşıktır ve özelleştirme gerektirir; böyle bir mantık için, ayrı bir DLL montajında, arka plan montajı dinamik olarak güncelleyebiliyor ve en son mantığı çalıştırabilir.

.NET Core, .NET Framework gibi AppDomain'lerin dinamik oluşturulmasını ve kaldırılmasını desteklemiyor, bu yüzden eklentileri sıcak yüklemenin iyi bir yolu hiç olmadı, ancak iyi haber şu ki, .NET Core 3.0'dan beri Collectible Assembly'yi destekliyor ve montajları yükleyip indirmek için kullanabileceğimiz geri alınabilir bir AssemblyLoadContext oluşturabiliyoruz.

AssemblyLoadContext sınıfı:Bağlantı girişi görünür.

İlk olarak, yeni bir konsol ve üç kütüphane oluşturun:ConsoleApp6ClassLibraryStandardClassLibrary1ClassLibrary2, bunlar arasında ClassLibrary1 ve ClassLibrary2 kütüphaneleri, ClassLibraryStandard'daki IWorker arayüzünü devralır ve Run yöntemini uygular.

ClassLibraryStandart kodu:

ClassLibrary1 kodu:

ClassLibrary2 kodu:

ConsoleApp6 konsol kodu şu şekildedir:

Konsol, sürekli dinamik olarak çalışan DLL eklentisinde 3 iş parçacığından oluşan Run metodunu açar, çıktı sonuçlarını log4net kullanarak kaydeder ve ardından konsolda çalıştırırDLL'yi 3 saniye içinde en son kütüphane ile değiştirin

Konsol 1 saniye veya 5 saniye çalıştırıldıktan sonra, mevcut AssemblyLoadContext örneği çıktı olarak sunulur; bu da yüklenmiş DLL kütüphanesidir.

Aşağıda gösterildiği gibi:



Programın anormal bir çıkışı olmadığını ve uygulama sürecinde eklentinin bulunamadığı bir durum olmadığını görebilirsiniz. log4net'in yürütme sonuçlarını kaydetmesinin nedeni, konsolun engellenmiş olmasıdır ve 3 iş parçacığının sürekli çalışabilmesi için log4net kullanılarak aşağıdaki şekilde gösterildiği gibi yürütme sonuçlarını kaydeder:



2024-06-28 14:24:36,606 BILGI 11 RollingFile - 1
2024-06-28 14:24:36,606 INFO 10 RollingFile - Silmeye başla
2024-06-28 14:24:36,606 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 11 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 11 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 10 RollingFile - AssemblyLoadContext_Unloading
2024-06-28 14:24:36,606 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 13 RollingFile - 1
...
2024-06-28 14:24:36,607 BILGI 12 RollingFile - 1
2024-06-28 14:24:36,607 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,607 BILGI 12 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 10 RollingFile - Kaldırma tamamlandı
2024-06-28 14:24:36,607 BILGI 12 RollingFile - 1
2024-06-28 14:24:36,607 BILGI 12 RollingFile - 1
...
2024-06-28 14:24:36,607 BILGI 12 RollingFile - 1
2024-06-28 14:24:36,607 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,607 BILGI 12 RollingFile - 1
2024-06-28 14:24:36,607 BILGI 13 RollingFile - 1
2024-06-28 14:24:36,607 BILGI 12 RollingFile - 1
2024-06-28 14:24:36,606 BILGI 11 RollingFile - 1
2024-06-28 14:24:36,607 INFO 13 RollingFile - 2
2024-06-28 14:24:36,607 BILGI 12 RollingFile - 2

Ekli config.xml konfigürasyonu:

(Son)




Önceki:QRCODE QR kod hata tolerans seviyesi hakkında
Önümüzdeki:.NET/C#, birden fazla PDF dosyasını tek bir dosyaya birleştirmek için PDFsharp kullanır
 Ev sahibi| 2024-7-6 16:59:30 tarihinde yayınlandı |
Roslyn'i kullanarak C# kodunu dinamik olarak derleyin ve çalıştırın
https://www.itsvse.com/thread-10786-1-1.html
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com