Dalam file .csproj, untuk apa <None Include = “…”>?


139

Bagaimana

<None Include="C:\foo.bar" />

berbeda dari

<Content Include="C:\foo.bar" />

?


7
Saya punya beberapa Contentdiubah menjadi Nones. Saya pikir itu terjadi ketika saya mengganti nama file dari .ascx menjadi .cshtml saat mengonversi ke Razor. Mengubahnya kembali secara manual memperbaiki beberapa masalah penerapan yang saya miliki. Senang saya menemukan ini.
Chris

Jawaban:


138

Artikel MSDN di properti tindakan membangun menjelaskan perbedaannya.

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

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


5
Terima kasih, saya kesulitan menemukan referensi ini.
Emmett

Bermanfaat, tetapi mengapa memiliki item "Tidak Ada" sama sekali, jika file tersebut tidak akan disertakan dalam keluaran? Apa gunanya?
JimH44

1
@ JimH44 <None> item sering digunakan untuk secara khusus menyalin file ke direktori output, meskipun secara default mereka tidak ada dalam grup output . Jika Anda memilih "Salin ke Direktori Output" -> "Salin Selalu" untuk file <Tidak ada>, ini akan menyebabkannya disalin, dan Anda akan melihat entri yang ditambahkan ke file .csproj proyek akan memiliki entri <Tidak ada> untuk file tersebut.
Penyusun yang mencolok

3
Lalu apa perbedaan antara file <None> dengan "Copy to Output Directory" -> "Copy Always" dan file <Content> dengan "Copy to Output Directory" -> "Copy Always"?
hashtable

31

Satu perbedaan adalah bagaimana mereka dipublikasikan; Item "Tidak Ada" tidak disertakan dalam publikasi, item "Konten" melakukannya; misalnya, pada dialog "File Aplikasi" di tab Terbitkan.


8
Tidak benar. Setidaknya di cli dot net baru. jika Anda memiliki item yang dideklarasikan sebagai Tidak Ada dengan satu CopyToOutputDirectoryset untuk trueitu akan diterbitkan dalamdotnet publish
disklosr

13

Saya tidak 100% yakin (saya membaca deskripsi MSDN tentang properti Build Action ) tetapi hanya menyalin jawaban itu dari MSDN ke StackOverflow tidak menjawab pertanyaan sepenuhnya untuk saya.

Perbedaan Tidak Ada dan Konten hanya berpengaruh pada proyek Web. Untuk proyek baris perintah, proyek WinForm atau proyek UnitTest (dalam kasus saya) dll. Tidak ada dan Konten tidak memiliki perilaku yang berbeda.

MSDN: "Grup keluaran proyek" atau "Grup keluaran konten" hanya istilah yang digunakan dalam proyek Web, bukan?


2
Seperti yang Anda katakan, tampaknya Nonevs Contenthanya berpengaruh pada langkah publikasi, bukan langkah pembuatan . Untuk langkah build sepertinya CopyToOutputDirectorybisa disetel di salah satu dan itu mengontrol jika file disalin oleh langkah build. Juga tampak aneh bahwa secara default template T4 ditambahkan sebagai Contentitem dan bukan Noneitem.
Christopher King

8

Dalam situasi saya, file MSBuild saya memiliki ItemGroupsumber gambar untuk yang muncul sebagai berikut:

  <ItemGroup>
    <Content Include="Resources\image001.png" />
    <Content Include="Resources\image002.png" />
    <Content Include="Resources\image003.png" />
    <Content Include="Resources\image004.png" />
    <None Include="Resources\image005.png" />
    <None Include="Resources\image006.png" />
    <None Include="Resources\image007.png" />
  </ItemGroup>

Sementara proyek saya sedang dibangun dengan baik, ini membuat saya bertanya-tanya mengapa saya memiliki campuran Contentdan Noneelemen tipe item di saya ItemGroup. Ini artikel MSDN (untuk Visual Studio 2010) memberi saya bimbingan saya cari:

