วิธีปรับแต่งไฟล์ .net .config แบบไดนามิก

ฉันเป็นส่วนหนึ่งของทีมพัฒนาเล็กๆ และขณะนี้เรากำลังย้ายจากโมเดลที่เราแชร์ฐานข้อมูลการพัฒนาเดียวกัน ไปสู่โมเดลที่เราทุกคนมีฐานข้อมูลการพัฒนาส่วนบุคคลของเราเอง

ด้วยเหตุนี้ เราจึงพยายามหาวิธีจัดการไฟล์ .config ของเว็บและแอปเพื่อรองรับฐานข้อมูลแต่ละฐานข้อมูล เห็นได้ชัดว่าเราต้องการหลีกเลี่ยงสถานการณ์ที่ทุกคนจะต้องเปลี่ยนสตริงการเชื่อมต่อด้วยตนเองเพื่อให้ชี้ไปยังฐานข้อมูลของตนเอง จากนั้นอย่าลืมเปลี่ยนกลับก่อนที่จะเช็คอินอีกครั้ง!

ฉันแน่ใจว่านี่เป็นปัญหาทั่วไปที่ทีมพัฒนาเกือบทั้งหมดต้องเผชิญ อย่างไรก็ตาม ฉันไม่สามารถหาวิธีแก้ไขปัญหานี้ได้

ฉันคุ้นเคยกับการแปลง web.config โดยใช้ไวยากรณ์ xdt และแม้ว่าสิ่งนี้จะช่วยในการแก้ไขไฟล์ แต่ก็ไม่ได้ให้วิธีการฉีดค่าพารามิเตอร์ภายนอก (เท่าที่ฉันรู้) ตัวอย่างเช่น เราจำเป็นต้องมีการเปลี่ยนแปลงเพื่อตรวจจับผู้ใช้ปัจจุบัน และแทนที่ชื่อฐานข้อมูลใน .config ด้วยชื่อที่มีชื่อผู้ใช้ของพวกเขา

แล้วคุณจะแก้ไขปัญหานี้ในทีมพัฒนาของคุณได้อย่างไร?

ขอบคุณ.

แก้ไข:

ขออภัย ฉันพลาดข้อมูลที่สำคัญซึ่งทำให้ไม่สามารถยอมรับคำตอบเหล่านี้ได้ ในฐานะบริษัท เราทุกคนทำงานจากระยะไกลและเดสก์ท็อประยะไกลในสภาพแวดล้อมการพัฒนาของเรา เรามีเครื่องพัฒนา (อันทรงพลัง) หนึ่งเครื่องที่นักพัฒนาทุกคนใช้และใช้งานพร้อมกัน ดังนั้น การใช้นามแฝงหรือการแก้ไขไฟล์โฮสต์ ฯลฯ จะมีผลกับผู้ใช้ทุกคนอย่างเท่าเทียมกัน และไม่ได้จัดเตรียมการปรับแต่งเฉพาะที่จำเป็น อินสแตนซ์ SQL เป็นอินสแตนซ์ในเครื่องอยู่แล้ว โดยเป็นเพียงอินสแตนซ์ในเครื่องที่นักพัฒนาทุกคนใช้


person Martyn    schedule 13.06.2012    source แหล่งที่มา


คำตอบ (5)


ฉันสามารถแนะนำสองวิธีในการทำเช่นนี้

  1. ใช้นามแฝงเดียวกันสำหรับชื่อเซิร์ฟเวอร์ฐานข้อมูลของคุณเพื่อให้สตริงการเชื่อมต่อเหมือนกัน คุณสามารถทำได้โดยใส่บรรทัดต่อไปนี้ลงในไฟล์โฮสต์ของคุณ:

    127.0.0.1 ดีบีเซิร์ฟเวอร์

  2. ใส่สตริงการเชื่อมต่อของคุณลงในไฟล์ภายนอก และอย่าเพิ่มลงในตัวควบคุมแหล่งที่มา สำหรับการกำหนดค่าชั่วคราวและรีลีส คุณสามารถเพิ่มสตริงการเชื่อมต่อที่จำเป็นผ่านการแปลงการกำหนดค่าเว็บได้

ในกรณีที่สอง web.config ของคุณจะมีลักษณะดังนี้:

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

แก้ไข: โดยที่ไฟล์ connectionStrings.config ถูกวางไว้ในโฟลเดอร์เดียวกัน แต่ถูกเพิ่มไปยังรายการละเว้นภายใต้การควบคุมแหล่งที่มาเพื่อให้นักพัฒนาแต่ละคนจะมีสำเนาของไฟล์นี้ของตัวเองและการเปลี่ยนแปลงของเขาจะไม่ส่งผลกระทบต่อนักพัฒนารายอื่น เพื่อให้สิ่งต่าง ๆ ง่ายขึ้น คุณสามารถสร้างไฟล์ connectionStrings.config.default ที่สามารถใช้เป็นเทมเพลตได้ เพื่อว่าเมื่อนักพัฒนารายใหม่เข้าร่วมโปรเจ็กต์ เขาจะสร้างสำเนา connectionStrings.config ของตัวเองโดยอิงตามไฟล์นี้ด้วยค่าเริ่มต้น

