2011-10-24 54 views
7

Tôi đang trong quá trình viết dịch vụ bằng C# và tôi cần lưu trữ danh sách các chuỗi trong tệp app.config. Tôi có 161 trong số này.Cấu hình ứng dụng của C# "app.config" tệp ... cách lưu trữ bộ sưu tập?

Làm cách nào để lưu trữ thông tin này trong ứng dụng .bản? Phải có một cách, bởi vì đây là những giá trị đánh máy mạnh mẽ và do đó tôi phải dễ dàng sử dụng bất kỳ loại .NET hợp lệ trong mã để truy cập chúng!

Tôi muốn tránh có một giá trị sử dụng danh sách được phân cách bằng dấu phẩy cho các vấn đề hiệu suất rõ ràng.

+0

Danh sách được phân tách bằng dấu phẩy sẽ ảnh hưởng như thế nào đến hiệu suất? Tôi đã sử dụng chuỗi phân cách bằng dấu phẩy trong các tệp cấu hình trước và không nhận thấy bất kỳ vấn đề hiệu suất nào. – Tim

+0

@Tim - Tôi đồng ý rằng hiệu suất nếu có lẽ không phải là trình điều khiển cho điều này, nhưng đối với 161 mục, danh sách được phân cách bằng dấu phẩy không phải là giải pháp thanh lịch nhất trong tệp app.config của bạn. Cho rằng app.config là XML và sẽ không được tuần tự hóa, tốt hơn hết là lưu trữ dữ liệu của bạn trong XML bên trong nó. – Fenton

Trả lời

11

tôi sử dụng Microsoft Visual Studio 2010.

  1. Trong Solution Explorer, mở rộng Thuộc tính nút của dự án của bạn.

  2. Trong Solution Explorer, kích đúp vào .settings tập tin mà bạn muốn thêm vào một môi trường mới. Tên mặc định cho tệp này là Cài đặt.settings.

  3. Trong Cài đặt thiết kế, thiết lập Tên, Loại, Phạm viValue cho thiết lập của bạn. Mỗi hàng đại diện cho một thiết lập duy nhất.

  4. Loại bạn cần là System.Collections.Specialized.StringCollection. Điều này có thể được đặt sau khi nhấp vào Duyệt qua ở cuối Danh sách thả xuống xuất hiện khi bạn nhấp để đặt Loại.

  5. Nhấp vào nút xuất hiện ở cuối hộp văn bản Giá trị.

  6. Nhập chuỗi của bạn, từng cái một, trong hộp thoại xuất hiện.

This is how it goes.

10

Có một bài viết tốt về lưu trữ danh sách (hoặc bất kỳ đối tượng tùy chỉnh) trong file app.config của bạn trong Best Way Of Saving Lists in App.Config

Về cơ bản, bạn tạo một đối tượng đại diện cho dữ liệu.

public class MyConfig 
{ 
    public string[] myList; 
    public string someOtherValueIfYouWant; 
} 

Và viết một handler cấu hình cho nó ...

public class ConfigSectionHandler : IConfigurationSectionHandler 
{ 
    public const string SECTION_NAME = "MyConfig"; 
    public object Create(object parent, object configContext, XmlNode section) 
    { 
     string szConfig = section.SelectSingleNode("//MyConfig").OuterXml; 
     MyConfig retConf = null; 

     if (szConfig != string.Empty || szConfig != null) 
     { 
      XmlSerializer xsw = new XmlSerializer(typeof(MyConfig)); 
      MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szConfig)); 
      ms.Position = 0; 
      retConf = (MyConfig)xsw.DeSerialize(ms); 
     } 
     return retConf; 
    } 

} 

Và điều này cho phép bạn đặt XML sau trong file app.config của bạn ...

ứng dụng biết chính xác.cấu hình về phần cấu hình mát mẻ của bạn

<configSections> 
    <section name="MyConfig" type="ConfigSectionHandler,someAssembly" /> 
</configSection> 

Và sau đó thêm phần cấu hình của bạn ...

<MyConfig> 
    <myList>First one</myList> 
    <myList>Second one</myList> 
    <myList>Keep going</myList> 
    <myList>And so on</myList> 
    <someOtherValueIfYouWant>some non array config</someOtherValueIfYouWant> 
</MyConfig> 
+1

CẢNH BÁO: Chủ đề này sử dụng giao diện System.Configuration.IConfigurationSectionHandler, giao diện này đã không được chấp nhận trong .NET Framework phiên bản 2.0. Đối với một ví dụ sử dụng lớp System.Configuration.ConfigurationSection, xem Làm thế nào để: Tạo mục cấu hình tùy chỉnh bằng cách sử dụng ConfigurationSection (http://msdn.microsoft.com/en-us/library/2tw134k3(v=vs.100).aspx) – woohoo

-3

https://stackoverflow.com/a/30178144/878539

StringCollection được KHÔNG đề nghị trong VS2015RC với mục đích annoyance'ness khi tải cửa sổ hộp thoại cài đặt thuộc tính cho dự án và lưu lại dữ liệu. Nếu bạn có một tá mục nhập cho serializeAs = "Xml" và mỗi khi bạn mở cửa sổ thuộc tính, nó sẽ bật lên với một hộp thoại cho MACHI mục nhập cho bạn biết để xác nhận ghi đè. Có/Không hoàn toàn không có gì.

Dữ liệu không khớp cho mỗi tệp sẽ đặt tính năng này tắt và là sự cố đã biết. Xem bài đăng khác của tôi có liên quan.

Tôi sẽ bỏ phiếu cho bạn để sử dụng VS2010 và đề xuất như vậy, nhưng tôi không có đủ đại diện và nó vẫn tồn tại thông qua VS2015RC.

Sử dụng giải pháp thay thế như lưu trữ Cấu hình tùy chỉnh hoặc tìm cách để rời khỏi bộ sưu tập của bạn ngoài trình thiết kế hoặc app.config. Cái này hay cái kia.

Giải pháp khả dụng chỉ dành cho những người sẵn sàng đưa lên cửa sổ hộp thoại hoặc hiếm khi chỉnh sửa thông tin thuộc tính cài đặt.

Bạn có muốn giới thiệu nag màn hình nuciences cho sản xuất hoặc phát hành cho bất kỳ loại dự án thương mại? : P

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