2013-04-23 37 views
7

Một ứng dụng tôi sử dụng phiên dịch một tệp .NET .config. Tôi đã thêm một dòng chỉ định đường dẫn đến một chứng nó cầnCách chỉ định đường dẫn trong tệp .config liên quan đến tệp?

<add key="Certificate" value="..\certificate.abc"/> 

Tuy nhiên, tôi thấy các ứng dụng chỉ hoạt động khi chạy từ thư mục chính xác của nó .exe.config cư trú. Nếu chạy từ một thư mục khác, nó không thành công, bởi vì nó tìm kiếm chứng chỉ tại ../ mở rộng liên quan đến thư mục hoạt động.

Tôi nên viết gì trong tệp cấu hình để đảm bảo đường dẫn là ..\certificate.abc mở rộng liên quan đến tệp cấu hình thay vì thư mục hoạt động?

Tôi không thể thay đổi ứng dụng (không phải của tôi), tôi chỉ có thể thay đổi tệp cấu hình.

+2

Nếu đây chỉ là khóa bạn đã thêm thì bạn sẽ làm điều đó trong mã khi bạn đã đọc giá trị khóa. –

Trả lời

5

Bằng việc sử dụng dấu ngã

value="~/certificate.abc" 
+1

Bạn đã tìm hiểu về dấu ngã ở đâu? Tôi không thể tìm thấy tài liệu này. –

0

Tôi nghĩ rằng trong trường hợp của bạn, bạn cần phải thiết lập tên tập tin. Thư mục mà tất cả các file bạn đã biết (nếu thư mục có thể được canged - thiết lập thư mục mà không ../)

Và khi bạn cần sử dụng đường - kết hợp vị trí hiện tại của ứng dụng (có thể được nhận trong thời gian chạy) và quan trọng từ thiết lập

hoặc sử dụng

System.Web.HttpContext.Current.Server.MapPath("~/[PARTH_TO_FILE]") ' 
+0

Bạn không cần phải sao chép các câu trả lời của người khác bằng cách chỉnh sửa câu trả lời của bạn. – SpaceApple

1

Bạn không thể thay đổi điều này chỉ bằng cách thay đổi tệp cấu hình. Trừ khi bạn sử dụng một đường dẫn tuyệt đối.

Nếu bạn có thể thay đổi các ứng dụng ...

Nếu đây là một ứng dụng asp.net, sau đó sử dụng Server.MapPath. Nếu đó là một ứng dụng Windows, bạn cần lấy thư mục của ứng dụng thực thi và kết hợp nó với đường dẫn tương đối trong tệp cấu hình của bạn.

System.Reflection.Assembly.GetExecutingAssembly().Location sẽ cung cấp cho bạn đường dẫn đến tệp .EXE. Sau đó, bạn có thể gọi Path.Combine để kết hợp đường dẫn tương đối của bạn với đường dẫn của ứng dụng.

1

tệp cấu hình có thể nằm ở vị trí khác, sau đó tệp thi hành. như bạn mantion thực hiện con đường tôi hiểu đây là ứng dụng dựa trên máy tính để bàn vì vậy ở đây bạn đi những gì bạn có thể làm như thế này.

trong Cấu hình.

<setting name="FilePath" serializeAs="String"> 
     <value>AppPath\MyFile.abc</value> 
    </setting> 

và để thử lại điều này.

var path = System.Configuration.ConfigurationManager.AppSettings["FilePath"]; 

      if (path !=null && path.Contains("AppPath")) 
      { 

       var filepath = System.IO.Path.Combine(
        System.Reflection.Assembly.GetExecutingAssembly().Location, 
        path.Replace("AppPath", string.Empty).ToString()); 

       Console.WriteLine(filepath); 
      } 
0

Trong studio trực quan 2015, từ khóa "~" không còn hoạt động nữa. Bây giờ bạn có thể sử dụng:

value="folder\subfoler" 

"thư mục" có cùng cấp có đuôi .exe tập tin

0

..\ đi lên một cấp thư mục. Lặp lại nhiều lần nếu cần, ví dụ: ..\..\ để truy cập thư mục bin của bạn.

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