Sao chép (các) tệp từ dự án này sang dự án khác bằng cách sử dụng sự kiện xây dựng bài đăng VS2010


132

Tôi có một giải pháp với 3 dự án trong đó. Tôi cần sao chép một khung nhìn từ dự án này sang dự án khác. Tôi có thể sao chép DLL được tạo thông qua các sự kiện xây dựng bài như vậy:

nhập mô tả hình ảnh ở đây

Vì vậy, tôi muốn sao chép tệp trong dự án một '/Views/ModuleHome/Index.cshtml' vào một thư mục trong dự án 2. Làm cách nào để sao chép (các) tệp vào dự án mong muốn của tôi thông qua sự kiện hậu xây dựng? Cảm ơn

Câu trả lời:


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

và nếu bạn muốn sao chép toàn bộ thư mục:

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

Cập nhật: đây là phiên bản làm việc

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

Dưới đây là một số công tắc thường được sử dụng với xcopy:

  • / I - coi như một thư mục nếu sao chép nhiều tệp.
  • / Q - Không hiển thị các tập tin đang được sao chép.
  • / S - Sao chép thư mục con trừ khi trống.
  • / E - Sao chép các thư mục con trống.
  • / Y - Không nhắc ghi đè lên các tệp hiện có.
  • / R - Ghi đè lên các tệp chỉ đọc.

2
Tôi đã thêm dòng này vào bản dựng bài đăng của mình và tôi gặp lỗi này "Lỗi 1 Lệnh" xcopy "C: \ Users \ tcompton \ Tải xuống \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml" "C: \ Users \ tcompton \ Tải xuống \ MEFMVCPOC \ MEFMVCPOC \ Lượt xem \ ModuleAHome "" đã thoát với mã 2. " Điều đó có nghĩa là gì?
BoundForGlory

Nhìn vào cửa sổ đầu ra : Ctrl+W+O. Có Views\ModuleAHomethư mục tồn tại ở vị trí mục tiêu? Nhìn vào cửa sổ đầu ra để biết lệnh chính xác đang được thực thi và sau đó đọc tài liệu cho lệnh xcopy để hiểu các công tắc khác nhau có sẵn : xcopy /?.
Darin Dimitrov

1
Thư mục 'Lượt xem \ ModuleAHome' tồn tại nhưng nó không phải là một phần của dự án đích có nghĩa là bạn phải nhấp vào 'hiển thị tất cả các tệp' để nó xuất hiện trong VS.
BoundForGlory

1
Tôi không nghĩ rằng thực tế rằng thư mục đích không phải là một phần của dự án đích tạo ra bất kỳ sự khác biệt nào đối với xcopy. Lệnh này hoạt động trực tiếp với hệ thống tập tin. Theo như làm cho thư mục này xuất hiện như là một phần của dự án đích, việc tự động hóa nhiệm vụ này có thể khó khăn hơn.
Darin Dimitrov

1
Hiểu rồi ... xcopy "$ (ProjectDir) Lượt xem \ ModuleAHome \ Index.cshtml" "$ (SolutionDir) MEFMVCPOC \ Views \ ModuleAHome \" / Y / I.... microsoft.com/Forums/uk/csharpgeneral/thread/
Kẻ

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

Lưu ý các trích dẫn trong đường dẫn nguồn và đường dẫn đích, nhưng không phải trong đường dẫn đến tệp txt ngoại lệ.

Nội dung của ExcludedFilesList.txt như sau: .cs \

Tôi đang sử dụng lệnh này để sao chép tệp từ một dự án trong giải pháp của mình, sang dự án khác và loại trừ các tệp .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.

Cảm ơn bạn. / Loại trừ: hoạt động sau khi thêm dấu ngoặc kép vào your-source-pathyour-destination-path. Không có những trích dẫn đó, nó không hoạt động.
AechoLiu

@AechoLiu Các trích dẫn luôn luôn cần thiết nếu đường dẫn tệp của bạn có không gian trống, vd "My File.txt".
Felipe Romero

14

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

/ F - Hiển thị tên tệp nguồn và đích đầy đủ

/ R - Điều này sẽ ghi đè lên các tệp chỉ đọc

/ Y - Loại bỏ nhắc nhở ghi đè (các) tệp hiện có

/ I - Giả sử đích đến là thư mục (nhưng phải kết thúc bằng)

Một mẹo nhỏ - trong mục tiêu bạn phải kết thúc bằng ký tự \ để nói với xcopy rằng mục tiêu là thư mục và không phải tệp!


8

Gọi Batchtệp sẽ chạy Xcopycho nguồn tệp yêu cầu đến đích

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

7

Tôi sử dụng nó như thế này.

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

Lưu ý việc sử dụng này. $ (TargetDir) đã '\' "D: \ MyProject \ bin \" = $ (TargetDir)

Bạn có thể tìm thấy macro trong Trình soạn thảo lệnh

nhập mô tả hình ảnh ở đây


1
@HarshilDoshi Dự án → Tài sản dự án → Xây dựng sự kiện → PostBuildEvent
Polluks

3

Lệnh này hoạt động như một cơ duyên đối với tôi:

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

đệ quy sao chép mọi dllexetập tin từ MySolutionPath\librariesvào bin\debughoặc bin\release.

Bạn có thể tìm thêm thông tin ở đây


2

Giống như các trả lời trước, tôi cũng đề nghị xcopy. Tuy nhiên, tôi muốn thêm vào câu trả lời của Hallgeir Engen với /excludetham số. Dường như có một lỗi với tham số ngăn nó hoạt động với các tên đường dẫn dài hoặc chứa khoảng trắng, vì dấu ngoặc kép sẽ không hoạt động. Tên đường dẫn cần phải ở dạng "DOS" với "Tài liệu" dịch thành "DOCUME ~ 1" (theo nguồn này ).

Vì vậy, nếu bạn muốn sử dụng tham số \ loại trừ, có một cách giải quyết ở đây :

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

Lưu ý rằng các đường dẫn nguồn và đích có thể (và nên, nếu chúng chứa khoảng trắng) nằm trong dấu ngoặc kép, nhưng không phải là đường dẫn đến tệp loại trừ.


2

Nếu bạn muốn xem xét nền tảng (x64, x86, v.v.) và cấu hình (Gỡ lỗi hoặc Phát hành), nó sẽ giống như thế này:

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.