Pertanyaan yang bagus Saya baru saja memposting entri blog yang sangat rinci tentang hal ini di Web Deployment Tool (MSDeploy): Buat Paket termasuk file tambahan atau tidak termasuk file tertentu .
Inilah sinopsisnya. Setelah memasukkan file, saya juga menunjukkan cara mengecualikan file.
Termasuk File Ekstra
Memasukkan file tambahan ke dalam paket sedikit lebih sulit tetapi masih tidak ada masalah jika Anda nyaman dengan MSBuild, dan jika Anda tidak maka baca ini. Untuk melakukan ini, kita perlu menghubungkan ke bagian dari proses yang mengumpulkan file untuk kemasan. Target yang perlu kita perluas disebut CopyAllFilesToSingleFolder. Target ini memiliki properti dependensi, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, yang dapat kita manfaatkan dan suntikkan target kita sendiri. Jadi kami akan membuat target bernama CustomCollectFiles dan menyuntikkannya ke dalam proses. Kami mencapai ini dengan yang berikut (ingat setelah pernyataan impor).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
Ini akan menambah target kita ke proses, sekarang kita perlu mendefinisikan target itu sendiri. Mari kita asumsikan bahwa Anda memiliki folder bernama File Ekstra yang terletak 1 tingkat di atas proyek web Anda. Anda ingin memasukkan semua file itu. Ini adalah target CustomCollectFiles dan kami diskusikan setelah itu.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Di sini yang saya lakukan adalah membuat item _CustomFiles dan pada atribut Include menyuruhnya untuk mengambil semua file di folder itu dan folder apa pun di bawahnya. Jika kebetulan Anda perlu mengecualikan sesuatu dari daftar itu, tambahkan Exclude
atribut ke _CustomFiles
.
Kemudian saya menggunakan item ini untuk mengisi item FilesForPackagingFromProject. Ini adalah item yang benar-benar digunakan MSDeploy untuk menambahkan file tambahan. Juga perhatikan bahwa saya mendeklarasikan nilai DestinationRelativePath metadata. Ini akan menentukan jalur relatif yang akan ditempatkan dalam paket. Saya menggunakan pernyataan Extra Files% (RecursiveDir)% (Filename)% (Extension) di sini. Apa yang dikatakannya adalah menempatkannya di lokasi relatif yang sama dalam paket seperti di bawah folder File Ekstra.
Tidak termasuk file
Jika Anda membuka file proyek aplikasi web yang dibuat dengan VS 2010 di bagian bawahnya, Anda akan menemukan sebuah baris.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
BTW Anda dapat membuka file proyek di dalam VS. Klik kanan pada proyek pilih Unload Project. Kemudian klik kanan pada proyek yang dibongkar dan pilih Edit Proyek.
Pernyataan ini akan mencakup semua target dan tugas yang kita butuhkan. Sebagian besar penyesuaian kami harus setelah impor itu, jika Anda tidak yakin memasukkannya setelah itu! Jadi, jika Anda memiliki file untuk dikecualikan ada nama item, ExcludeFromPackageFiles, yang dapat digunakan untuk melakukannya. Sebagai contoh, katakanlah Anda memiliki file bernama Sample.Debug.xml yang termasuk dalam aplikasi web Anda tetapi Anda ingin file tersebut dikecualikan dari paket yang dibuat. Anda dapat menempatkan cuplikan di bawah setelah pernyataan impor itu.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Dengan mendeklarasikan mengisi item ini, file akan secara otomatis dikecualikan. Perhatikan penggunaan FromTarget
metadata di sini. Saya tidak akan membahasnya di sini, tetapi Anda harus tahu untuk selalu menentukannya.
Solusi yang lebih sederhana adalah dengan mengedit file csproj untuk memasukkan dll yang diperlukan dalam folder bin dan kemudian membuat target beforebuild untuk menyalin item ke folder bin dari folder perpustakaan umum di mana kita menyimpan dll pihak ke-3 kita. Karena item ada dalam file solusi, item ini digunakan oleh msbuild / msdeploy dan tidak ada yang rumit yang diperlukan.
Tag digunakan untuk memasukkan file tanpa menambahkan melalui VS (yang biasanya ingin menambahkannya ke VCS Anda)
Ini adalah target BeforeBuild yang bekerja untuk saya:
Diedit untuk memasukkan saran @ tuespetre untuk menyembunyikan entri sehingga menghilangkan kelemahan sebelumnya dari folder nampan yang terlihat. Tidak diverifikasi oleh saya.
sumber
<Visible>false</Visible>
untuk menyembunyikannya dari Solution Explorer.Sama seperti @toxaq, tetapi solusi yang lebih sederhana adalah dengan:
Dalam solusi explorer, tambahkan file sebagai tautan ke folder pustaka / referensi, dan kemudian di properti atur agar disalin ke output build.
sumber
Jadi implementasi Sayed tidak berhasil untuk saya. Saya menggunakan VS2013 dan menggunakan paket Web Deploy dan perlu menambahkan beberapa DLL plugin dari folder lain ke dalam bin paket deploy. Begini cara saya membuatnya bekerja (lebih mudah):
Di bagian bawah file csproj Anda, tambahkan:
Penyebutan lain dalam file csproj:
sumber
Ingin berkomentar untuk menekankan komentar Emil Lerch di atas. Jika Anda telah menginstal Azure SDK, kemudian cari DependencyProperty yang berbeda.
Pada dasarnya, Anda mungkin perlu menggunakan "CopyAllFilesToSingleFolderForMsdeployDependsOn alih-alih" CopyAllFilesToSingleFolderForPackageDependsOn ". Saya tidak benar-benar seorang pria MSBuild yang maju dan saya membuang waktu untuk mencabut rambut saya mencoba menentukan mengapa target saya tidak dipanggil.
Berikut ini tautan lain jika ini tidak berhasil untuk Anda dan Anda telah menginstal Azure SDK: http://forums.iis.net/t/1190714.aspx
sumber
Sebagai tambahan untuk jawaban Sayed, saya menemukan bahwa deklarasi statis item ExcludeFromPackageFiles dalam proyek saya tidak cukup. Saya perlu mengecualikan DLL tertentu yang hanya tersedia setelah dikompilasi (modul Azin spesifik Ninject yang tidak diperlukan ketika saya menyebarkan ke IIS).
Jadi saya mencoba untuk membuat daftar ExcludeFromPackageFiles menggunakan CopyAllFilesToSingleFolderForPackageDependsOn trick Sayed diposting di atas. Namun, ini sudah terlambat karena proses pengemasan telah menghapus item ExcludeFromPackageFiles. Jadi, saya menggunakan teknik yang sama, tetapi sedikit lebih awal:
Semoga itu bisa membantu seseorang ...
sumber
Juga, dimungkinkan untuk mengatur file sebagai Konten | Salin selalu
sumber