Kami memiliki proyek asp.net 4.0 yang menggunakan beberapa kerangka kerja yang bergantung pada log4net versi 1.2.10.0. Hari ini saya mencoba memasukkan kerangka kerja baru yang bergantung pada log4net versi 1.2.11.0, saya macet sejak:
log4net 1.2.10.0 memiliki publickeytoken = 1b44e1d426115821
log4net 1.2.11.0 memiliki publickeytoken = 669e0ddf0bb1aa2a
Karena ini berbeda, saya tidak dapat menggunakan pengalihan perakitan (untuk membuat semua kerangka menggunakan versi yang sama dari log4net) atau basis kode (untuk menggunakan kerangka baru saja menggunakan versi 1.2.11.0) melalui elemen runtime di web.config.
Apa pilihan saya di sini?
(dan mengapa bleep tidak log4net terus mengubah token publik antar versi, seperti yang saya mengerti bahwa kunci yang hilang adalah alasan peralihan antara versi 1.2.9.0 dan 1.2.10.0, apakah mereka kehilangan kuncinya lagi? Saya akan menawarkan dropbox saya agar tetap aman jika mereka membutuhkannya ...)
Sunting: Ok, jadi orang-orang log4net tampaknya memiliki gagasan bahwa merilis dengan dua kunci adalah ide yang bagus, tetapi itu berarti bahwa setiap kerangka kerja yang Anda gunakan perlu menyetujui mana dari dua rasa yang mereka sukai, atau kerangka kerja itu tidak dapat bekerja secara bersamaan berdampingan di appdomain yang sama. Apakah saya satu-satunya yang menganggap ini sebagai ide yang mengerikan? jika semua orang melakukan ini maka semuanya akan rusak, kan?
Sunting2: Seperti yang saya nyatakan, saya tidak menggunakan log4net dalam kode bisnis saya, tetapi saya menggunakan beberapa kerangka kerja yang bergantung pada 1.2.10.0, dan masalah muncul ketika saya mencoba menggunakan kerangka kerja baru yang bergantung pada 1.2.11.0 (kunci baru ), jadi jawaban Stefans tidak berlaku, karena framework baru akan mengharapkan kunci baru, bukan yang lama
sumber
Jawaban:
Beginilah cara saya membuat semuanya berfungsi dengan versi 1.2.11.0.
sumber
Method not found: 'Void log4net.Config.BasicConfigurator.Configure()'
Saya menggunakan log4net versi terbaru yang saya unduh melalui nuget. Namun, salah satu pustaka yang saya gunakan membutuhkan versi lama. Masalah saya membawa saya pada pertanyaan ini.
Masalah dengan jawaban lain adalah bahwa mereka menggunakan versi dll yang sama untuk semua binding. Saya ingin menggunakan fitur-fitur di versi baru untuk yang lainnya kecuali ketergantungan lama.
Untuk dapat melakukannya, Anda perlu melakukan hal berikut:
log4net.1.2.10.dll
. Sertakan dalam proyek startup Anda dengan tindakan Build disetel keNone
dan "Salin jika lebih baru"App.config
The
href
atribut mengidentifikasi di mana versi lama. Karenanya semua permintaan lain untuk log4net akan mengarah ke versi baru.sumber
Anda dapat mengunduh versi log4net 1.2.11.0 yang ditandatangani dengan kunci lama. Alasan mengapa diubah ke kunci baru dijelaskan di FAQ mereka:
http://logging.apache.org/log4net/release/faq.html#two-snks
(Pada dasarnya kunci baru tersedia untuk umum dan untuk beberapa alasan mereka tidak ingin memasukkan kunci lama dalam distribusi. Tidak jelas bagi saya mengapa mereka tidak hanya membuat kunci lama tersedia untuk umum)
sumber
Tidak tahu apakah itu cocok untuk kasus khusus Anda atau tidak, tetapi Anda dapat mengkompilasi ulang salah satu kerangka kerja, sehingga mereka akan menggunakan log4net dengan kunci publik yang sama. Dalam kasus saya itu adalah FluentNHibernate yang menggunakan log4net 1.2.10 dan Combres dengan log4net 1.2.11 dengan kunci baru. Saya mengunduh log4net 1.2.11 yang ditandatangani dengan kunci lama dan mengkompilasi ulang Combress dengannya. Setelah itu menambahkan pengalihan pengikatan perakitan dari 1.2.10 ke 1.2.11 dan itu mulai bekerja.
sumber
Ini tidak selalu berfungsi di semua kasus, tetapi karena proyek yang menggunakan log4net adalah OSS, saya mengunduh sumbernya, mengganti versi log4net yang bertentangan dengan versi yang saya gunakan dan membangun kembali proyek tersebut. Dalam kasus saya itu adalah Topshelf, jadi saya sekarang memiliki versi rakitan Topshelf yang dibangun dengan versi log4net yang sama yang saya gunakan dan sekarang saya dapat mereferensikan keduanya tanpa masalah.
sumber
Saya mencoba membuka tautan yang disediakan di atas, tetapi sepertinya semua tautan di situs Apache tidak berfungsi. Maka inilah yang saya lakukan untuk menyelesaikan masalah:
Dari Visual Studio Anda, gunakan Nuget untuk mengunduh dan menginstal versi terbaru log4net (1.2.13.0). Manajer paket NuGet akan secara otomatis mengunduh dan meningkatkan semua log4net (1.2.11.0) ke versi terbaru.
sumber