Saya memiliki VS2008 Saya ingin menyalin file tertentu dari direktori ke /bin/
folder saya . Saya telah mengatur file (terletak di /common/browserhawk/
) ke "Salin ke Direktori Output". Namun, itu juga menyalin struktur folder: file akan disalin ke/bin/common/browserhawk/
Bagaimana cara mendapatkan file-file ini untuk disalin /bin/
? Saya tidak ingin menyimpannya di root situs web agar dapat disalin dengan benar.
Pertanyaan Terkait: Visual Studio menambahkan .dll dan .pdb ke proyek setelah kompilasi
sumber
xcopy /s /d /y "$(ProjectDir)\stuff" "$(TargetDir)\stuff"
Karena saya tidak dapat mengomentari jawaban sebelumnya, saya akan memberikan solusinya di sini:
Menambahkan apa yang disediakan @PaulAlexander, tambahkan berikut ini ke file .csproj / .vbproj Anda:
<ItemGroup> <AvailableItemName Include="RootContent"> <Visible>false</Visible> </AvailableItemName> </ItemGroup> <Target Name="AfterBuild"> <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(RootContent)" SkipUnchangedFiles="true" /> </Target>
Hal ini memungkinkan Anda untuk memilih "RootContent" sebagai Build Action di jendela Properties, dan semuanya dapat diakses melalui GUI. Penjelasan yang lebih lengkap: opsi "AvailableItemName" pada dasarnya membuat daftar bernama baru yang dapat Anda tetapkan untuk item dalam proyek di bawah properti "Build Action" di jendela Properties. Anda kemudian dapat menggunakan daftar yang baru dibuat ini di Target mana pun yang Anda suka (mis. Melalui "@ (RootContent)").
sumber
AvailableItemName
menjadi elemen yang tidak valid jika Anda mengedit file proyek dalam VS; abaikan saja peringatannya, tetap berfungsi.<Target Name="RootOutputCopyTarget" AfterTargets="Build">
... </Target>Jika Anda mengedit .csproj / .vbproj di editor teks, Anda dapat mengontrol di mana file ditempatkan di direktori output, dan juga nama file yang akan ada di direktori output. Sebagai contoh:
<None Include="content\someContent.txt"> <Link>someContentInOutputDirectory.txt</Link> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None>
Ini akan memasukkan file
content\someContent.txt
kebin\someContentInOutputDirectory.txt
. Anda juga dapat memilih subdirektoribin
jika Anda mau; cukup tambahkan ke elemen Link.sumber
Saya percaya perintah XCOPY menangani direktori dan file dengan lebih baik. Karena itu,
Yang memungkinkan untuk membuat folder dari direktori target.
Struktur folder / file proyek dari:
Menjadi:
sumber
/D
mungkin berguna juga, untuk menghindari menimpa kemungkinan perubahan.Tambahkan berikut ini ke file .csproj / .vbproj Anda
<Target Name="AfterBuild"> <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(RootContent)" SkipUnchangedFiles="true" /> </Target>
Kemudian ubah Build Action dari file apa pun yang Anda inginkan di folder root ke RootContent.
sumber
RootContent
tidak muncul dalam daftar tarik-turun "Build Action" dan memasukkannya secara manual menghasilkan kesalahan "Nilai properti tidak valid" dari Visual Studio. Apa yang saya lewatkan?Saya telah menggunakan ini di VS2010, VS2015, VS2017, dan VS2019. Saya lebih suka solusi ini karena:
Menjelang awal file proyek:
<ItemGroup> <AvailableItemName Include="RootContent"> <!-- Add "RootContent" as a choice in the "Build Action" dropdown. --> <Visible>True</Visible> </AvailableItemName> </ItemGroup>
Dipinjam Dari Jawaban Ini
Setelah Impor Target Microsoft:
<PropertyGroup> <AssignTargetPathsDependsOn> $(AssignTargetPathsDependsOn); IncludeRootContentAsContent; </AssignTargetPathsDependsOn> </PropertyGroup> <Target Name="IncludeRootContentAsContent"> <CreateItem Include="@(RootContent)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(Extension)"> <Output ItemName="ContentWithTargetPath" TaskParameter="Include" /> </CreateItem> </Target>
Dipinjam Dari Jawaban Ini
sumber
RootContent
yang menyiratkan "kode keras"CustomContent
untuk menunjukkan ini adalah konten khusus yang kami tambahkan ke proyek ini dan kami perlu menyalinnya dengan cara khusus ini. Selain itu, saya perluTargetPath=%(RecursiveDir)%(Filename)%(Extension)
membuat ulang struktur folder dariCustomContent
file yang ditentukan ke jalur keluaran./common/browserhawk/
untuk disalin ke/bin/common/browserhawk/
seperti yang dikatakan OP? IIRC, niat saya adalah untuk/common/browserhawk/a.txt
berakhir/bin/a.txt
tetapi mengizinkan rekursi dari sana ke bawah, jadi/common/browserhawk/secret/stuff.png
berakhirlah/bin/secret/stuff.png
.%(RecursiveDirectory)
. Ini sangat keren, karena selain memilih file individual di IDE, Anda juga dapat menentukan beberapa file dengan wildcard. Saat menggunakan karakter**
pengganti, seluruh struktur folder akan dipertahankan.Saya akhirnya menambahkan langkah ke file nant build untuk disalin setelah komplain berhasil
<target name="action.copy.browserhawk.config" depends="compile.source"> <copy todir="${App.Web.dir}/bin/" includeemptydirs="false"> <fileset basedir="${browserhawk.config.dir}"> <include name="bhawk_bb.dat" /> <include name="bhawk_sp.dat" /> <include name="browserhawk.properties" /> <include name="maindefs.bdd" /> <include name="maindefs.bdf" /> <include name="BH_PRO.lic" /> </fileset> </copy> <echo message="COPY BROWSERHAWK CONFIG: SUCCESS ${datetime::now()}" /> </target>
sumber
Anda dapat membuat file batch untuk menyalin file dan menjalankannya sebagai peristiwa pasca-pembuatan.
sumber