Post build olayını kullanarak dosyaları bir projeden diğerine kopyalayın… VS2010


133

İçinde 3 proje olan bir çözümüm var. Bir projeden diğerine bir görünüm kopyalamam gerekiyor. Oluşturulan DLL'yi aşağıdaki gibi post build olaylarıyla kopyalayabiliyorum:

görüntü açıklamasını buraya girin

Bu yüzden, proje bir '/Views/ModuleHome/Index.cshtml' içindeki dosyayı proje 2'deki bir klasöre kopyalamak istiyorum. Post-build olayı ile dosyaları istediğim projeye nasıl kopyalarım? Teşekkürler

Yanıtlar:


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

ve tüm klasörleri kopyalamak istiyorsanız:

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

Güncelleme: işte çalışma sürümü

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

Yaygın olarak kullanılan bazı anahtarlar şunlardır xcopy:

  • / I - birden çok dosya kopyalıyorsa dizin olarak işlem yap.
  • / Q - Kopyalanan dosyaları görüntüleme.
  • / S - Alt dizinleri boş değilse kopyala.
  • / E - Boş alt dizinleri kopyala.
  • / Y - Var olan dosyaların üzerine yazılmasını istemeyin.
  • / R - Salt okunur dosyaların üzerine yaz.

2
Bu satırı post yapıma ekledim ve şu hatayı alıyorum: "Hata 1" xcopy "C: \ Users \ tcompton \ Downloads \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml" "C: \ Users \ tcompton \ İndirmeler \ MEFMVCPOC \ MEFMVCPOC \ Views \ ModülAna "" kod 2 ile çıkıldı " Ne anlama geliyor?
BoundForGlory

Çıkış penceresinden bak: Ctrl+W+O. Does Views\ModuleAHomehedef konumda klasör mevcut? Kesin komutu için çıkış penceresinin bak infaz ve daha sonra farklı anahtarlar mevcut anlamak için xcopy komutunu belgelerine okunduğunu: xcopy /?.
Darin Dimitrov

1
'Views \ ModuleAHome' klasörü var ancak hedef projenin bir parçası değil yani VS'de görünmesi için 'tüm dosyaları göster'e tıklamanız gerekiyor.
BoundForGlory

1
Hedef klasörün hedef projenin bir parçası olmamasının xcopy için herhangi bir fark yaratacağını düşünmüyorum. Bu komut doğrudan dosya sistemiyle çalışır. Bu klasörün hedef projenin bir parçası olarak görünmesi söz konusu olduğunda, bu görevi otomatikleştirmek daha zor olabilir.
Darin Dimitrov

1
Anladım ... xcopy "$ (ProjectDir) Görünümler \ ModuleAHome \ Index.cshtml" "$ (SolutionDir) MEFMVCPOC \ Views \ ModuleAHome \" / Y /I.... Bu makale, social.msdn
BoundForGlory

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

Kaynak yolu ve hedef yoldaki tırnak işaretlerine dikkat edin, ancak dışlama txt dosyası yolunda değil.

ExcludedFilesList.txt içeriği şu şekildedir: .cs \

Çözümümdeki bir projeden diğerine dosya kopyalamak ve .cs dosyalarını hariç tutmak için bu komutu kullanıyorum.

/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.

Teşekkür ederim. / Dışlamak: eserler için tırnak ekledikten sonra your-source-pathve your-destination-path. Bu alıntılar olmadan hiç çalışmıyor.
AechoLiu

@AechoLiu Dosya yolunuzda boş alan varsa, tırnak işaretleri her zaman gereklidir, örn "My File.txt".
Felipe Romero

14

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

/ F - Tam kaynak ve hedef dosya adlarını görüntüler

/ R - Bu salt okunur dosyaların üzerine yazacak

/ Y - Var olan bir dosyanın üzerine yazılmasını istemeyi bastırır

/ I - Hedefin dizin olduğunu varsayar (ancak ile bitmelidir)

Küçük bir numara - hedefte xcopy'ye hedefin dosya değil dizin olduğunu söylemek için \ karakteriyle bitirmelisiniz!


8

Hedefe gerekli dosya kaynağı için Batchçalışacak çağrı dosyasıXcopy

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

7

Ben böyle kullanıyorum.

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

Bunun kullanımına dikkat edin. $ (TargetDir) zaten '\' "D: \ Projem \ bin \" = $ (TargetDir)

Makroyu Komut düzenleyicide bulabilirsiniz

görüntü açıklamasını buraya girin


1
@HarshilDoshi Projesi → Proje Mülkü → Etkinlik Oluştur → PostBuildEvent
Polluks

3

Bu komut benim için bir cazibe gibi çalışıyor:

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

Bu yinelemeli kopyalar her dllve exedosya MySolutionPath\librariesiçine bin\debugveya bin\release.

Daha fazla bilgiyi burada bulabilirsiniz


2

Önceki cevaplar gibi ben de öneriyorum xcopy. Ancak Hallgeir Engen'in /excludeparametre ile cevabına eklemek istiyorum . Tırnak işaretleri çalışmayacağından, parametrenin uzun veya boşluk içeren yol adlarıyla çalışmasını engelleyen bir hata var gibi görünüyor. Yol adlarının "DOS" biçiminde olması gerekir ve "Belgeler", "BELGE ~ 1" olarak çevrilir ( bu kaynağa göre ).

Bu nedenle, \ exclude parametresini kullanmak isterseniz, burada bir çözüm var :

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

Kaynak ve hedef yolların tırnak içinde olabileceğini (ve boşluk içeriyorsa olması gerektiğini), ancak dışlama dosyasının yolu olmadığını unutmayın .


2

Eğer dikkate almak istiyorsanız platformu (x64, x86 vs) ve yapılandırmayı böyle bir şey olurdu (hata ayıklama veya Yayın):

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.