2012-11-02 47 views
6

tôi có một dự án VS2010 mà cần phải tạo ra một dataIndataOut thư mục trong bin \ debug thư mục để cho phép một số xét nghiệm để chạy.Làm thế nào để tạo một thư mục trống trên xây dựng trong Visual Studio 2010?

Tạo thư mục Trong thư mục thật dễ dàng - chỉ cần thêm thư mục có nội dung vào dự án và đặt thuộc tính "Sao chép vào thư mục đầu ra" cho mỗi tệp chứa "Sao chép luôn" (hoặc chỉnh sửa dự án tệp để sử dụng ký tự đại diện để bắt tất cả các tệp, như được đề xuất bởi các câu trả lời khác trên SO) - thư mục sẽ được tạo tự động bởi VS sao cho các tệp có thể được sao chép vào đó.

Câu hỏi của tôi: làm cách nào để đảm bảo thư mục dữ liệuOut được tạo tự động khi cần?

Không có tệp nào để đi vào trong đó, vì vậy không có gì cho thư mục này trong ItemGroup. Nếu tôi thêm một mục nhập cho thư mục đến hồ sơ dự án bằng tay sau đó tôi nhận được lỗi:

"<path>\dataOut" is actually a directory. The "Copy" task does not support copying directories. 

(chỉnh sửa: dấu gạch gỡ bỏ từ các tên thư mục để các chữ in nghiêng sẽ làm việc)

Trả lời

4

Một cách tôi đã được quản lý cho đến nay là bước khá rõ ràng của việc thêm một tập tin văn bản giả vào thư mục và thiết lập thuộc tính "Copy to Output Directory" thành "Copy always". Tôi cũng đã thêm một bước sau khi xây dựng để xóa tệp giả sau đó, để lại thư mục trống rỗng phía sau (mặc dù cho dự án cụ thể này, đó thực sự chỉ là do sự kinh doanh của tôi - sẽ không có tác động nếu nó không ở đó).

Tôi vẫn muốn biết nếu có một tùy chọn tốt hơn, mặc dù ...

0

làm thế nào về một số mkdir trong bước prebuild?

+0

Tôi nghĩ rằng EvilTeach thực sự đang cung cấp câu trả lời (thử tạo thư mục một cách rõ ràng trong bước dựng sẵn/sau xây dựng bằng cách sử dụng MKDIR), mặc dù ở dạng câu hỏi tu từ. Lý do tôi tránh được là nó trở nên phức tạp hơn bởi vì bạn cũng phải kiểm tra sự tồn tại của thư mục đầu tiên, v.v. Tôi lý tưởng muốn tránh phải nhớ có các bước trước/sau khi xây dựng trong dự án tại tất cả nếu có thể, bởi vì chúng không rõ ràng như có một thư mục trong trình khám phá giải pháp (mặc dù tôi có bước hậu xây dựng để dọn dẹp tệp giả trong giải pháp hiện tại của mình) –

+0

Tôi sử dụng để đăng bản dựng để sao chép các tiêu đề api vào một thư mục bao gồm chung. – EvilTeach

0

Chỉ vừa chia sẻ tình thế tiến thoái lưỡng nan này, nó xảy ra với tôi rằng cách dễ nhất để xử lý việc này là đơn giản tạo thư mục theo chương trình.

if(!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + "yourDirectoryName")) 
{ 
    Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "yourDirectoryName"); 
} 

Tôi không chắc chắn về loại ứng dụng mà bạn đang làm việc với, nhưng các ứng dụng Winform có thể làm điều này trong phương thức Main của họ, và các ứng dụng web có thể làm điều này trong một số nơi.

+0

Thư mục dataOut chỉ cần chạy một số thử nghiệm trong môi trường phát triển. Thêm mã rõ ràng để tạo ra nó trên hệ thống khách hàng mà sẽ không bao giờ cần nó không phải là con đường để đi! –

8

Hãy thử điều này trong bước trước khi xây dựng:

if not exist "$(TargetDir)dataOut" mkdir "$(TargetDir)dataOut" 

Các dấu ngoặc kép là quan trọng nếu bạn có các khoảng trống ở đâu đó trong $(TargetDir), nhưng tôi muốn sử dụng chúng bất kể cho vững mạnh.

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