2012-07-02 23 views
11

Tôi đã tạo một GUI nhỏ để quản trị một số cài đặt trong tệp app.config. GUI được phát hành như là một phần của sản phẩm của tôi, làm cho nó có thể thay đổi giá trị trong tệp app.config, mà không cần mở nó trong trình soạn thảo văn bản.Tránh thông tin phiên bản cụ thể trong configSection trong app.config

Các thuộc tính được triển khai trong một configSection tùy chỉnh, làm cho nó được nhập mạnh mẽ trong mã. Vấn đề của tôi là, khi file app.config được cập nhật (khi tôi tiết kiệm từ GUI), tên đầy đủ của lắp ráp của tôi được viết trong configSection như thế này:

<section name="ConfigurationSettings" type="PerformanceDude.MSBuildShellExtension.Common.ConfigurationSettings, Common, Version=2.2.1.0, Culture=neutral, PublicKeyToken=1ab1b15115e63xxx" /> 

Khi tôi nâng cấp lắp ráp này để một số phiên bản mới, phiên bản lắp ráp mã GUI không còn khớp với tham chiếu lắp ráp trong app.config.

Đây là cách tôi tải các cài đặt:

var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = ConfigFilePath }, ConfigurationUserLevel.None); 
var settings = Config.GetSection("ConfigurationSettings") as ConfigurationSettings; 

Đây là cách tôi lưu các thiết lập:

config.Save(ConfigurationSaveMode.Minimal, true); 

Tôi không muốn viết một kịch bản nâng cấp thay đổi phiên bản everytime tôi cập nhật . Có ai biết một giải pháp tuyệt vời cho vấn đề này?

+2

Có thể bao gồm mã bạn sử dụng để tuần tự hóa và lưu cấu hình không? – dash

+0

Tải và lưu mã hiện có trong phần mô tả :) – ThomasArdal

+0

Bạn đã bao giờ tìm ra giải pháp cho điều này chưa? – Zoomzoom

Trả lời

2

Tôi đã phải làm một điều tương tự trước đây. Tôi đã kết thúc tải tập tin cấu hình như xml, de-serializing các phần có liên quan vào các đối tượng, sau đó đưa chúng trở lại vào xml. Tránh API cấu hình .net theo cách đó sẽ tránh được sự cố với phiên bản.

Cách tiếp cận khác là chuyển hướng phiên bản cũ của phiên bản sang phiên bản mới. Nếu assembly của bạn nằm trong GAC, bạn có thể sử dụng các tệp chính sách để thực hiện việc này và triển khai chúng khi bạn triển khai một phiên bản mới; sau đó các số phiên bản trong cấu hình sẽ không thành vấn đề.

+0

Thực ra --- nếu bạn thêm DLL cấu hình vào GAC thì bạn không cần tên đầy đủ khi xác định phần cấu hình của mình. Tất cả bạn cần là (lớp, lắp ráp) –

+0

Chắc chắn @SASS_Shooter, nhưng vấn đề là anh ta không cần phải quan tâm nếu có thứ gì đó đặt số phiên bản vào đó nếu anh ta có một tệp chính sách. – tallseth

+1

DLL không có trong GAC. Nếu tôi tải cấu hình dưới dạng XML, dữ liệu sẽ không được gõ mạnh mẽ i C#. Toàn bộ ý tưởng với việc sử dụng một phần cấu hình là để tôi có thể tải và lưu từng thuộc tính thông qua một đối tượng C# chứa các thuộc tính được gõ mạnh mẽ. Cảm ơn bạn đã đề xuất của bạn, mặc dù :) – ThomasArdal