2011-07-11 29 views
6

Tôi có dự án C# này trong Visual Studio (2010), và tôi muốn tham khảo một tệp trong thư mục chính của tôi trong phần <appSettings> của tệp App.config của dự án. Tức là, tôi sử dụng cú pháp này:Có thể tham khảo thư mục chính trong appSettings trong tệp App.config không?

<appSettings> 
    <add key="Database" value="sqlite:///C:\Users\arvek\test.db3" /> 
</appSettings> 

Có thể tham khảo thư mục chính của tôi (C: \ Users \ arvek) thông qua biến thay vì mã hóa trực tiếp không? F.ex .: value = "sqlite: /// $ HOME \ test.db3".

Trả lời

9

ConfigurationManager sẽ không tự động mở rộng bất kỳ thứ gì trong cài đặt ứng dụng vì chúng chỉ là chuỗi dạng tự do, nhưng bạn có thể thực hiện theo cách thủ công. Sử dụng phương pháp ExpandEnvironmentVariables của Environment, sẽ mở rộng các biến của biểu mẫu %VARIABLENAME% theo môi trường hiện tại. Vì vậy:

<appSettings> 
    <add key="Database" value="sqlite:///%APPDATA%\database\test.db3" /> 
</appSettings> 


string path = Environment.ExpandEnvironmentVariables(ConfigurationManager.AppSettings["Database"]); 

Các đường dẫn gốc vào thư mục "home" của bạn là trong biến% USERPROFILE%, mặc dù% APPDATA% là nơi truyền thống để đưa loại điều bạn đang nói về. Cũng có% ALLUSERSPROFILE% cho dữ liệu toàn hệ thống (mặc dù trong Windows 7 thực sự trỏ đến một thư mục dữ liệu toàn hệ thống đặc biệt, không phải là hồ sơ "Công khai".)

+0

Tôi không thể tin rằng tôi không nghĩ đến việc xử lý mở rộng biến mình :) Tốt nên gọi điều% APPDATA%. – aknuds1

0

Tôi thấy dễ dàng hơn khi chỉ nhận được thư mục của ứng dụng dòng mã đơn giản này

string appBasePath = AppDomain.CurrentDomain.BaseDirectory; 

Đó là cách tôi luôn đề cập đến nó.

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