person Sergey Rybalkin    schedule 13.06.2012
comment
ขอขอบคุณ โปรดดูการแก้ไขของฉันซึ่งจะอธิบายว่าทำไมสิ่งนี้จึงไม่ช่วยสถานการณ์ของเรา - person Martyn; 14.06.2012
comment
โอเค เข้าใจแล้ว แต่ทำไมคุณไม่ชอบแนวทางที่สอง? เท่าที่ฉันเข้าใจแม้ว่าการทำงานกับนักพัฒนาคอมพิวเตอร์เครื่องเดียวกันก็มีสำเนาซอร์สโค้ดของตัวเองใช่ไหม - person Sergey Rybalkin; 14.06.2012
comment
ใช่ แต่เป็นปัญหาเดียวกัน นักพัฒนาแต่ละคนจะต้องปรับแต่งซอร์สโค้ดให้ชี้ไปยังไฟล์การเชื่อมต่อของตนเอง โซลูชันดังกล่าวจะย้ายปัญหาจากไฟล์ web.config ไปยังไฟล์ใหม่อื่นได้อย่างมีประสิทธิภาพ -- บางทีฉันอาจไม่เข้าใจสิ่งนี้ คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับวิธีการตั้งค่าไฟล์ภายนอกเหล่านี้ และวิธีที่คุณจะได้แหล่งที่มาเพื่อเข้าถึงไฟล์เหล่านั้น ขอบคุณ! - person Martyn; 20.06.2012
comment
ฉันได้เพิ่มคำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับแนวทางของฉัน โดยพื้นฐานแล้วคุณพูดถูก - ปัญหาถูกย้ายไปยังไฟล์อื่นและแก้ไขได้เพียงบางส่วนเท่านั้น อย่างไรก็ตาม นักพัฒนาซอฟต์แวร์ทุกคนจะต้องสร้างมันขึ้นมาด้วยตนเองเพียงครั้งเดียวเท่านั้น และไม่จำเป็นต้องเปลี่ยนกลับก่อนที่จะกลับมาเช็คอินอีกครั้ง - person Sergey Rybalkin; 20.06.2012

ตัวเลือกอาจใช้สตริงการเชื่อมต่อที่มีชื่อและมีการกำหนดไว้ใน machine.config แทนที่จะเป็น web.config

person Felice Pollano    schedule 13.06.2012
comment
ขอขอบคุณ โปรดดูการแก้ไขคำถามของฉันที่อธิบายว่าทำไมการแก้ไข machine.config จึงไม่ช่วยในสถานการณ์นี้ - person Martyn; 14.06.2012

วิธีแก้ไขปัญหาทั่วไปสำหรับปัญหานี้คือการมีฐานข้อมูลการพัฒนาในเครื่องพัฒนาผู้ใช้แต่ละเครื่อง เพื่อให้คุณสามารถมีสตริงการเชื่อมต่อเดียวกันสำหรับทุกคน เช่น สำหรับ SQL Server จะเป็นดังนี้:

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

เมื่อคุณทำเช่นนี้ คุณต้องการให้นักพัฒนาแต่ละคนมีฐานข้อมูลล่าสุด ดังนั้นคุณควรดูโครงการฐานข้อมูล Visual Studio 2010 จริงๆ ซึ่งทำให้ง่ายมาก (แต่เฉพาะ SQL Server เท่านั้น)

person Joe    schedule 13.06.2012
comment
ขอขอบคุณ โปรดดูการแก้ไขของฉันซึ่งจะอธิบายว่าทำไมสิ่งนี้จึงไม่ช่วยสถานการณ์ของเรา - person Martyn; 14.06.2012

เทคนิคที่เราใช้คือสร้างมาตรฐานให้กับชื่อฐานข้อมูล ชื่อเซิร์ฟเวอร์ (ไม่มีอินสแตนซ์ที่มีชื่อ) ชื่อผู้ใช้ และรหัสผ่านบนเครื่องพัฒนา

ดังนั้นหากชื่อรหัสผลิตภัณฑ์คือ Aero เราจะใช้

เซิร์ฟเวอร์=(ท้องถิ่น);ฐานข้อมูล=อากาศ;uid=อากาศ;รหัสผ่าน=รหัสผ่าน

สำหรับสภาพแวดล้อม dev การรักษาความปลอดภัยไม่สำคัญ แต่ความสม่ำเสมอเป็นสิ่งสำคัญ และเทคนิคนี้จะช่วยหลีกเลี่ยงการตรวจสอบและทำลายแอป/web.configs ของผู้อื่น

person Chris S    schedule 13.06.2012
comment
ขอบคุณ โปรดดูการแก้ไขคำถามของฉันซึ่งอธิบายว่าทำไมแนวทางนี้ไม่มีประโยชน์ในสถานการณ์ของเรา - person Martyn; 14.06.2012

แม้ว่าเราจะใช้การแปลง web.config เพื่อกำหนดฐานข้อมูลที่ใช้ (การพัฒนาภายใน การทดสอบ การเผยแพร่) นักพัฒนาทุกคนสามารถใช้เซิร์ฟเวอร์ SQL ภายในเครื่องได้หากจำเป็น เรากำลังดำเนินการดังกล่าวโดยการตั้งค่านามแฝงของเซิร์ฟเวอร์ SQL สตริงการเชื่อมต่อการกำหนดค่าเว็บจะเหมือนกัน และนักพัฒนาจะตั้งค่านามแฝงบนเครื่องของพวกเขา

ตัวอย่างเช่น เราได้ตั้งค่า "tester1" ไว้ใน web.config แล้ว จากนั้นนักพัฒนาก็ตั้งค่านามแฝงให้กับเซิร์ฟเวอร์ SQL ในเครื่องของตน นี่คือรูปภาพ:

ป้อนคำอธิบายรูปภาพที่นี่

person Antonio Bakula    schedule 13.06.2012
comment
ขอขอบคุณ โปรดดูการแก้ไขของฉันซึ่งจะอธิบายว่าทำไมสิ่งนี้จึงไม่ช่วยสถานการณ์ของเรา - person Martyn; 14.06.2012