Perhatikan bahwa ketika editor sumber daya menambahkan gambar, itu menyetel Build Action ke None , karena file .resx mereferensikan file gambar tersebut. Pada waktu pembuatan, gambar ditarik ke dalam file .resources yang dibuat dari file .resx. Gambar kemudian dapat dengan mudah diakses melalui kelas yang diketik kuat secara otomatis untuk file .resx. Oleh karena itu, Anda tidak boleh mengubah pengaturan ini ke Sumber Daya Tertanam , karena melakukan ini akan menyertakan gambar dua kali dalam rakitan.

Resolusi: Dengan panduan ini, menggunakan editor teks, saya mengubah Contentelemen tipe item menjadi None.

Juga, untuk gambaran umum tentang item MSBuild, lihat artikel MSDN ini .


3

Saya memiliki proyek yang tidak berisi item yang dapat dikompilasi (menyimpan html dan javascript untuk pengujian unit melati).

Suatu hari solusi saya (yang berisi proyek tersebut) berhenti menyusun dan mengatakan "Target" Membangun "tidak ada dalam proyek".

Saya menambahkan impor untuk memasukkan kompiler, yang berfungsi dengan baik di mesin saya tetapi gagal menggunakan msbuild di server build.

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Saya kemudian mengubah satu baris dari

<None Include="SpecRunner.html" />

untuk

<Content Include="SpecRunner.html" />

dan juga berfungsi di server build.


2

Anda memerlukan None dalam file proyek template untuk menyertakan file yang Anda tentukan dalam .vstemplate jika tidak, file tersebut akan hilang dalam proses pembuatan & terjemahan. Mereka tertinggal di folder temp yang digunakan untuk membangun semuanya dan kemudian dihapus segera setelah itu.


2

Dalam kasus saya .Pubxml adalah salah satu file di antara daftar Tidak Ada . Ini tidak dimaksudkan untuk membangun solusi atau sebagai file statis untuk proyek web. Tapi untuk mempublikasikan situs ke Azure, konfigurasi ada di sini.

Sesuai artikel Microsoft, ini adalah jenis utama yang kami lihat di antara tag file .csproj :

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

Compile - File dikompilasi menjadi output build. Pengaturan ini digunakan untuk file kode.

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

Sumber Daya Tertanam - File ini disematkan dalam output build proyek utama sebagai DLL atau dapat dijalankan. Ini biasanya digunakan untuk file sumber daya.


1
Tolong beri komentar di sini, jika ada sesuatu yang menyesatkan atau tidak jelas, Hanya memilih tidak setuju tidak membantu saya memperbaikinya lebih baik. Terima kasih sebelumnya.
IKriKan

1
Saya sering mendapat kesalahan: Nama elemen "Tidak Ada" untuk menyertakan "Properti \ PublishProfiles \ FolderProfile.pubxml" harus "Konten". dalam proyek Asp.Net saya di Bamboo, dan kadang-kadang menjalankan kembali pembangunan dapat memperbaikinya, jadi tidak tahu apa sebenarnya masalahnya
Bochen Lin

Halo @BochenLin, detail yang Anda sebutkan di sini agak sedikit, dapatkah Anda mencoba memberikan detail lebih lanjut di sini atau memposting pertanyaan baru dengan detail masalah lengkap dan tangkapan layar jika memungkinkan [lalu bagikan tautan pertanyaan di sini].
IKriKan

0

File konten tidak disertakan dalam build, tetapi disertakan dalam publikasi.

Tidak ada file yang tidak disertakan dalam build atau publish, kecuali mereka dikonfigurasi seperti itu oleh Anda. Misalnya, setelan "Salin ke Direktori Output" dari "Selalu" atau "Lebih Baru", akan menyebabkan keduanya disertakan dalam pembuatan dan publikasi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.