Trong trường hợp chuỗi kết nối, thực sự có thể trỏ đến tệp được chia sẻ. Nếu tệp được chia sẻ nằm trên mạng UNC, nó yêu cầu quyền quản trị trên máy nơi ứng dụng sẽ được lưu trữ.
Giải pháp: Trong web.config, hãy sử dụng configSource để trỏ đến tệp cấu hình cục bộ. Do hạn chế .Net, điều này phải bằng hoặc thấp hơn mức của tệp cấu hình gốc. Tôi chỉ trỏ đến một tệp trong thư mục ứng dụng:
<connectionStrings configSource="ConnectionStrings.config" />
Ở nơi dùng chung có thể truy cập bởi người dùng ứng dụng, thêm tệp cấu hình có chứa chuỗi kết nối được chia sẻ. Tệp này không được chứa bất kỳ xml nào khác ngoài phần connectionStrings. Tệp được chia sẻ, ConnectionStrings.config, trông giống như sau:
<connectionStrings>
<clear/>
<add name="connString1" connectionString="connString1 info goes here"/>
<add name="connString2" connectionString="connString2 info goes here"/>
</connectionStrings>
Bây giờ, hãy thử. Tạo một liên kết tượng trưng Windows trong thư mục ứng dụng của bạn trỏ đến tệp cấu hình được chia sẻ bên ngoài. Bạn sẽ cần đặc quyền quản trị để thực hiện việc này:
mklink ConnectionStrings.config \\someServer\someShare\someFolder\ConnectionStrings.config
Chúng tôi vừa thông minh hơn .Net. Hệ thống cấu hình sẽ sử dụng thiết lập configSource để tìm các chuỗi kết nối trong một tệp cục bộ được gọi là ConnectionStrings.config. Liên kết tượng trưng trông giống như một tệp tới .Net và liên kết tượng trưng sẽ giải quyết tệp cấu hình được chia sẻ.
Cẩn thận: Thay đổi đối với tệp được chia sẻ không tự động kích hoạt ứng dụng khởi động lại .Net. Trong trường hợp của IIS, các trang web hoặc hồ bơi ứng dụng sẽ cần phải được khởi động lại bằng tay.
Do nhu cầu về đặc quyền quản trị để tạo liên kết tượng trưng, cách tiếp cận này có thể không hoạt động đối với mọi người. Có hai lựa chọn thay thế có liên quan có thể hoạt động nếu tệp được chia sẻ nằm trên cùng một ổ đĩa logic - liên kết cứng và nút nối. Xem this discussion và this discussion để biết thêm thông tin.
tốt đẹp - dễ dàng hơn nhiều cho mọi người hiểu hơn cách của tôi –
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ỉ 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à _also_ được 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' của nó và tất cả đều có vẻ tốt. Cảm ơn một lần nữa! – Funka