Bagaimana
<None Include="C:\foo.bar" />
berbeda dari
<Content Include="C:\foo.bar" />
?
Jawaban:
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.
Satu perbedaan adalah bagaimana mereka dipublikasikan; Item "Tidak Ada" tidak disertakan dalam publikasi, item "Konten" melakukannya; misalnya, pada dialog "File Aplikasi" di tab Terbitkan.
CopyToOutputDirectory
set untuk true
itu akan diterbitkan dalamdotnet publish
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?
None
vs Content
hanya berpengaruh pada langkah publikasi, bukan langkah pembuatan . Untuk langkah build sepertinya CopyToOutputDirectory
bisa disetel di salah satu dan itu mengontrol jika file disalin oleh langkah build. Juga tampak aneh bahwa secara default template T4 ditambahkan sebagai Content
item dan bukan None
item.
Dalam situasi saya, file MSBuild saya memiliki ItemGroup
sumber 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 Content
dan None
elemen 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 Content
elemen tipe item menjadi None
.
Juga, untuk gambaran umum tentang item MSBuild, lihat artikel MSDN ini .
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.
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.
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.
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.
Content
diubah menjadiNone
s. 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.