2009-05-04 41 views
12

Tôi muốn tạo một dự án Visual Studio (tôi đang sử dụng VSTS 2008) mà đơn giản là sao chép tập tin, chi tiết hơn, tôi sẽ thêm một số tệp vào dự án này và tệp sao chép dự án này (bao gồm trong dự án này) vị trí khi tôi xây dựng dự án.sử dụng Visual Studio để sao chép tệp?

Bất kỳ ý tưởng nào về cách thực hiện điều này trong VSTS?

BTW: Tôi nghe nói bằng cách sử dụng tệp proj có thể thực hiện các tác vụ như vậy, nhưng tôi không tìm thấy bất kỳ đơn giản nào tốt để tìm hiểu các mẫu cho người mới bắt đầu. :-)

cảm ơn trước, George

+0

Tại sao bạn không thể tạo tệp lô hoặc tệp lệnh để thực hiện sao chép? –

+0

@JB King, tôi muốn tích hợp/bao bọc mọi thứ vào msbuild. Bất kỳ ý tưởng hoặc mẫu được đề nghị? – George2

+0

Xem câu trả lời của tôi bên dưới. –

Trả lời

0

C#/VB.NET hồ sơ dự án là MSBuild kịch bản. MSBuild có thể làm bất cứ điều gì bạn cần ...

+0

Đó là sự thật, nhưng câu hỏi đặt ra là yêu cầu trong câu hỏi đã đạt được như thế nào? – AnthonyWJones

+0

Tôi biết MSBuild. Tôi muốn tìm một số sẵn sàng để sử dụng/tham khảo mẫu để làm sao chép tập tin. Bất kỳ đề xuất? – George2

+0

Hãy xem tệp này (MSI, nhưng chỉ cài đặt mẫu) với mẫu MSBuild và tài liệu từ cho chúng: http://download.microsoft.com/download/d/4/0/d401e5cd-04c7-4b72-b644- a00ae3fd5681/msbuildqs.msi – Lucero

13

