2010-01-13 27 views
42

Tôi có một dự án trong Visual Studio. Tôi cần triển khai một số tệp của bên thứ ba cùng với mã của tôi. Thông thường tôi sẽ đặt các tệp này trong thư mục "Tài nguyên" và đặt Hành động Xây dựng trên mỗi tệp thành "Nội dung" và Sao chép vào Thư mục Đầu ra thành "Sao chép nếu mới hơn".Trong Visual Studio, làm cách nào tôi có thể đặt Hành động Xây dựng cho toàn bộ thư mục?

Dù sao tôi cũng có thể đặt các chỉ thị này ở cấp thư mục. Dự án hiện tại tôi đang làm việc với hàng chục tệp như vậy và một vài thư mục con. Tôi muốn có thể làm cho toàn bộ thư mục là "Nội dung" và "Sao chép nếu mới hơn".

Trả lời

45

Tạo dự án. Thêm một tệp dưới dạng Nội dung. Dỡ bỏ dự án và chỉnh sửa tệp * proj theo cách thủ công.

<ItemGroup> 
    <Content Include="myfolder**\*.dll**"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 

Và sau đó trong contentGroup mục tôi sẽ thay thế tệp singe đó bằng một số biểu thức ký tự đại diện MsBuild, * .dll hoặc bất kỳ thứ gì.

+2

Tìm thấy điều này hữu ích để tạo báo cáo ký tự đại diện của tôi: http://msdn.microsoft.com/en-us/library/ms171454%28VS.80%29.aspx – brendan

+1

Tôi đã thử cách này. Nó không hoạt động nhưng khi tôi thêm một mục bằng Visual Studio, nó đã xóa ký tự đại diện và thay đổi tất cả các mục riêng lẻ trở lại thành . Tôi cũng đã thử đề xuất này tại http://stackoverflow.com/questions/3320190/visual-studio-how-to-override-the-default-build-action-for-certain-extension-t. nhưng điều đó không hiệu quả chút nào. – Colin

+2

báo cáo wildcard này làm việc cho tôi để sao chép tất cả các file và thư mục con: PreserveNewest

7

Nếu bạn tình cờ có nhu cầu thiết lập các Build Action cho toàn bộ thư mục lựa chọn tốt nhất là chỉ cần mở file csproj và sử dụng một regex để thay thế tất cả các lần xuất hiện từ

<Content .... 

để

<None ... 

Đó chỉ làm việc một cách hoàn hảo cho me.

+0

Đây là thực sự là một giải pháp tốt hơn –

+3

Tôi nghĩ rằng những gì bạn giải quyết là một vấn đề khác. –

+0

Hmmm nhưng nó sẽ không hợp lý hơn nếu bạn chỉ có thể thiết lập điều này bằng cách sử dụng các công cụ> tùy chọn ở đâu đó?Thật là khó chịu khi mỗi tài sản mới bạn thêm vào dự án bị loại trừ theo mặc định. (Tại sao tôi phải thêm nội dung nếu tôi cũng không muốn đưa nội dung đó vào bản dựng cuối cùng của mình?) – Kokodoko

1

Sửa * csproj của bạn hoặc .vbproj tập tin

Thêm thẻ này

<ItemGroup> 
    <Folder Include="YOUR_FOLDER_NAME_HERE/"> 
    </ItemGroup 

tập tin cuối cùng phải trông như thế này:

<Project> 
<---some more tags---> 
     <ItemGroup> 
     <Folder Include="YOUR_FOLDER_NAME_HERE\" /> 
     </ItemGroup 
<---some more tags---> 
</Project> 
+0

Đã thử điều này và nó không hoạt động. Tôi muốn thêm một thư mục trống vào dự án khi nó được triển khai. Điều này đã không làm điều đó. – sr28

4

tôi sử dụng Visual Studio 2012 và bạn có thể shift-click để chọn nhiều mục trong Solution Explorer sau đó chỉnh sửa thuộc tính Copy to Output Directory của mỗi mục cùng một lúc trong cửa sổ Properties.

Cấp này không tương đương với giải pháp bạn đang tìm kiếm về mặt chức năng, nhưng về mặt ngữ nghĩa. Và hy vọng người tiếp theo vấp ngã trên bài đăng này với một thư mục khổng lồ để khắc phục (như với tôi) sẽ không phải đi sâu vào tệp .csproj.

Hy vọng điều này sẽ hữu ích!

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