Salin file dari satu proyek ke proyek lain menggunakan event post build… VS2010


132

Saya punya solusi dengan 3 proyek di dalamnya. Saya perlu menyalin tampilan dari satu proyek ke proyek lain. Saya dapat menyalin DLL yang dibuat melalui acara pasca pembuatan seperti:

masukkan deskripsi gambar di sini

Jadi saya ingin menyalin file di project one '/Views/ModuleHome/Index.cshtml' ke folder di project 2. Bagaimana cara saya menyalin file ke proyek yang saya inginkan melalui event post-build? Terima kasih

Jawaban:


309
xcopy "$(ProjectDir)Views\Home\Index.cshtml" "$(SolutionDir)MEFMVCPOC\Views\Home"

dan jika Anda ingin menyalin seluruh folder:

xcopy /E /Y "$(ProjectDir)Views" "$(SolutionDir)MEFMVCPOC\Views"

Pembaruan: inilah versi yang berfungsi

xcopy "$(ProjectDir)Views\ModuleAHome\Index.cshtml" "$(SolutionDir)MEFMVCPOC\Views\ModuleAHome\" /Y /I

Berikut adalah beberapa sakelar yang umum digunakan dengan xcopy:

  • / I - memperlakukan sebagai direktori jika menyalin beberapa file.
  • / Q - Jangan tampilkan file yang sedang disalin.
  • / S - Salin subdirektori kecuali kosong.
  • / E - Salin subdirektori kosong.
  • / Y - Jangan meminta untuk menimpa file yang ada.
  • / R - Timpa file hanya-baca.

2
Saya menambahkan baris ini ke postingan saya dan saya mendapatkan kesalahan ini "Kesalahan 1 Perintah" xcopy "C: \ Users \ tcompton \ Downloads \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml" "C: \ Users \ tcompton \ Unduhan \ MEFMVCPOC \ MEFMVCPOC \ Views \ ModuleAH "" keluar dengan kode 2. " Apa artinya ini?
BoundForGlory

Lihatlah jendela output: Ctrl+W+O. Apakah Views\ModuleAHomefolder ada di lokasi target? Lihat jendela output untuk perintah yang tepat dieksekusi dan kemudian membaca dokumentasi untuk perintah xcopy untuk memahami switch yang berbeda yang tersedia: xcopy /?.
Darin Dimitrov

1
Folder 'Views \ ModuleAHome' ada tetapi bukan bagian dari proyek target yang berarti Anda harus mengklik 'tampilkan semua file' agar dapat muncul di VS.
BoundForGlory

1
Saya tidak berpikir bahwa fakta bahwa folder tujuan bukan bagian dari proyek tujuan membuat perbedaan pada xcopy. Perintah ini beroperasi langsung dengan sistem file. Sejauh membuat folder ini muncul sebagai bagian dari proyek tujuan yang bersangkutan, mengotomatisasi tugas ini mungkin lebih sulit.
Darin Dimitrov

1
Mengerti ... xcopy "$ (ProjectDir) Views \ ModuleAHome \ Index.cshtml" "$ (SolutionDir) MEFMVCPOC \ Views \ ModuleAHome \" / Y /Io.Artikel ini membantu bersama dengan input social.msdn Anda. microsoft.com/Forums/uk/csharpgeneral/thread/…
BoundForGlory

20
xcopy "your-source-path" "your-destination-path" /D /y /s /r /exclude:path-to-txt- file\ExcludedFilesList.txt

Perhatikan tanda kutip di jalur sumber dan jalur tujuan, tetapi tidak di jalur untuk mengekstrak file txt.

Konten ExcludedFilesList.txt adalah sebagai berikut: .cs \

Saya menggunakan perintah ini untuk menyalin file dari satu proyek dalam solusi saya, ke yang lain dan tidak termasuk file .cs.

/D Copy only files that are modified in sourcepath
/y Suppresses prompting to confirm you want to overwrite an existing destination file.
/s Copies directories and subdirectories except empty ones.
/r Overwrites read-only files.

Terima kasih. The / exclude: berfungsi setelah menambahkan tanda kutip ke your-source-pathdan your-destination-path. Tanpa tanda kutip itu tidak berfungsi sama sekali.
AechoLiu

@ TechoLiu Kutipan selalu diperlukan jika path file Anda memiliki ruang kosong misalnya "My File.txt".
Felipe Romero

14

xcopy "$ (TargetDir) * $ (TargetExt)" "$ (SolutionDir) \ Scripts \ MigrationScripts \ Library \" / F / R / Y / I

/ F - Menampilkan sumber lengkap & nama file target

/ R - Ini akan menimpa file read-only

/ Y - Menekan yang meminta untuk menimpa file yang ada

/ I - Menganggap bahwa tujuan adalah direktori (tetapi harus diakhiri dengan)

Trik kecil - di target Anda harus mengakhiri dengan karakter \ untuk memberi tahu xcopy bahwa target adalah direktori dan bukan file!


8

Panggil Batchfile yang akan dijalankan Xcopyuntuk sumber file yang diperlukan ke tujuan

call "$(SolutionDir)scripts\copyifnewer.bat"

7

Saya menggunakannya seperti ini.

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)Lib\TIRM\x86\" /F /Y 
xcopy "$(TargetDir)$(TargetName).lib" "$(SolutionDir)Lib\TIRM\x86\" /F /Y 


/F : Copy source is File   
/Y : Overwrite and don't ask me

Perhatikan penggunaan ini. $ (TargetDir) sudah '\' "D: \ MyProject \ bin \" = $ (TargetDir)

Anda dapat menemukan makro di editor Perintah

masukkan deskripsi gambar di sini


1
@HarshilDoshi Project → Properti Proyek → Buat Acara → PostBuildEvent
Polluks

3

Perintah ini bekerja seperti pesona bagi saya:

for /r "$(SolutionDir)libraries" %%f in (*.dll, *.exe) do @xcopy "%%f" "$(TargetDir)"

Itu secara rekursif menyalin setiap dlldan exefile dari MySolutionPath\librarieske bin\debugatau bin\release.

Anda dapat menemukan info lebih lanjut di sini


2

Seperti balasan sebelumnya, saya juga menyarankan xcopy. Namun, saya ingin menambahkan jawaban Hallgeir Engen dengan /excludeparameter. Tampaknya ada bug dengan parameter yang mencegahnya bekerja dengan nama path yang panjang atau yang mengandung spasi, karena tanda kutip tidak akan berfungsi. Nama path harus dalam format "DOS" dengan "Documents" yang diterjemahkan menjadi "DOCUME ~ 1" (menurut sumber ini ).

Jadi, jika Anda ingin menggunakan parameter \ kecualikan, ada solusinya di sini :

cd $(SolutionDir)
xcopy "source-relative-to-path-above" "destination-relative-to-path-above
/exclude:exclude-file-relative-path

Perhatikan bahwa jalur sumber dan tujuan dapat (dan seharusnya, jika mengandung spasi) berada dalam tanda kutip, tetapi bukan jalur ke file yang dikecualikan.


2

Jika Anda ingin mempertimbangkan platform (x64, x86 dll) dan konfigurasi (Debug atau Rilis) itu akan menjadi seperti ini:

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
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.