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:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、ClassLibrary2, 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)
|