Cara menyesuaikan file .net .config secara dinamis

Saya bagian dari tim pengembangan kecil dan saat ini kami beralih dari model di mana kami berbagi database pengembangan yang sama ke model di mana kami semua memiliki database pengembangan pribadi..

Karena itu, kami mencoba mencari cara mengelola file .config web dan aplikasi untuk mengakomodasi database individual. Jelas kami ingin menghindari situasi di mana setiap orang perlu mengubah string koneksi secara manual agar mengarah ke database mereka sendiri, lalu ingatlah untuk mengubahnya kembali sebelum memeriksa kembali!

Saya yakin ini adalah masalah yang sangat umum yang dihadapi hampir semua tim pengembangan. Meskipun demikian, saya tidak dapat menemukan solusi apa pun untuk masalah ini.

Saya akrab dengan transformasi web.config menggunakan sintaks xdt dan meskipun ini membantu modifikasi file, (sejauh yang saya tahu) tidak menyediakan cara untuk memasukkan nilai parameter eksternal. Misalnya, kita memerlukan transformasi untuk mendeteksi pengguna saat ini, dan mengganti nama database di .config dengan nama penggunanya.

Jadi, bagaimana Anda mengatasi masalah ini di tim pengembangan Anda?

Terima kasih.

Sunting:

Maaf, saya melewatkan informasi yang cukup penting sehingga jawaban ini tidak dapat diterima. Sebagai sebuah perusahaan, kita semua bekerja dari jarak jauh dan desktop jarak jauh ke dalam lingkungan pengembangan kita. Kami secara efektif memiliki satu mesin pengembangan (yang kuat) yang digunakan dan digunakan oleh semua pengembang secara bersamaan. Oleh karena itu, menggunakan alias atau memodifikasi file host dll akan berlaku untuk semua pengguna secara setara dan tidak memberikan penyesuaian individual yang diperlukan. Contoh SQL sudah merupakan contoh lokal, itu hanya contoh lokal pada mesin yang digunakan oleh semua pengembang.


person Martyn    schedule 13.06.2012    source sumber


Jawaban (5)


Saya dapat menyarankan dua cara untuk melakukan ini.

  1. Gunakan alias yang sama untuk nama server database Anda sehingga string koneksi akan sama, Anda dapat melakukannya dengan memasukkan baris berikut ke dalam file host Anda:

    127.0.0.1 SERVER DB

  2. Masukkan string koneksi Anda ke file eksternal dan jangan tambahkan ke kontrol sumber. Untuk konfigurasi pementasan dan rilis, Anda dapat menambahkan string koneksi yang diperlukan melalui transformasi konfigurasi web.

Dalam kasus kedua web.config Anda akan terlihat seperti ini:

<connectionStrings configSource="connectionStrings.config"></connectionStrings>

EDIT: Di mana file connectionStrings.config ditempatkan di folder yang sama tetapi ditambahkan ke daftar abaikan di bawah kendali sumber sehingga setiap pengembang akan memiliki salinan file ini sendiri dan perubahannya tidak akan mempengaruhi pengembang lain. Untuk menyederhanakan, Anda dapat membuat file connectionStrings.config.default yang dapat digunakan sebagai templat sehingga ketika pengembang baru bergabung dengan proyek ini, dia akan membuat salinan connectionStrings.config miliknya sendiri berdasarkan file ini dengan nilai default.

person Sergey Rybalkin    schedule 13.06.2012
comment
Terima kasih, silakan lihat Edit saya yang menjelaskan mengapa ini tidak membantu situasi kami. - person Martyn; 14.06.2012
comment
Ok aku paham. Tapi kenapa Anda tidak menyukai pendekatan kedua? Sejauh yang saya mengerti meskipun bekerja di komputer yang sama, pengembang memiliki salinan kode sumbernya sendiri, bukan? - person Sergey Rybalkin; 14.06.2012
comment
Ya tapi masalahnya sama, setiap pengembang harus menyesuaikan kode sumber agar mengarah ke file koneksi masing-masing. Solusi tersebut secara efektif memindahkan masalah dari file web.config ke file baru lainnya. -- Mungkin saya tidak memahaminya, dapatkah Anda menjelaskan lebih lanjut tentang cara menyiapkan file eksternal ini, dan cara mendapatkan sumber untuk mengaksesnya. Terima kasih! - person Martyn; 20.06.2012
comment
Saya telah menambahkan penjelasan lebih rinci tentang pendekatan saya. Pada dasarnya Anda benar - masalahnya dipindahkan ke file lain dan hanya diselesaikan sebagian. Namun setiap pengembang hanya perlu membuatnya secara manual satu kali dan tidak perlu mengubahnya kembali sebelum memeriksa kembali. - person Sergey Rybalkin; 20.06.2012

Sebuah opsi dapat menggunakan string koneksi bernama dan mendefinisikannya di machine.config alih-alih web.config.

person Felice Pollano    schedule 13.06.2012
comment
Terima kasih, silakan lihat Edit saya untuk pertanyaan yang menjelaskan mengapa memodifikasi machine.config tidak akan membantu dalam situasi ini. - person Martyn; 14.06.2012

Solusi umum untuk masalah ini adalah dengan memiliki database pengembangan di setiap mesin pengembangan pengguna, sehingga Anda dapat memiliki string koneksi yang sama untuk semua orang, misalnya. untuk SQL Server akan menjadi seperti:

connectionString="data source=.\SQLExpress;..." 

Ketika Anda melakukan ini, Anda ingin setiap pengembang memiliki database terbaru, jadi Anda harus benar-benar melihat proyek database Visual Studio 2010, yang membuatnya sangat mudah (hanya SQL Server).

person Joe    schedule 13.06.2012
comment
Terima kasih, silakan lihat Edit saya yang menjelaskan mengapa ini tidak membantu situasi kami. - person Martyn; 14.06.2012

Teknik yang kami gunakan adalah dengan membakukan nama database, nama server (tanpa nama instance), nama pengguna dan kata sandi pada mesin pengembangan.

Jadi kalau codename produknya Aero yang akan kami gunakan

server=(lokal);database=aero;uid=aero;kata sandi=kata sandi

Untuk lingkungan pengembang, keamanan tidak penting tetapi konsistensi adalah hal yang penting, dan teknik ini menghindari pemeriksaan dan kerusakan app/web.configs orang lain.

person Chris S    schedule 13.06.2012
comment
Terima kasih, silakan lihat Edit saya untuk pertanyaan yang menjelaskan mengapa pendekatan ini tidak berguna dalam situasi kita. - person Martyn; 14.06.2012

Meskipun kami menggunakan transformasi web.config untuk mendefinisikan database yang digunakan (pengembangan lokal, pengujian, rilis), setiap pengembang dapat menggunakan server SQL lokal jika diperlukan. Kami melakukannya dengan menyetel alias server SQL, string koneksi konfigurasi web sama dan pengembang menyetel alias di mesin mereka.

Sebagai contoh kita telah mengatur semua "tester1" di web.config dan kemudian pengembang menetapkan alias ke server SQL lokal mereka, berikut gambarnya:

masukkan deskripsi gambar di sini

person Antonio Bakula    schedule 13.06.2012
comment
Terima kasih, silakan lihat Edit saya yang menjelaskan mengapa ini tidak membantu situasi kami. - person Martyn; 14.06.2012