Apa saja berbagai pengaturan "Build action" di properti proyek Visual Studio dan apa yang mereka lakukan?

844

Untuk sebagian besar, Anda hanya mengambil apa pun yang ditetapkan Visual Studio untuk Anda sebagai default ... Saya mengacu pada properti BuildAction untuk setiap file yang dipilih di Solution Explorer. Ada sejumlah opsi dan sulit untuk mengetahui apa yang akan dilakukan oleh masing-masing dari mereka.

Gishu
sumber

Jawaban:

1015
  • Tidak ada : File ini tidak termasuk dalam grup output proyek dan tidak dikompilasi dalam proses build. Contohnya adalah file teks yang berisi dokumentasi, seperti file Readme.

  • Kompilasi : File dikompilasi ke dalam output build. Pengaturan ini digunakan untuk file kode.

  • Konten : Memungkinkan Anda untuk mengambil file (dalam direktori yang sama dengan majelis) sebagai aliran melalui Application.GetContentStream (URI). Agar metode ini berfungsi, diperlukan atribut khusus AssemblyAssociatedContentFile yang ditambahkan oleh Visual Studio ketika Anda menandai file sebagai "Konten"

  • Sumber daya tertanam : Menyematkan file dalam sumber daya manifes perakitan eksklusif.

  • Sumberdaya (hanya WPF) : Menyematkan file dalam shared (oleh semua file dalam perakitan dengan pengaturan serupa) sumber daya manifest perakitan bernama AppName.g.resources.

  • Halaman (hanya WPF) : Digunakan untuk mengompilasi xamlfile baml. The bamlkemudian tertanam dengan teknik yang sama seperti Resource(yaitu tersedia sebagai `AppName.g.resources)

  • ApplicationDefinition (WPF saja) : Tandai file XAML / kelas yang mendefinisikan aplikasi Anda. Anda menentukan kode di belakang dengan x: Class = "Namespace.ClassName" dan mengatur form / halaman startup dengan StartupUri = "Window1.xaml"

  • SplashScreen (hanya WPF) : Gambar yang ditandai seperti SplashScreen ditunjukkan secara otomatis saat aplikasi WPF dimuat, dan kemudian memudar

  • DesignData : Mengkompilasi model view XAML sehingga kontrol pengguna dapat dipratinjau dengan data sampel di Visual Studio (menggunakan tipe tiruan)

  • DesignDataWithDesignTimeCreatableTypes : Mengkompilasi model view XAML sehingga kontrol pengguna dapat dipratinjau dengan data sampel di Visual Studio (menggunakan tipe aktual)

  • EntityDeploy : (Entity Framework) : digunakan untuk menyebarkan artefak Entity Framework

  • CodeAnalysisDictionary : File XML yang berisi kamus kata khusus untuk aturan ejaan

Gishu
sumber
9
" DesignData " digunakan untuk "Blendability", memungkinkan Anda untuk menambahkan data mark-up WPF, yaitu, ketika pengaturan yang benar diterapkan, kemudian ditampilkan pada Waktu Desain.
PGallagher
6
Juga perhatikan bahwa Konten akan disertakan saat menggunakan penyebaran satu-klik, tetapi Tidak ada yang bahkan tidak akan "menyalin jika lebih baru" dipilih.
Dax Fohl
4
Bagaimana dengan Fakes, CodeAnalysisDictionary dan XamlAppRef?
Crono
1
@ jxramos Informasi ini disimpan dalam file proyek.
Tobias
18
Bagaimana dengan AdditionalFiles? Saya melihatnya di VS 2015 tetapi tidak dapat menemukan referensi untuk itu.
Pengembang Holistik
111

Dari dokumentasi:

Properti BuildAction menunjukkan apa yang Visual Studio lakukan dengan file saat membangun dijalankan. BuildAction dapat memiliki salah satu dari beberapa nilai:

Tidak ada - File tidak termasuk dalam grup output proyek dan tidak dikompilasi dalam proses pembuatan. Contohnya adalah file teks yang berisi dokumentasi, seperti file Readme.

Kompilasi - File dikompilasi ke dalam output build. Pengaturan ini digunakan untuk file kode.

Konten - File ini tidak dikompilasi, tetapi termasuk dalam grup output konten. Misalnya, pengaturan ini adalah nilai default untuk .htm atau jenis file Web lainnya.

Sumberdaya Tertanam - File ini tertanam dalam output build proyek utama sebagai DLL atau yang dapat dieksekusi. Ini biasanya digunakan untuk file sumber daya.

Paul Batum
sumber
1
Menarik! Saya sudah menginstal VS2008, saya bertanya-tanya mengapa mereka tidak muncul dalam dokumentasi saya?
Paul Batum
Bagaimana dengan sumber daya PRI?
Yawar
1
@ PaulBatum dapatkah Anda memasukkan referensi untuk definisi yang dikutip ini?
Rajan Prasad
@Raymond 232: Definisi apa yang dikutip?
Peter Mortensen
1
@ PaulBatum: Ya memang referensi akan menyenangkan. Jawabannya dimulai dengan "Dari dokumentasi" sehingga tautan ke dokumentasi ini akan dihargai.
Marc
35

Halaman - Mengambil file XAML yang ditentukan, dan mengkompilasi ke dalam BAML, dan menyematkan output itu ke aliran sumber daya yang dikelola untuk perakitan Anda (khususnya AssemblyName.g.resources), Selain itu, jika Anda memiliki atribut yang sesuai pada elemen XAML root di file, itu akan membuat file blah.g.cs, yang akan berisi sebagian kelas "codebehind" untuk halaman itu; ini pada dasarnya melibatkan panggilan ke BAML goop untuk kembali menghidrasi file ke dalam memori, dan untuk mengatur variabel anggota kelas Anda ke item yang dibuat sekarang (misalnya jika Anda meletakkan x: Name = "foo" pada item , Anda dapat melakukan ini.foo.Latar Belakang = Ungu; atau serupa.

ApplicationDefinition - mirip dengan Page, kecuali ia berjalan lebih jauh, dan menentukan titik masuk untuk aplikasi Anda yang akan membuat instance objek aplikasi Anda, memanggil run di atasnya, yang kemudian akan instantiate jenis yang ditetapkan oleh properti StartupUri, dan akan memberikan jendela utama Anda .

Juga, untuk menjadi jelas, pertanyaan ini secara keseluruhan dimasukkan dalam hasil yang ditetapkan; siapa pun dapat mendefinisikan BuildActions tambahan hanya dengan membangun Tugas MSBuild. Jika Anda melihat di direktori% systemroot% \ Microsoft.net \ framework \ v {version} \, dan melihat file Microsoft.Common.targets, Anda harus dapat menguraikan lebih banyak lagi (misalnya, dengan VS Pro ke atas, ada tindakan "Bayangan" yang memungkinkan Anda menghasilkan pengakses pribadi untuk membantu pengujian unit kelas privat.

Dominic Hopton
sumber
saya harap Anda tidak keberatan bahwa saya menyalin sebagian jawaban Anda ke dalam jawaban Gishu, untuk mendapatkan jawaban referensi yang lebih lengkap.
Ian Boyd
32

VS2010 memiliki properti untuk 'Bangun Tindakan', dan juga untuk 'Salin ke Direktori Keluaran'. Jadi tindakan 'Tidak Ada' masih akan menyalin ke direktori build jika properti salin diatur ke 'Salin jika Baru' atau 'Salin Selalu'.

Jadi Tindakan Build 'Konten' harus disediakan untuk menunjukkan konten yang akan Anda akses melalui 'Application.GetContentStream'

Saya menggunakan pengaturan 'Build Action' pada 'None' dan pengaturan 'Copy to Output Direcotry' pada 'Copy if Newer' untuk beberapa .config yang terhubung secara eksternal.

G.

Gerard ONeill
sumber
Terima kasih untuk ini. Namun saya sedikit bingung bagaimana / di mana saya melakukan ini. Idealnya saya hanya ingin "memasukkan" folder "Unggah" saya, dan semua file anak akan dimasukkan ke dalam publikasi.
SamJolly
Ini berlaku untuk properti item individual di objek explorer, yang akan Anda lihat di tab properti ketika Anda memilih item atau klik kanan dan pilih properti. Untuk apa yang Anda inginkan, saya pikir Anda hanya perlu menambahkan item yang ada ketika Anda mengklik kanan proyek. BTW, tombol simpan dialog add item yang sudah ada memiliki drop down yang memungkinkan Anda untuk menambahkannya sebagai tautan. Anda mungkin masih harus menambahkan item di dalam folder.
Gerard ONeill
5

Dalam VS2008, entri dokumen yang tampaknya paling berguna adalah:

Windows Presentation Foundation Membangun Aplikasi WPF (WPF)

ms-help: //MS.VSCC.v90/MS.MSDNQTR.v90.en/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm

ApplicationDefinition Mengidentifikasi file markup XAML yang berisi definisi aplikasi (file markup XAML yang elemen dasarnya adalah Aplikasi). ApplicationDefinition wajib ketika Install benar dan OutputType adalah winexe. Aplikasi WPF dan, akibatnya, proyek MSBuild hanya dapat memiliki satu ApplicationDefinition.

Halaman Mengidentifikasi file markup XAML yang kontennya dikonversi ke format biner dan dikompilasi menjadi sebuah majelis. Item halaman biasanya diterapkan bersamaan dengan kelas kode-belakang.

Item Halaman yang paling umum adalah file XAML yang elemen level atasnya adalah salah satu dari yang berikut:

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).

Sumber Daya Mengidentifikasi file sumber daya yang dikompilasi ke dalam rakitan aplikasi. Seperti yang disebutkan sebelumnya, UICulture memproses item Sumber Daya.

Konten Mengidentifikasi file konten yang didistribusikan dengan aplikasi. Metadata yang menjelaskan file konten dikompilasi ke dalam aplikasi (menggunakan AssemblyAssociatedContentFileAttribute).

James Moore
sumber
4

Bagaimana dengan halaman ini dari Microsoft Connect (menjelaskan DesignData dan DesignDataWithDesignTimeCreatableTypes) jenis. Mengutip:

Berikut ini menjelaskan dua Tindakan Membangun untuk file Data Sampel.

Sampel data .xaml file harus ditetapkan salah satu dari Tindakan Bangun di bawah ini:

DesignData : Contoh tipe data akan dibuat sebagai tipe palsu. Gunakan Tindakan Bangun ini ketika tipe data sampel tidak dapat dibuat atau memiliki sifat hanya baca yang Anda inginkan untuk menentukan nilai data sampel.

DesignDataWithDesignTimeCreatableTypes : Tipe data sampel akan dibuat menggunakan tipe yang ditentukan dalam file data sampel. Gunakan Tindakan Bangun ini ketika tipe data sampel dapat dibuat menggunakan konstruktor kosong default mereka.

Tidak terlalu lengkap, tetapi setidaknya memberi petunjuk. Panduan MSDN ini juga memberikan beberapa ide. Saya tidak tahu apakah Build Action ini berlaku untuk proyek non-Silverlight juga.

Per Lundberg
sumber
4
  • Fakes: Bagian dari Kerangka Microsoft Fakes (Unit Test Isolation). Tidak tersedia di semua versi Visual Studio. Palsu digunakan untuk mendukung pengujian unit dalam proyek Anda, membantu Anda mengisolasi kode yang Anda uji dengan mengganti bagian lain dari aplikasi dengan stub atau shims. Lebih lanjut di sini: https://msdn.microsoft.com/en-us/library/hh549175.aspx
Jorge Garcia
sumber