2012-07-13 11 views
10

Tôi có một ứng dụng giao diện điều khiển có App.config riêng.Tại sao thay đổi của tôi về AppSettings trong App.config không được tính đến trong thời gian chạy? (Ứng dụng Console)

Tôi cần thay đổi một số giá trị theo thời gian.

Vấn đề của tôi là khi tôi thực thi exe trong thư mục bin/debug, nó sẽ nhận được các ứng dụng thích hợp một cách chính xác. Nhưng khi tôi chỉnh sửa và thay đổi giá trị của một số cặp khóa/giá trị và RE-RUN exe, nó vẫn đọc giá trị ban đầu.

(By RE-RUN tôi có nghĩa là chạy ứng dụng trên Promt lệnh bằng cách gọi MyTool.exe)

Tôi cố gắng để gọi

ConfigurationManager.RefreshSection("appSettings"); 

trong sự khởi đầu của phương pháp chính của tôi. Nhưng không giúp được gì.

Bạn có thể vui lòng cho biết? Cảm ơn

+0

Bạn có chỉnh sửa app.config bên trong IDE hay bạn chỉnh sửa trực tiếp tệp exe.config trong thư mục BIN/DEBUG? – Steve

+0

Trong thư mục gỡ lỗi. Không có trong IDE. – pencilCake

+0

Và giá trị trên thuộc tính Sao chép vào thư mục đầu ra của app.config bên trong IDE là gì? – Steve

Trả lời

29

Nhưng khi tôi chỉnh sửa và thay đổi giá trị của một số cặp khóa/giá trị và RE-RUN exe, nó vẫn đọc các giá trị ban đầu.

Phụ thuộc vào cách bạn đang thực hiện lại bản sao này. Nếu bạn đang làm điều này trong Visual Studio, bằng cách nhấn F5, VS chỉ cần sao chép tệp app.config trong dự án của bạn vào đầu ra và đổi tên thành AppName.exe.config. Vì vậy, nếu bạn muốn thay đổi của bạn được đưa vào tài khoản, bạn phải sửa đổi AppName.exe.config (không App.config) và sau đó chạy thực thi từ Windows Explorer.

Điều này đang được nói, App.config chỉ đọc và phân tích cú pháp một lần. Khi ứng dụng bắt đầu. Các giá trị sau đó được lưu trữ để tránh phân tích cú pháp XML tốn kém mỗi khi ứng dụng của bạn yêu cầu một số giá trị.

App.config được thiết kế để lưu trữ các giá trị cấu hình không được phép thay đổi. Nếu bạn cần thay đổi giá trị cấu hình động, bạn nên sử dụng một số cơ chế lưu trữ khác: tệp, cơ sở dữ liệu, ...

Nhưng phương pháp ConfigurationManager.RefreshSection("appSettings"); sẽ hoạt động. Khi bạn đã sửa đổi tệp AppName.exe.config, bạn gọi phương thức này và sau đó tìm nạp lại giá trị bạn cần bằng cách sử dụng ConfigurationManager.AppSettings["someKey"]; sẽ trả về giá trị mới cho bạn.

+0

Tôi đồng ý. Nhưng nếu tôi sẽ không đạt được những gì tôi yêu cầu. Có thể không? (1 để được tư vấn thực hành tốt nhất) – pencilCake

+0

Bởi RE-RUN Tôi có nghĩa là chạy ứng dụng trên lệnh promt bằng cách gọi MyTool.exe – pencilCake

+0

Ai sẽ sửa đổi tệp này trong khi ứng dụng đang chạy? Bản thân ứng dụng hoặc một số quy trình bên ngoài khác? –

0
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
// change ConnectionString in App.Config for Entity FrameWork Object.... 
//..... 
config.Save(); 

bạn có lưu tệp cấu hình không?

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