ฉันต้องการเพิ่มข้อความที่ยกมานี้เป็นข้อมูลอ้างอิงเมื่อฉันมีปัญหานี้ในอนาคต สมมติว่าคุณสามารถสั่งให้โครงสร้างพื้นฐาน ApplicationSettings คัดลอกการตั้งค่าจากเวอร์ชันก่อนหน้าได้โดยเรียกอัปเกรด :
Properties.Settings.Value.Upgrade();
จากบล็อกโพสต์คำถามที่พบบ่อยเกี่ยวกับการตั้งค่าไคลเอ็นต์ : ( เก็บถาวร )
ถาม: เหตุใดจึงมีหมายเลขเวอร์ชันในเส้นทาง user.config หากฉันปรับใช้แอปพลิเคชันเวอร์ชันใหม่ผู้ใช้จะไม่สูญเสียการตั้งค่าทั้งหมดที่บันทึกโดยเวอร์ชันก่อนหน้านี้ใช่หรือไม่
ตอบ: มีสาเหตุสองประการที่ทำให้พา ธ user.config ไวต่อเวอร์ชัน
(1) เพื่อรองรับการใช้งานแอปพลิเคชันเวอร์ชันต่างๆแบบเคียงข้างกัน (คุณสามารถทำได้ด้วย Clickonce เป็นต้น) เป็นไปได้ที่แอปพลิเคชันเวอร์ชันต่างๆจะบันทึกการตั้งค่าต่างๆไว้
(2) เมื่อคุณอัปเกรดแอปพลิเคชันคลาสการตั้งค่าอาจได้รับการเปลี่ยนแปลงและอาจเข้ากันไม่ได้กับสิ่งที่บันทึกไว้ซึ่งอาจทำให้เกิดปัญหาได้
อย่างไรก็ตามเราได้ทำให้การอัปเกรดการตั้งค่าจากแอปพลิเคชันเวอร์ชันก่อนหน้าเป็นเวอร์ชันล่าสุดเป็นเรื่องง่าย เพียงเรียก
ApplicationSettingsBase.Upgrade ()และจะดึงการตั้งค่าจากเวอร์ชันก่อนหน้าที่ตรงกับเวอร์ชันปัจจุบันของคลาสและจัดเก็บไว้ในไฟล์ user.config ของเวอร์ชันปัจจุบัน คุณยังมีตัวเลือกในการลบล้างพฤติกรรมนี้ในคลาสการตั้งค่าของคุณหรือในการใช้งานผู้ให้บริการของคุณ
ถาม: โอเค แต่จะรู้ได้อย่างไรว่าเมื่อใดควรเรียกอัปเกรด
ตอบ: เป็นคำถามที่ดี ใน Clickonce เมื่อคุณติดตั้งแอปพลิเคชันเวอร์ชันใหม่ ApplicationSettingsBase จะตรวจพบและอัปเกรดการตั้งค่าให้คุณโดยอัตโนมัติเมื่อโหลดการตั้งค่าจุด ในกรณีที่ไม่ใช่ Clickonce จะไม่มีการอัปเกรดอัตโนมัติ - คุณต้องเรียกอัปเกรดด้วยตัวเอง นี่คือแนวคิดหนึ่งในการพิจารณาว่าเมื่อใดควรเรียกอัปเกรด:
ตั้งค่าบูลีนที่เรียกว่า CallUpgrade และให้ค่าเริ่มต้นเป็นจริง เมื่อแอปของคุณเริ่มทำงานคุณสามารถทำสิ่งต่อไปนี้
if (Properties.Settings.Value.CallUpgrade)
{
Properties.Settings.Value.Upgrade();
Properties.Settings.Value.CallUpgrade = false;
}
สิ่งนี้จะช่วยให้มั่นใจได้ว่ามีการเรียกใช้ Upgrade () ในครั้งแรกที่แอปพลิเคชันทำงานหลังจากใช้งานเวอร์ชันใหม่
ฉันไม่เชื่อสักวินาทีเดียวว่ามันสามารถใช้งานได้จริง - ไม่มีทางที่ Microsoft จะให้ความสามารถนี้ได้ แต่วิธีการนั้นก็เหมือนกัน