2010-03-19 30 views
28

Tôi đã tạo một ứng dụng sử dụng settings.settings để lưu trữ một số cài đặt cụ thể của người dùng (scope = User). Cài đặt được tải đúng khi khởi động, thay đổi trong quá trình sử dụng và được lưu chính xác cho lần khởi chạy tiếp theo. Chu kỳ này dường như không có vấn đề gì.Làm thế nào để duy trì các thay đổi trong tập tin .settings/.config trên một phiên bản tập tin thay đổi?

Sự cố phát sinh khi tôi cập nhật phiên bản lắp ráp và tệp cho một bản dựng mới. Các cài đặt không còn được tải khi khởi động (thay vào đó các giá trị mặc định được sử dụng). Nó cũng xuất hiện rằng một tập tin cấu hình được lưu từ phiên bản 1.1 sẽ vẫn tồn tại ngay cả khi phiên bản 1.2 được khởi chạy và tệp cấu hình MỚI được tạo và lưu lại (tức là bạn có thể khởi chạy lại phiên bản 1.1 và tệp cấu hình sẽ là tệp cấu hình được lưu từ đó phiên bản).

Vì vậy, có vẻ như cài đặt dành riêng cho phiên bản của hội đồng và/hoặc tệp. Cũng cần lưu ý rằng giữa phiên bản 1.1 và phiên bản 1.2 không có thay đổi đối với tệp settings.settings hoặc bất kỳ thứ gì khác cho vấn đề đó (tức là thay đổi duy nhất tôi thực hiện giữa các bản dựng khác nhau này là sửa đổi số phiên bản).

Có cách nào để duy trì các cài đặt này trong các thay đổi phiên bản không?

+0

[Giữ lại cài đặt giữa các nâng cấp] (https://stackoverflow.com/questions/534261/how-do-you-keep-user-config-settings-across-different-assembly-versions-in-net/534335# 534335) có thể là một thách thức khác khi sử dụng lớp .Net Settings. Liên kết ở đầu bài đăng này có câu trả lời. –

+0

Tôi đã đăng một giải pháp có thể có trong [chủ đề này] (https://stackoverflow.com/a/47921377/3223783). Hy vọng rằng sẽ giúp! – dontbyteme

+0

Tôi đã đăng một giải pháp có thể có trong các chủ đề sau đây: https://stackoverflow.com/a/47921377/3223783 Hy vọng rằng sẽ giúp! – dontbyteme

Trả lời

18

Markus Olsson đã đưa ra câu trả lời khá hay here.

Về cơ bản, bạn sẽ cần sử dụng phương thức ApplicationSettingsBase.Upgrade().

+0

Cảm ơn bạn đã cung cấp thông tin !! Nó bây giờ được biên soạn, thử nghiệm, làm việc như mong đợi và bây giờ tích hợp đầy đủ vào dự án !! Tôi sẽ trao cho bạn tiền thưởng khi tôi có thể (dường như tôi phải đợi để chấp nhận câu trả lời này - nên muộn hơn ngày hôm nay hoặc ngày mai). : D – InvertedAcceleration

1

Tôi hy vọng người khác có câu trả lời tốt hơn. Tôi đã có câu hỏi này một vài năm trước đây, và giải pháp duy nhất tôi có thể tìm thấy (đã làm việc) là sử dụng cơ chế của riêng tôi để lưu trữ các thiết lập, chứ không phải là cách dựng sẵn .NET mặc định.

+0

Cảm ơn bạn đã sứt mẻ trong kinh nghiệm của bạn ... Tôi bị thổi bay đi Tôi không có câu trả lời ngay bây giờ mà là thẳng về phía trước và đơn giản (cả SO và tôi cố gắng để trả lời điều này bản thân mình trong tài liệu). Nó khiến tôi tin rằng điều đó là không thể ...điều này thật điên rồ đối với những gì có vẻ như một tính năng tiết kiệm thời gian tuyệt vời được thực hiện gần như hoàn toàn vô dụng cho phần lớn các dự án. – InvertedAcceleration

41

Một vài giải thích:

Bạn phải gọi phương thức Upgrade của ApplicationSettingsBase lớp có nguồn gốc (mà thường được gọi là Settings và được tạo ra cho bạn bằng Visual Studio):

Properties.Settings.Default.Upgrade(); 

Khi/nơi để gọi phương thức Upgrade? Có một mẹo đơn giản mà bạn có thể áp dụng: xác định cài đặt người dùng được gọi là UpgradeRequired (ví dụ) là bool (cách dễ nhất là thông qua IDE). Đảm bảo giá trị mặc định của nó là true.

Chèn mã này snipped vào lúc bắt đầu của ứng dụng:

if (Properties.Settings.Default.UpgradeRequired) 
    { 
     Properties.Settings.Default.Upgrade(); 
     Properties.Settings.Default.UpgradeRequired = false; 
     Properties.Settings.Default.Save(); 
    } 

Vì vậy, các phương pháp nâng cấp sẽ chỉ được gọi sau những thay đổi phiên bản và chỉ một lần (kể từ khi bạn vô hiệu hóa việc nâng cấp hơn nữa bằng cách thiết lập UpgradeRequired = false cho đến khi một phiên bản thay đổi - khi thuộc tính lấy lại giá trị mặc định là true).

+2

Thay vì/ngoài 'UpgradeRequired', tôi sẽ lưu phiên bản của Ứng dụng dưới dạng Cài đặt. Điều đó cho phép bạn thực hiện chuyển đổi nâng cấp tùy chỉnh (nghĩa là giá trị không hợp lệ/giá trị hợp lệ khác với giá trị/giá trị mặc định của phiên bản mới nhất). Bạn có thể có mã chuyển đổi mỗi phiên bản thích hợp cần chuyển đổi sang phiên bản thấp nhất tiếp theo yêu cầu mã và chuỗi mã kết hợp với nhau: a) giảm độ phức tạp của mã chuyển đổi của phiên bản mới nhất và b) cho phép tiềm năng gỡ bỏ mã chuyển đổi cũ. – Tom

Các vấn đề liên quan