Pada dasarnya masalahnya adalah bahwa setiap kali versi rakitan berubah (yaitu pengguna menginstal versi baru aplikasi) semua pengaturannya diatur ulang ke default (atau lebih tepatnya pengguna baru. File konfigurasi dibuat dalam folder dengan versi yang berbeda nomor sebagai nama)
Bagaimana saya bisa mempertahankan pengaturan yang sama ketika memutakhirkan versi, karena menggunakan file ini atau registri tampaknya tidak disarankan?
Ketika kami menggunakan Clickonce sepertinya bisa menangani ini, jadi sepertinya itu harus bisa dilakukan, tapi saya tidak yakin bagaimana caranya.
.net
settings
assemblyversions
Davy8
sumber
sumber
Jawaban:
ApplicationSettingsBase memiliki metode yang disebut Upgrade yang memigrasikan semua pengaturan dari versi sebelumnya.
Untuk menjalankan penggabungan setiap kali Anda mempublikasikan versi baru aplikasi Anda, Anda dapat menentukan boolean flag di file pengaturan Anda yang defaultnya benar. Beri nama UpgradeRequired atau yang serupa.
Kemudian, pada saat mulai aplikasi Anda memeriksa untuk melihat apakah flag sudah diatur dan jika sudah, panggil metode Upgrade , atur flag ke false dan simpan konfigurasi Anda.
Baca lebih lanjut tentang metode Upgrade di MSDN . The GetPreviousVersion juga mungkin layak lihat jika Anda perlu melakukan beberapa penggabungan kustom.
sumber
appSettings
,,userSettings
atauapplicationSettings
? Sebagai pengaturan Pengguna pada Pengaturan. Pengaturan, sekali pertama kali diubah ke false itu tidak akan pernah benar lagi. Versi baru tidak akan mengatur ulang UpgradeRequired itu kembali ke True.Saya tahu ini sudah beberapa saat ... Dalam aplikasi winforms, panggil saja
My.Settings.Upgrade()
sebelum Anda memuatnya. Ini akan mendapatkan pengaturan terbaru, apakah versi saat ini atau versi sebelumnya.sumber
Inilah penelitian saya jika ada orang lain yang mengalami kesulitan dengan pengaturan migrasi yang telah diubah / dihapus. Masalah mendasarnya adalah itu
GetPreviousVersion()
tidak berfungsi jika Anda telah mengganti nama atau menghapus pengaturan di versi baru aplikasi Anda. Jadi Anda perlu menyimpan pengaturan diSettings
kelas Anda , tetapi tambahkan beberapa atribut / artefak ke dalamnya sehingga Anda tidak secara tidak sengaja menggunakannya dalam kode di tempat lain, membuatnya usang. Pengaturan sampel usang akan terlihat seperti ini di VB.NET (dapat dengan mudah diterjemahkan ke C #):Pastikan Anda menambahkan properti ini ke namespace / kelas yang sama yang memiliki pengaturan aplikasi Anda. Di VB.NET, kelas ini dinamai
MySettings
dan tersedia diMy
namespace. Anda dapat menggunakan fungsionalitas kelas parsial untuk mencegah pengaturan usang Anda mencampur dengan pengaturan Anda saat ini.Penghargaan penuh untuk jsharrison karena memposting artikel yang bagus tentang masalah ini. Anda dapat membaca detail lebih lanjut di sana.
sumber
Berikut adalah variasi pada solusi yang disajikan di sini yang merangkum logika upgrade ke kelas abstrak yang berasal dari kelas pengaturan.
Beberapa solusi yang diajukan menggunakan atribut DefaultSettingsValue untuk menentukan nilai yang menunjukkan kapan pengaturan sebelumnya tidak dimuat. Preferensi saya adalah cukup menggunakan jenis yang nilai standarnya menunjukkan ini. Sebagai bonus, DateTime? sangat membantu informasi debug.
Turun dari UserSettingsBase:
Dan gunakan itu:
sumber
Jika perubahan Anda ke pengaturan pengguna dilakukan secara terprogram, bagaimana dengan mempertahankan salinan (hanya) modifikasi pada pengguna. Pengaturan dalam file terpisah, misalnya pengaturan pengguna.customized.settings?
Anda mungkin masih ingin mempertahankan dan memuat pengaturan yang diubah di pengaturan pengguna juga. Tetapi dengan cara ini ketika Anda menginstal versi aplikasi Anda yang lebih baru dengan versi pengguna yang lebih baru. Anda dapat menanyakan kepada pengguna apakah mereka ingin terus menggunakan pengaturan yang dimodifikasi dengan menyalinnya kembali ke pengaturan pengguna yang baru. Anda dapat mengimpornya secara grosir, atau membeli toko dan meminta pengguna untuk mengonfirmasi pengaturan mana yang ingin terus mereka gunakan.
EDIT: Saya membaca terlalu cepat pada bagian "lebih akurat" tentang versi perakitan yang menyebabkan pengguna baru. Pengaturan dipasang ke direktori khusus versi baru. Jadi, ide di atas mungkin tidak membantu Anda, tetapi mungkin menyediakan beberapa bahan untuk dipikirkan.
sumber
Beginilah cara saya menanganinya:
}
dan di kelas pengaturan, saya mendefinisikan properti IsDefault:
Di SaveSettings, saya mengatur IsDefault ke false:
sumber