Chúng tôi sử dụng một hệ thống kết hợp một số câu trả lời hiện có trên trang này, đồng thời dựa trên gợi ý này của Scott Hanselman .
Nói tóm lại, những gì chúng tôi đã làm là có một app.config / web.config chung và có hầu hết các cài đặt cụ thể trong các tệp riêng lẻ, như được đề xuất bởi các câu trả lời khác ở đây. ví dụ: đối với cài đặt SMTP của chúng tôi, app.config chứa
<system.net>
<mailSettings>
<smtp configSource="config\smtp.config" />
</mailSettings>
</system.net>
Tệp này nằm trong kiểm soát nguồn. Tuy nhiên, các tệp riêng lẻ, như thế này, không phải là:
<?xml version="1.0" encoding="utf-8" ?>
<smtp deliveryMethod="Network">
<network host="127.0.0.1" port="25" defaultCredentials="false" password="" userName ="" />
</smtp>
Đó không hoàn toàn là nơi câu chuyện kết thúc. Điều gì về các nhà phát triển mới hoặc cài đặt nguồn mới? Phần lớn cấu hình không còn nằm trong quyền kiểm soát nguồn và việc tạo thủ công tất cả các tệp .config mà chúng cần. Tôi thích có nguồn ít nhất sẽ biên dịch ngay lập tức.
Do đó, chúng tôi giữ một phiên bản của tệp .config trong kiểm soát nguồn, có tên là tệp .config.default . Do đó, một cây nguồn tươi sẽ trông như thế này:
Tuy nhiên, không thực sự có ích cho nhà phát triển, vì đối với Visual Studio, chúng chỉ là những tệp văn bản vô nghĩa. Do đó, tệp batch copy_default_config.bat
sẽ đảm nhận việc tạo một tập hợp các tệp .config ban đầu từ các tệp .config.default:
@echo off
@REM Makes copies of all .default files without the .default extension, only if it doesn't already exist. Does the same recursively through all child folders.
for /r %%f in (*.default) do (
if not exist "%%~pnf" (echo Copying %%~pnf.default to %%~pnf & copy "%%f" "%%~pnf" /y)
)
echo Done.
Tập lệnh có thể chạy lại một cách an toàn, trong đó các nhà phát triển đã có tệp .config của họ sẽ không bị ghi đè chúng. Do đó, người ta có thể hình dung việc chạy tệp loạt này như một sự kiện tạo trước. Các giá trị trong tệp .default có thể không chính xác cho một cài đặt mới, nhưng chúng là một điểm khởi đầu hợp lý.
Cuối cùng những gì mỗi nhà phát triển kết thúc với là một thư mục tệp cấu hình trông giống như sau:
Nó có vẻ hơi phức tạp, nhưng nó chắc chắn thích hợp hơn với sự rắc rối của các nhà phát triển giẫm lên ngón chân của nhau.