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


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


749
2017-09-28 12:15


asal


Jawaban:


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

  • Menyusun: File dikompilasi menjadi output build. Pengaturan ini digunakan untuk file kode.

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

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

  • Sumber  (Hanya WPF): Menyematkan file dalam file bersama (oleh semua file di assembly dengan pengaturan serupa) perakitan manifes bernama AppName.g.resources.

  • Halaman  (Hanya WPF): Digunakan untuk mengkompilasi a xaml file ke dalam baml. Itu baml kemudian disematkan dengan teknik yang sama dengan Resource (mis. tersedia sebagai `AppName.g.resources)

  • ApplicationDefinition  (Hanya WPF): Tandai file XAML / kelas yang mendefinisikan aplikasi Anda. Anda menetapkan kode-belakang dengan x: Class = "Namespace.ClassName" dan setel bentuk awal / halaman dengan StartupUri = "Window1.xaml"

  • SplashScreen  (Hanya WPF): Gambar yang ditandai sebagai SplashScreen  ditampilkan secara otomatis ketika aplikasi WPF memuat, dan kemudian memudar

  • DesignData: Mengkompilasi viewmodels XAML sehingga usercontrols dapat dipratinjau dengan data sampel dalam Visual Studio (menggunakan jenis tiruan)

  • DesignDataWithDesignTimeCreatableTypes: Mengkompilasi viewmodels XAML sehingga usercontrols dapat dipratinjau dengan data sampel dalam Visual Studio (menggunakan tipe sebenarnya)

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

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


882
2017-09-28 12:29



Dari dokumentasi:

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

Tidak ada - File tidak termasuk dalam   kelompok keluaran proyek dan tidak   dikompilasi dalam proses pembangunan. Sebuah   Contohnya adalah file teks yang berisi   dokumentasi, seperti file Readme.

Kompilasi - File dikompilasi menjadi   hasil produksi. Pengaturan ini digunakan   untuk file kode.

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

Sumber Daya Tertanam - File ini   tertanam dalam membangun proyek utama   output sebagai DLL atau dieksekusi. ini   biasanya digunakan untuk file sumber daya.


103
2017-09-28 12:20



Halaman - Membawa file XAML yang ditentukan, dan mengkompilasi ke BAML, dan menyematkan keluaran tersebut ke dalam aliran sumber daya terkelola 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 kelas parsial dari "codebehind" untuk halaman itu; ini pada dasarnya melibatkan panggilan ke BAML goop untuk menghidrasi kembali file ke dalam memori, dan untuk mengatur salah satu variabel anggota kelas Anda ke item yang sekarang dibuat (misalnya jika Anda meletakkan x: Name = "foo" pada item , Anda akan dapat melakukan this.foo.Background = Purple; atau serupa.

ApplicationDefinition - mirip dengan Page, kecuali itu berjalan di atas furthur, dan mendefinisikan entry point untuk aplikasi Anda yang akan instantiate objek aplikasi Anda, panggilan jalankan di atasnya, yang kemudian akan instantiate jenis yang ditetapkan oleh properti StartupUri, dan akan memberikan mainwindow Anda .

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


33
2017-09-28 16:12



VS2010 memiliki properti untuk 'Build Action', dan juga untuk 'Copy to Output Directory'. Jadi tindakan 'Tidak Ada' akan tetap menyalin ke direktori pembangunan jika properti salinan diatur ke 'Salin jika Lebih Baru' atau 'Salin Selalu'.

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

Saya menggunakan pengaturan 'Build Action' dari pengaturan 'None' dan 'Copy to Output Direcotry' dari 'Copy if Newer' untuk beberapa yang terkait dengan externalconfig.

G.


24
2018-04-09 21:37



Di VS2008, entri dokumen yang tampaknya paling berguna adalah:

Yayasan Presentasi Windows 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 rootnya adalah Aplikasi). ApplicationDefinition bersifat 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 perakitan. Item halaman biasanya diimplementasikan bersama dengan kelas di belakang kode.

Item Halaman yang paling umum adalah file XAML yang elemen tingkat 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  Mengidentifikasi file sumber daya yang dikompilasi ke dalam kumpulan 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).


5
2018-03-31 17:53



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

Berikut ini menjelaskan dua file Build Actions for Sample Data.

Contoh file .xaml data harus ditetapkan salah satu tindakan Build di bawah ini:

DesignData


4
2017-10-10 07:01



  • Palsu: Bagian dari Kerangka Pemalsuan Microsoft (Unit Test Isolation). Tidak tersedia di semua versi Visual Studio. Fakes 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

3
2018-01-26 15:53