Bạn có thể thêm một bước bài xây dựng trong Visual Studio:

  • mở các thuộc tính của dự án (công trình này trong các dự án C#, tôi đoán cho VB.NET này áp dụng như tốt).
  • Chọn tab Build Sự kiện
  • Ở đó bạn có thể thêm các lệnh event bài xây dựng, ví dụ

    copy $(ProjectDir)\bin\* SOME_OTHER_FOLDER\*

Các $ (ProjectDir) là một vĩ mô, có một vài chi tiết có sẵn, chúng sẽ được hiển thị khi bạn chỉnh sửa lệnh.

Sau đó, nếu bạn có một cái nhìn tại hồ sơ dự án theo (XYZ.csproj hoặc XYZ.vbproj), bạn có thể nhìn thấy một nhóm tài sản bổ sung ở dưới cùng của tập tin, chẳng hạn như:

<PropertyGroup> 
     <PostBuildEvent>copy $(ProjectDir)\bin\* SOME_OTHER_FOLDER\*</PostBuildEvent> 
    </PropertyGroup> 

Đây là cách bạn sẽ làm điều đó khi chỉnh sửa trực tiếp tệp MSBuild. Lưu ý rằng bạn không cần phải khởi chạy Visual Studio để xây dựng và sao chép các tập tin của bạn, bạn chỉ có thể chuyển tập tin dự án vào msbuild.exe.

+1

Tôi sẽ sử dụng xcopy an toàn hơn một chút. – KJAWolf

+1

PostBuildEvent không phải là một giải pháp "tuyệt vời" vì nó không kiểm tra sự phụ thuộc, đó là nếu một trong những tập tin được sao chép thay đổi, việc xây dựng bài sẽ không phát hiện nó và sẽ không chạy lại. – okigan

+2

sử dụng 'Điểm đến nguồn sao chép/Y' nếu bạn cần sao chép các tệp, ngay cả khi chúng sẽ bị ghi đè lên số – northben

4

Như đã đề cập trước đây, Visual Studio. xx tệp proj thực sự là tệp MSBuild. Vì vậy, bạn có thể làm trong họ bất cứ điều gì MSBuild cho phép họ làm. Tôi đã sử dụng chúng để tùy chỉnh quá trình xây dựng của tôi khá một chút. Trong trường hợp của bạn, những gì bạn đang tìm kiếm là Copy Task. Bạn có thể thêm nó vào mục tiêu SauBuild.

+0

Đây cũng là suy nghĩ đầu tiên của tôi, nhưng anh ấy đã hỏi về việc thực hiện nó trong VS (TS). –

+1

Có, vậy? Điều này không làm những gì anh ta muốn? Khi dự án được xây dựng, các tệp trong đó được sao chép vào một số vị trí. Thậm chí còn có rất nhiều biến mà anh có thể chơi cùng. –

0

Trong Visual Studio 2010, bạn sử dụng Custom Build tools

Ví dụ, điều này bản quy tắc "faq.txt" vào thư mục đầu ra.

<ItemGroup> 
    <CustomBuild Include="faq.txt"> 
    <Message>Copying readme...</Message> 
    <Command>copy %(Identity) $(OutDir)%(Identity)</Command> 
    <Outputs>$(OutDir)%(Identity)</Outputs> 
    </CustomBuild> 
</ItemGroup> 
0

Những câu trả lời khác cho câu hỏi này có xu hướng giả sử bạn đang không sử dụng VisualStudio nhưng MSBuild trực tiếp hoặc có một dự án hiện mà bạn có thể thêm một bước tùy chỉnh xây dựng hoặc một sự kiện xây dựng (Tôi đã tìm thấy loại sự kiện xây dựng của các lỗi giải pháp dễ bị vì chúng sẽ không luôn sao chép các tệp khi bạn cần chúng sao chép).

Nếu bạn muốn một dự án VisualStudio chỉ thực hiện một bản sao, bạn có thể thực hiện việc này với một chứng khoán VisualStudio với dự án Makefile.

Dự án Makefile có thể làm bất kỳ điều gì bạn có thể làm từ dòng lệnh. Rõ ràng điều này có nghĩa là bạn có thể tạo một dự án Makefile chỉ sao chép các tệp. Trong Thuộc tính một dự án Makefile củaCấu hình   Thuộc tínhnmake phần là các trường cho xây dựng, xây dựng lại, và hành động sạch. Chúng có thể được phổ biến với các lệnh tập tin batch cũ. Trên mọi bản dựng, VisualStudio sẽ tạo một tệp lô tạm thời từ trường thích hợp và thực thi nó bằng lệnh cmd. Cảnh báo bạn sẽ nhận được trình thông dịch cmd 32 bit trên máy 64 bit, do đó bạn cần sử dụng thư mục sysnative huyền diệu nếu bạn muốn truy cập lệnh hoặc cửa sổ 64 bit. được ghi lại ở bất kỳ nơi nào, do đó, có thể không phải lúc nào cũng xảy ra - kịch bản lệnh hàng loạt của bạn phải mạnh mẽ chống lại bit-ness thay đổi cmd. bit hoặc 64-bit) sẽ chạy mã:

if /i "%programfiles%"=="%programfiles(x86)%" if /i not "%programfiles%"=="%programw6432%" (
    REM 32 bit cmd on 64-bit computer 
    REM Use the 'sysnative' fake directory to get to 64-bit system32 files 
) else (
    if /i not "%programfiles%"=="%programfiles(x86)%" if /i "%programfiles%"=="%programw6432%" (
     REM 64 bit cmd on 64-bit computer 
     REM Use the 'system32' directory to get to 64-bit system32 files 
    ) else (
     echo "Cannot do 64-bit on 32-bit computer" 
     copy foobar 
    ) 
) 

(thie "copy foobar" line abo ve sẽ thất bại khiến việc xây dựng thất bại.)

Lưu ý, VisualStudio (và MSBuild) sẽ luôn luôn chạy dự án Makefile - nó không kiểm tra dấu thời gian trên tệp đầu ra mà thay vào đó hãy thực hiện công việc theo ý muốn là một số công cụ xây dựng khác (nmake, cmake, make, ant, maven, v.v.). Vì, trong trường hợp này chỉ có một lệnh sao chép đơn giản và không phải là một số chương trình kiểm tra có hay không thực hiện sao chép, bản sao xảy ra trên mọi bản dựng.

VisualStudio luôn chạy dự án makefile cũng có nghĩa là mỗi khi bạn nhấn F5 để gỡ lỗi dự án của bạn, VisualStudio sẽ làm phiền bạn với một cửa sổ pop kém worded lên một hộp thoại (nếu bạn chưa nói với nó không) nói với bạn rằng dự án của bạn đã lỗi thời và bạn phải xây dựng lại nó. Nếu bạn yêu cầu VisualStudio không hiển thị hộp thoại, nó sẽ chỉ thực hiện sao chép mà không hỏi trước khi chạy tệp thực thi.

Các vấn đề liên quan