การตั้งค่า“ Build action” ต่างๆในคุณสมบัติของโครงการ Visual Studio คืออะไรและต้องทำอย่างไร


844

ส่วนใหญ่คุณใช้สิ่งที่ Visual Studio กำหนดให้คุณเป็นค่าเริ่มต้น ... ฉันหมายถึงคุณสมบัติBuildActionสำหรับแต่ละไฟล์ที่เลือกในโซลูชัน Explorer มีตัวเลือกมากมายและมันยากที่จะรู้ว่าแต่ละคนจะทำอะไร

คำตอบ:


1015
  • ไม่มี : ไฟล์ไม่รวมอยู่ในกลุ่มเอาท์พุทโครงการและไม่ได้รวบรวมในกระบวนการสร้าง ตัวอย่างคือไฟล์ข้อความที่มีเอกสารประกอบเช่นไฟล์ Readme

  • คอมไพล์ : ไฟล์ถูกคอมไพล์ลงในเอาต์พุตบิลด์ การตั้งค่านี้ใช้สำหรับไฟล์รหัส

  • เนื้อหา : อนุญาตให้คุณดึงไฟล์ (ในไดเรกทอรีเดียวกับชุดประกอบ) เป็นสตรีมผ่าน Application.GetContentStream (URI) เพื่อให้วิธีการนี้ทำงานได้ต้องมีแอตทริบิวต์ที่กำหนดเองของ AssemblyAssociatedContentFile ซึ่ง Visual Studio จะเพิ่มอย่างสง่างามเมื่อคุณทำเครื่องหมายไฟล์เป็น "เนื้อหา"

  • ทรัพยากรที่ฝังตัว : ฝังไฟล์ในทรัพยากรรายการประกอบพิเศษ

  • ทรัพยากร (WPF เท่านั้น) : ฝังไฟล์ในที่แชร์ (โดยไฟล์ทั้งหมดในแอสเซมบลีที่มีการตั้งค่าที่คล้ายกัน) รายการรายการแอสเซมบลีชื่อ AppName.g.resources

  • หน้า (WPF เท่านั้น) : ใช้ในการรวบรวมไฟล์ลงในxaml จะถูกฝังอยู่แล้วด้วยเทคนิคเดียวกับ(เช่นสามารถใช้ได้เป็น `AppName.g.resources)bamlbamlResource

  • ApplicationDefinition (WPF เท่านั้น) : ทำเครื่องหมายไฟล์ XAML / คลาสที่กำหนดแอปพลิเคชันของคุณ คุณระบุ code-behind ด้วย x: Class = "Namespace.ClassName" และตั้งค่าฟอร์ม / หน้าเริ่มต้นด้วย StartupUri = "Window1.xaml"

  • SplashScreen (WPF เท่านั้น) : รูปภาพที่ทำเครื่องหมายว่าSplashScreen แสดงโดยอัตโนมัติเมื่อโหลดแอปพลิเคชัน WPF แล้วจางหายไป

  • DesignData : รวบรวม XAML viewmodels เพื่อให้ผู้ใช้สามารถแสดงตัวอย่างด้วยข้อมูลตัวอย่างใน Visual Studio (ใช้ชนิดจำลอง)

  • DesignDataWithDesignTimeCreatableTypes : คอมไพล์ XAML viewmodels เพื่อให้ผู้ใช้สามารถแสดงตัวอย่างด้วยข้อมูลตัวอย่างใน Visual Studio (ใช้ชนิดจริง)

  • EntityDeploy : (Entity Framework) : ใช้เพื่อปรับใช้สิ่งประดิษฐ์ Entity Framework

  • CodeAnalysisDictionary : ไฟล์ XML ที่มีพจนานุกรมคำที่กำหนดเองสำหรับกฎการสะกดคำ


9
" DesignData " ใช้สำหรับ "Blendability" ช่วยให้คุณสามารถเพิ่มข้อมูลที่อิงกับมาร์กอัป WPF ซึ่งก็คือเมื่อมีการใช้การตั้งค่าที่ถูกต้องจากนั้นแสดงที่ Design Time
PGallagher

6
นอกจากนี้โปรดทราบว่าเนื้อหาจะถูกรวมไว้เมื่อใช้การปรับใช้ด้วยคลิกเดียว แต่ไม่มีจะไม่ถูกเลือกแม้ว่าจะเลือก "คัดลอกหากใหม่กว่า"
Dax Fohl

4
สิ่งที่เกี่ยวกับปลอม, CodeAnalysisDictionary และ XamlAppRef?
โน่

1
@jxramos ข้อมูลนี้ถูกบันทึกไว้ในไฟล์โครงการ
โทเบียส

18
เกี่ยวกับAdditionalFilesอะไร ฉันเห็นมันใน VS 2015 แต่ไม่พบการอ้างอิงสำหรับสิ่งนั้น
นักพัฒนาแบบองค์รวม

111

จากเอกสาร:

คุณสมบัติ BuildAction ระบุว่า Visual Studio ทำอะไรกับไฟล์เมื่อมีการสร้างบิลด์ BuildAction สามารถมีหนึ่งในหลายค่า:

ไม่มี - ไฟล์ไม่รวมอยู่ในกลุ่มเอาท์พุทโครงการและไม่ได้รวบรวมในกระบวนการสร้าง ตัวอย่างคือไฟล์ข้อความที่มีเอกสารประกอบเช่นไฟล์ Readme

คอมไพล์ - ไฟล์ถูกคอมไพล์ลงในเอาต์พุตบิลด์ การตั้งค่านี้ใช้สำหรับไฟล์รหัส

เนื้อหา - ไฟล์ไม่ได้รวบรวม แต่รวมอยู่ในกลุ่มเอาท์พุทเนื้อหา ตัวอย่างเช่นการตั้งค่านี้เป็นค่าเริ่มต้นสำหรับ. htm หรือไฟล์เว็บชนิดอื่น

ทรัพยากรที่ฝังตัว - ไฟล์นี้จะถูกฝังอยู่ในผลลัพธ์การสร้างโครงการหลักเป็น DLL หรือปฏิบัติการได้ โดยทั่วไปจะใช้สำหรับไฟล์ทรัพยากร


1
! ที่น่าสนใจ ฉันติดตั้ง VS2008 แล้วฉันสงสัยว่าทำไมพวกเขาจึงไม่ปรากฏในเอกสารของฉัน
Paul Batum

ทรัพยากร PRI เป็นอย่างไร
Yawar

1
@PaulBatum คุณสามารถแทรกการอ้างอิงสำหรับคำจำกัดความที่ยกมานี้ได้หรือไม่?
Rajan Prasad

@ Raymond 232: คำจำกัดความที่อ้างถึงคืออะไร?
Peter Mortensen

1
@ PaulBatum: ใช่แน่นอนการอ้างอิงจะดี คำตอบเริ่มต้นด้วย "จากเอกสาร" เพื่อเชื่อมโยงไปยังเอกสารนี้จะได้รับการชื่นชม
Marc

35

หน้า - ใช้ไฟล์ XAML ที่ระบุและคอมไพล์ลงใน BAML และฝังเอาต์พุตนั้นลงในสตรีมทรัพยากรที่มีการจัดการสำหรับชุดประกอบของคุณ (โดยเฉพาะ AssemblyName.g.resources), นอกจากนี้หากคุณมีแอตทริบิวต์ที่เหมาะสมในองค์ประกอบ XAML รูทใน ไฟล์มันจะสร้างไฟล์ blah.g.cs ซึ่งจะมีคลาสบางส่วนของ "codebehind" สำหรับหน้านั้น สิ่งนี้จำเป็นต้องมีการเรียกไปยัง BAML goop เพื่อเติมความชุ่มชื้นให้กับไฟล์ในหน่วยความจำอีกครั้งและตั้งค่าตัวแปรสมาชิกของคลาสของคุณให้เป็นไอเท็มที่สร้างขึ้นตอนนี้ (เช่นถ้าคุณใส่ x: Name = "foo") คุณจะสามารถทำสิ่งนี้ได้ข้อ จำกัด พื้นหลัง = ม่วงหรือที่คล้ายกัน

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

นอกจากนี้เพื่อความชัดเจนคำถามนี้โดยรวมจะติดอยู่ในชุดผลลัพธ์ ทุกคนสามารถกำหนด BuildActions เพิ่มเติมได้เพียงแค่สร้างงาน MSBuild หากคุณดูในไดเรกทอรี% systemroot% \ Microsoft.net \ framework \ v {version} \ และดูที่ไฟล์ Microsoft.Common.targets คุณควรจะถอดรหัสอีกมากมาย (ตัวอย่างเช่น VS Pro ขึ้นไป มีการกระทำ "เงา" ที่อนุญาตให้คุณสร้าง accessors ส่วนตัวเพื่อช่วยในการทดสอบคลาสส่วนตัว


ฉันหวังว่าคุณจะไม่รังเกียจที่จะคัดลอกคำตอบบางส่วนไปเป็นคำตอบของ Gishu เพื่อให้ได้คำตอบอ้างอิงที่สมบูรณ์ยิ่งขึ้น
Ian Boyd

32

VS2010 มีคุณสมบัติสำหรับ 'Build Action' และสำหรับ 'Copy to Output Directory' การกระทำของ 'ไม่มี' จะยังคงคัดลอกไปยังไดเรกทอรีการสร้างหากคุณสมบัติการคัดลอกถูกตั้งค่าเป็น 'คัดลอกถ้าใหม่กว่า' หรือ 'คัดลอกเสมอ'

ดังนั้นควรสร้าง Build Action ของ 'เนื้อหา' เพื่อระบุเนื้อหาที่คุณจะเข้าถึงผ่าน 'Application.GetContentStream'

ฉันใช้การตั้งค่า 'Build Action' ของ 'None' และ 'Copy to Output Direcotry' การตั้งค่าของ 'Copy if Newer' สำหรับการเชื่อมโยงภายนอก. config

กรัม


ขอบคุณสำหรับสิ่งนี้. อย่างไรก็ตามฉันสับสนเล็กน้อยว่าเป็นอย่างไร / ที่ฉันทำสิ่งนี้ โดยหลักการแล้วฉันต้องการเพียงแค่ "รวม" โฟลเดอร์ "อัปโหลดของฉัน" และไฟล์ย่อยทั้งหมดจะรวมอยู่ในการเผยแพร่
SamJolly

สิ่งนี้ใช้กับคุณสมบัติของแต่ละรายการใน Object explorer ซึ่งคุณจะเห็นในแท็บคุณสมบัติเมื่อคุณเลือกรายการหรือคลิกขวาและเลือกคุณสมบัติ สำหรับสิ่งที่คุณต้องการฉันคิดว่าคุณเพียงแค่ต้องเพิ่มรายการที่มีอยู่เมื่อคุณคลิกขวาที่โครงการ BTW ปุ่มบันทึกของกล่องโต้ตอบเพิ่มรายการที่มีอยู่มีรายการแบบหล่นลงที่ช่วยให้คุณเพิ่มเป็นลิงค์ คุณยังอาจต้องเพิ่มรายการภายในโฟลเดอร์
เจอราร์ด

5

ใน VS2008 รายการเอกสารที่ดูเหมือนว่ามีประโยชน์มากที่สุดคือ:

Windows Presentation Foundation การสร้างแอปพลิเคชัน WPF (WPF)

MS-ความช่วยเหลือ: //MS.VSCC.v90/MS.MSDNQTR.v90.en/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm

ApplicationDefinition ระบุไฟล์มาร์กอัป XAML ที่มีข้อกำหนดของแอปพลิเคชัน (ไฟล์มาร์กอัป XAML ที่มีองค์ประกอบรากคือแอปพลิเคชัน) ApplicationDefinition เป็นสิ่งจำเป็นเมื่อการติดตั้งเป็นจริงและ OutputType คือ winexe แอปพลิเคชัน WPF และดังนั้นโครงการ MSBuild สามารถมี ApplicationDefinition เดียวเท่านั้น

หน้าระบุไฟล์มาร์กอัป XAML ที่เนื้อหาถูกแปลงเป็นรูปแบบไบนารีและเรียบเรียงเป็นชุดประกอบ โดยทั่วไปรายการเพจจะถูกนำไปใช้ร่วมกับคลาสที่ใช้โค้ด

รายการเพจที่พบบ่อยที่สุดคือไฟล์ XAML ที่มีองค์ประกอบระดับบนสุดดังต่อไปนี้:

Window (System.Windows..::.Window).

Page (System.Windows.Controls..::.Page).

PageFunction (System.Windows.Navigation..::.PageFunction<(Of <(T>)>)).

ResourceDictionary (System.Windows..::.ResourceDictionary).

FlowDocument (System.Windows.Documents..::.FlowDocument).

UserControl (System.Windows.Controls..::.UserControl).

ทรัพยากรระบุไฟล์ทรัพยากรที่รวบรวมไว้ในชุดแอปพลิเคชัน ตามที่กล่าวไว้ก่อนหน้านี้ UICulture ประมวลผลรายการทรัพยากร

เนื้อหาระบุไฟล์เนื้อหาที่แจกจ่ายด้วยแอปพลิเคชัน ข้อมูลเมตาที่อธิบายไฟล์เนื้อหาถูกคอมไพล์ลงในแอปพลิเคชัน (โดยใช้ AssemblyAssociatedContentFileAttribute)


4

วิธีการเกี่ยวกับหน้านี้จาก Microsoft Connect (อธิบายประเภท DesignData และ DesignDataWithDesignTimeCreatableTypes) พิเศษ:

ข้อมูลต่อไปนี้อธิบายถึง Build Buildions สองไฟล์สำหรับ Sample Data

ข้อมูลตัวอย่างไฟล์. xaml จะต้องกำหนดหนึ่งใน Build Actions ด้านล่าง:

DesignData :ประเภทข้อมูลตัวอย่างจะถูกสร้างขึ้นเป็นประเภทมารยาท ใช้ Build Action นี้เมื่อชนิดข้อมูลตัวอย่างไม่สามารถสร้างได้หรือมีคุณสมบัติแบบอ่านอย่างเดียวที่คุณต้องการกำหนดค่าข้อมูลตัวอย่างสำหรับ

DesignDataWithDesignTimeCreatableTypes :ประเภทข้อมูลตัวอย่างจะถูกสร้างขึ้นโดยใช้ประเภทที่กำหนดไว้ในไฟล์ข้อมูลตัวอย่าง ใช้ Build Action นี้เมื่อชนิดข้อมูลตัวอย่างสามารถสร้างได้โดยใช้ Constructor เปล่าที่เป็นค่าเริ่มต้น

ไม่ได้เพื่อให้ครบถ้วนสมบูรณ์อย่างไม่น่าเชื่อ แต่ก็อย่างน้อยจะช่วยให้คำแนะนำ คำแนะนำแบบ MSDNนี้ยังให้แนวคิดบางอย่าง ฉันไม่ทราบว่าคำสั่งสร้างเหล่านี้ใช้ได้กับโครงการที่ไม่ใช่ Silverlight หรือไม่


4
  • Fakes:ส่วนหนึ่งของกรอบงาน Microsoft Fakes (แยกการทดสอบหน่วย) ไม่สามารถใช้ได้กับ Visual Studio ทุกรุ่น Fakes ใช้เพื่อสนับสนุนการทดสอบหน่วยในโครงการของคุณช่วยให้คุณแยกรหัสที่คุณกำลังทดสอบโดยแทนที่ส่วนอื่น ๆ ของแอปพลิเคชันด้วย stubs หรือ shims เพิ่มเติมได้ที่นี่: https://msdn.microsoft.com/en-us/library/hh549175.aspx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.