Câu hỏi .NET Config Files configSource bên ngoài thư mục thư mục ứng dụng


Tôi có hai ứng dụng một ứng dụng giao diện điều khiển và ứng dụng ASP.NET khác. Cả hai đều cần biết cùng một appSettings và connectionStrings. Vì vậy, lý tưởng tôi muốn sử dụng thuộc tính configSource của tệp app.config / web.config để trỏ đến vị trí trung tâm. Ví dụ

<connectionStrings configSource="D:\connectionStrings.config"/>
<appSettings configSource="D:\appSettings.config"/>

Tuy nhiên, lỗi này không thành công:

Thuộc tính configSource không hợp lệ .: configSource 'D: \ appSettings.config' không hợp lệ. Nó phải tham chiếu đến một tệp trong cùng thư mục hoặc trong thư mục con dưới dạng tệp cấu hình.

Có cách nào để vẫn sử dụng trình quản lý cấu hình appSettings / connectionStrings và nhận các giá trị từ một vị trí bên ngoài không?
Tôi hài lòng với việc phải thêm mã để làm điều đó, nhưng tôi không muốn phải thay thế toàn bộ hệ thống quản lý cấu hình.


76
2018-02-20 10:54


gốc




Các câu trả lời:


Một giải pháp khác là chỉ cần thêm tệp cấu hình vào tất cả các dự án của bạn dưới dạng liên kết thay vì thực sự sao chép tệp vào dự án của bạn. Sau đó thiết lập "Build Action" của file thành "Content" và "Copy to Output Directory" thành "Copy if newer" và khi bạn biên dịch dự án, bạn sẽ có file trong thư mục đầu ra.

Để thêm tệp dưới dạng liên kết trong hộp thoại "Thêm mục hiện có", có nút Thêm có trình đơn thả xuống. Chọn "Thêm làm liên kết" từ trình đơn thả xuống trên nút Thêm để hoàn tất quy trình.


91
2018-03-28 22:56



Xin chào, tôi thích câu trả lời này và đã cố gắng áp dụng nó cho dự án của riêng tôi, và mọi thứ dường như hoạt động tốt khi tôi "xuất bản" ứng dụng của tôi (db.config được sao chép vào webroot như bạn đã nói), nhưng không phải khi gỡ lỗi thông qua VS & Cassini. Thay vào đó tôi nhận được một "Không thể mở tập tin configSource 'db.config'" ngoại lệ. Có cái gì tôi đang mất tích để có thể làm điều này? Cảm ơn! - Funka
Tất nhiên chỉ đúng sau khi tôi quyết định chia nhỏ và gửi bình luận yêu cầu giúp đỡ sau đó tôi tìm ra ngay sau đó. Tôi nhận thấy db.config của tôi là cũng thế sao chép vào thư mục / bin /, vì vậy tôi đã cập nhật web.config của mình để thêm vào đường dẫn này trong configSource và tất cả có vẻ tốt. Cảm ơn một lần nữa! - Funka
@Funka - Kiểm tra xem bạn có gặp vấn đề vì thuộc tính "Build Action" của db.config của bạn được đặt thành "Không" thay vì "Nội dung" như web.config mặc định hay không. Tôi tin rằng các cài đặt nên là "Build Action" = "Content" và "Copy to Output Directory" = "Không sao chép." - Eric Burcham
Tôi ước tôi có thể upvote 10 lần. - Saeed Neamati
Điều này dường như không hoạt động khi gỡ lỗi trong VS 2013. Tôi đã thử giải pháp Erics và điều này cũng không hoạt động. - Chris Nevill


Trong appSettings bạn có thể sử dụng file = thay vì configSource =


29
2017-12-02 17:01



Tuyệt vời tìm cho tôi! Cảm ơn!! Với điều này, tôi có thể ghi đè các phím chọn trong AppSettings như được hiển thị tại weblogs.asp.net/pwilson/archive/2003/04/09/5261.aspx - Saurabh Kumar


Có vẻ như đó là cách của nó. configSource phải ở trong cùng một thư mục hoặc sâu hơn.

Bạn có thể, mặc dù tôi không chắc chắn bạn Nên, sử dụng liên kết cứng NTFS. [cười toe toét]


16
2018-02-20 11:03





