ไฟล์ Web.Debug.config และ Web.Release.Config คืออะไร


111

ฉันเพิ่งอัปเกรดเป็น Visual Studio 2010 และ MVC 2.0 และฉันสังเกตเห็นว่า Web.config มีไฟล์เพิ่มเติมสองไฟล์แนบมาด้วย? ไฟล์เหล่านี้ใช้เพื่อระบุการดีบักและปล่อยการตั้งค่าเฉพาะดังนั้นคุณจึงไม่เกะกะ Web.config หลักหรือไม่?

มันสมเหตุสมผลหรือไม่ที่จะวางสตริงการเชื่อมต่อในไฟล์ Web.config รูทถ้าฉันมีโลคัลและรีโมตในการดีบักและปล่อย Web.configs ตามลำดับ

ขอบคุณ!

คำตอบ:


97

มันเป็นคุณลักษณะการเปลี่ยนแปลง Web.config ใหม่ของ Visual Studio 2010 ข้อมูลเพิ่มเติมที่นี่


แก้ไข:

ไฟล์เหล่านี้ใช้เพื่อระบุการดีบักและปล่อยการตั้งค่าเฉพาะดังนั้นคุณจึงไม่เกะกะ web.config หลักหรือไม่?

ไม่ จำกัด เพียงสามไฟล์คุณสามารถ (ตามทฤษฎี) มีไฟล์ได้มากเท่าที่คุณมีสภาพแวดล้อม Web.config "ระดับบนสุด" มีเทมเพลตของการกำหนดค่าเว็บของคุณ ไฟล์ที่อยู่ข้างใต้จะให้ค่าทดแทนเฉพาะสำหรับสภาพแวดล้อมนั้น ๆ (เช่นหากคุณมีสตริงการเชื่อมต่อที่แตกต่างกันสำหรับโลคัล / สเตจ / ทดสอบ / อะไรก็ตาม)

มันสมเหตุสมผลหรือไม่ที่จะวางสตริงการเชื่อมต่อในไฟล์ root web.config ถ้าฉันมีโลคัลและรีโมตในการดีบักและรีลีส web.configs ตามลำดับ

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


12
คุณสมบัตินี้ถูกอบครึ่งหนึ่งแม้ 4 ปีต่อมา! ใช้ได้เฉพาะเมื่อปรับใช้กับแพ็คเกจสีฟ้า / การเผยแพร่ นี่คือหัวข้อที่น่าสนใจ: forums.asp.net/t/1532038.aspx
Nick

12

นี่คือไฟล์การแปลง Web.config จากการปรับใช้เว็บ ASP.NET โดยใช้ Visual Studio: Web.config File Transformations :

มีสองวิธีในการทำให้กระบวนการเปลี่ยนแปลงการตั้งค่าไฟล์ Web.config เป็นไปโดยอัตโนมัติ: การแปลง Web.config และพารามิเตอร์ Web Deploy ไฟล์การแปลง Web.config มีมาร์กอัป XML ที่ระบุวิธีการเปลี่ยนไฟล์ Web.config เมื่อถูกปรับใช้ คุณสามารถระบุการเปลี่ยนแปลงที่แตกต่างกันสำหรับการกำหนดค่าบิลด์เฉพาะและสำหรับโปรไฟล์การเผยแพร่เฉพาะ การกำหนดค่าการสร้างเริ่มต้นคือ Debug และ Release และคุณสามารถสร้างการกำหนดค่าการสร้างแบบกำหนดเองได้ โดยทั่วไปแล้วโปรไฟล์การเผยแพร่จะสอดคล้องกับสภาพแวดล้อมปลายทาง


1

ในกรณีที่ทุกคนสนใจนี่คือสิ่งที่ฉันเขียนขึ้นเพื่อให้มีสตริงการเชื่อมต่อแบบไดนามิกต่อสภาพแวดล้อม ฉันต้องการปรับใช้โค้ดกับทุกสภาพแวดล้อม (Dev, Test, Pre-Prod, Prod ... ) โดยไม่ต้องกังวลกับการเปลี่ยนสตริงการเชื่อมต่อ ฉันไม่สามารถหาวิธีที่ดีในการทำเช่นนี้กับ Asp.Net MVC 4 ได้ดังนั้นฉันจึงคิดวิธีของตัวเองที่จะพึ่งพาไฟล์คุณสมบัติต่อสภาพแวดล้อม

อาจมีทางออกที่ดีกว่าฉันมาจากพื้นหลัง Wicket / Java และเพิ่งเริ่มพัฒนาด้วย MVC 4 ดังนั้นจึงเป็นไปได้ว่าจะมีทางออกที่ดีกว่า แต่นี่คือลิงก์ไปยังคำถามและคำตอบของฉันสำหรับสตริงการเชื่อมต่อแบบไดนามิก:

สตริงการเชื่อมต่อแบบไดนามิก Asp.net MVC 4


-3

นั่นคือสิ่งที่จำเป็นมานานใน VS. น่าเสียดายที่ดูเหมือนว่าจะมีปัญหากับการใช้งาน ตัวอย่างเช่นพิจารณาสถานการณ์นี้ (VS.2010 Ultimate, SP ทั้งหมด):

Web.Config

  • ไม่มีส่วน connectionStrings
  • ผู้ใช้สมาชิกเต็ม / บทบาท / ฯลฯ การกำหนดค่าผู้ให้บริการโดยใช้ connectionStringName = "test"

Web.Release.Config

  • ไม่มีการกำหนดค่าสมาชิก (ระบุไว้แล้วใน web.config หลัก)
  • ส่วน connectionStrings รวมถึง CS ที่ชื่อ "test"

Web.Debug.Config

  • ไม่มีการกำหนดค่าสมาชิก (ระบุไว้แล้วใน web.config หลัก)
  • ส่วน connectionStrings รวมถึง CS ที่ชื่อ "test"

เมื่อดำเนินการแอปพลิเคชันจะมีข้อผิดพลาดต่อไปนี้:

ไม่พบชื่อการเชื่อมต่อ 'test' ในการกำหนดค่าแอปพลิเคชันหรือสตริงการเชื่อมต่อว่างเปล่า

กล่าวอีกนัยหนึ่งเนื่องจากองค์ประกอบสตริงการเชื่อมต่ออยู่ในไฟล์ตัวออกแบบ Release / Debug และใช้โดยองค์ประกอบการกำหนดค่าในไฟล์หลัก (Web.config) จึงไม่สามารถแก้ไขได้


5
เพื่อความเป็นธรรมหากคุณมีสายอักขระการเชื่อมต่อที่ตั้งชื่อtestทั้งในไฟล์ debug และ release config ของคุณควรอยู่ใน web.config หลักพร้อมกับเทมเพลตที่เหมาะสม คุณกำลังทำโค้ดซ้ำซึ่งเป็นสิ่งที่เทมเพลตควรจะแก้ปัญหาให้คุณ
R0MANARMY

3
-1: โพสต์เก่ามากนี้เป็นการตีความวิธีใช้การแปลงการกำหนดค่าเว็บผิดโดยสิ้นเชิง 1ไม่ใช่คำตอบที่แท้จริง (เป็นเพียงการร้องเรียนที่ไม่ถูกต้อง) และ2ไม่ใช่การรวมองค์ประกอบง่ายๆตามที่กล่าวโดยนัยที่นี่ คุณต้องมีxsltคำสั่งแทนที่อย่างชัดเจน ทำได้ดีมากในการรับ 5 upvotes สำหรับบางสิ่งที่เพิ่มความสับสนเกี่ยวกับไฟล์การแปลงเหล่านี้ :)
Gone Coding
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.