2012-10-31 21 views
10

Tôi có một dự án mã nguồn mở mà tôi đang cố gắng cho phép phát triển trên cả MonoDevelop (bao gồm * nix) và Visual Studio. Một trong những yêu cầu được phát hiện gần đây của tôi là tôi cần sao chép tệp đã xuất từ ​​thư mục này sang thư mục khác (đường dẫn tương đối).Cách tốt nhất để tạo một dự án với kịch bản sau xây dựng hoạt động trên MonoDevelop và Visual Studio?

Tuy nhiên, Windows có lệnh copy, trong khi * nix có lệnh cp. Cách tốt nhất để có được điều này để làm việc trên cả hai nền tảng và giải quyết sự khác biệt này của lệnh là gì?

+0

Nếu bạn thực sự cứng rắn về việc có một kịch bản cho tất cả, bạn có thể muốn có một cái nhìn vào Cygwin, cung cấp " một môi trường nhìn và cảm nhận Linux cho Windows. " xem chi tiết tại đây: http://www.cygwin.com/ – nieve

+1

@tôi đã cài đặt xong, tôi không muốn ép buộc mọi người muốn biên dịch dự án của tôi trên Windows để cài đặt nó – Earlz

+0

Bạn có thể thêm một loại script cài đặt (một cái gì đó như rake/make) để thiết lập môi trường của các nhà phát triển khác, mà sẽ quyết định kịch bản sau xây dựng sẽ được sử dụng theo hệ điều hành. Nếu bạn xem xét cách xây dựng MonoDevelop, bạn sẽ thấy họ đang sử dụng các cơ chế khác nhau hoàn toàn cho các môi trường/HĐH khác nhau. – nieve

Trả lời

0

Bạn có thể viết tập lệnh tạo bài đăng bằng ngôn ngữ như Python. Hoặc bạn có thể yêu cầu các nhà phát triển khác cài đặt GnuWin32 CoreUtils làm tùy chọn cài đặt CygWin. CoreUtils bao gồm cp. Sau đó, bạn chỉ có thể sử dụng cp vô điều kiện.

8

Bạn có thể sử dụng biến số $OS để có các sự kiện xây dựng bài đăng khác nhau tùy thuộc vào môi trường. Để làm điều này, bạn phải chỉnh sửa csproj bằng tay, như:

<PostBuildEvent Condition="'$(OS)' == 'Windows_NT' "> 
    dir 
</PostBuildEvent> 
<PostBuildEvent Condition="'$(OS)' != 'Windows_NT'"> 
    ls 
</PostBuildEvent> 
5

Nếu có thể, nếu bạn có thể dựa vào tích hợp trong nhiệm vụ MSBuild hơn là vỏ kịch bản tùy chỉnh, hành vi sẽ thường làm việc trên xbuild (và do đó MonoDevelop?) Mà không có bất kỳ thay đổi nào, do đó, không cần nền tảng chuyên biệt * proj hack.

ví dụ:

<Target Name="AfterBuild"> 
      <Copy SourceFiles="foo.txt" DestinationFolder="$(OutDir)" /> 
</Target> 

Đây là từ các tài liệu mono: http://www.mono-project.com/archived/porting_msbuild_projects_to_xbuild/#prepostbuildevents