Bạn có thể tải cấu hình từ vị trí tùy ý, nhưng nó sẽ không có sẵn thông qua các thuộc tính tĩnh của ConfigurationManager:

Configuration myConfig = ConfigurationManager.OpenExeConfiguration(path)

(Có quá tải cho phép chỉ định các tệp đa tệp, để hỗ trợ phân cấp mặc định / người dùng chuyển vùng / người dùng cục bộ.)

Mất các thuộc tính tĩnh có nghĩa là tất cả các mã cần phải nhận thức được cấu hình khác nhau.


8
2018-02-20 11:01



Điều này đòi hỏi rằng toàn bộ tập tin cấu hình được nạp. Tôi chỉ cần appSettings & connectionStrings giống nhau, phần còn lại của tệp khác nhau cho mỗi ứng dụng nên nó không giải quyết được vấn đề. - Robert MacLean
Toàn bộ cấu hình được nạp bởi các thuộc tính bình thường (tĩnh), do đó, điều này làm cho không có sự khác biệt thực sự. - Richard
Ngoài ra, bạn chỉ có thể sử dụng định dạng XML của riêng mình và thêm tên của nó vào các tệp cấu hình của ứng dụng và đọc nó trực tiếp. - Richard


Visual Studio 2015

Nếu bạn đang gặp vấn đề này với Web.Config câu trả lời được chấp nhận là chính xác nhưng chỉ để mở rộng vì điều này đã cho tôi cho bản thân mình lòng bàn tay:

Khi bạn thêm tệp .config vào dự án của mình bằng cách sử dụng 'Thêm dưới dạng liên kết' và sau đó đặt thuộc tính Sao chép của liên kết thành 'Sao chép nếu mới' hoặc 'Sao chép luôn', khi đó tệp vật lý sẽ được sao chép vào thư mục / bin.

Vì vậy, khi bạn có một phần cấu hình được định nghĩa trong Web.Config như thế này:

 <section name="mySpecialConfig" type="System.Configuration.AppSettingsSection" requirePermission="false" />

sau đó bạn phải xác định phần tử cấu hình liên quan như sau:

  <mySpecialConfig configSource="bin\MySpecialConfig.config">
  </mySpecialConfig>

sao cho configSource trỏ đến tệp bin \ MySpecialConfig.config không liên kết  Ngoài ra, lưu ý rằng đường dẫn là quan hệ đường dẫn vật lý.

Điều đó có vẻ rõ ràng vô cùng nhưng nếu bạn chưa làm điều này trước khi tệp vật lý chưa nằm trong thư mục \ bin để nó có thể không bấm ngay lập tức.


4
2017-07-16 07:25





Bạn có thể đặt cả hai cài đặt trong machine.config và sau đó chúng có sẵn cho tất cả các ứng dụng của bạn trên máy chủ.


2
2018-02-20 11:01



Đó là một lựa chọn nhưng tôi không muốn (cần) các thiết lập có sẵn cho các ứng dụng khác trên máy. Lo lắng là các chuỗi kết nối, chúng có các tên khá chung chung có thể xung đột với các ứng dụng khác. - Robert MacLean


Giải pháp mà tôi thấy hiệu quả nhất là đặt các tệp cấu hình "được chia sẻ" vào một tệp trung tâm và sau đó sử dụng sự kiện dựng sẵn trong Visual Studio để sao chép chúng vào một thư mục tương đối của từng dự án cần nó.


2
2018-03-11 11:02





Tôi đã có một cuộc đấu tranh với vấn đề này, nhưng tôi đã tìm thấy một giải pháp tốt cho nó ở đây: chạy thử với cấu hình bên ngoài 

(Bạn có thể trực tiếp chạy thử để sao chép các tệp và thư mục vào thư mục chạy thử nghiệm bằng cách chỉnh sửa tệp .testrunconfig.)

Mặc dù tại sao dự án loại thử nghiệm đơn vị có thể nhận được các thiết lập cấu hình từ app.config riêng của nó, nhưng không thể tải các tệp cấu hình tham chiếu như một app.config bình thường là một kiểu khó hiểu với tôi. Tôi sẽ gọi nó là một lỗi vì bạn sẽ mong đợi một dự án thử nghiệm app.config hành xử theo cùng một cách mà app.config của ứng dụng hoạt động, nhưng nó không.


2
2017-07-27 12:43