2011-09-21 20 views
7

Đây có thể là Câu hỏi thường gặp, nhưng chúng tôi không thể tìm thấy giải pháp ngay cả sau nhiều tìm kiếm.Di chuyển các mục biên dịch trong msbuild thành một tệp riêng biệt?

Chúng tôi có một số tệp msbuild hoạt động trên cùng một tập hợp các tệp nguồn. Để thực hiện việc quản lý chúng đơn giản hơn một chút, chúng tôi muốn di chuyển tên tệp nguồn <Compile> đến một tệp riêng biệt và tham chiếu từ tất cả các tệp msbuild.

Chúng tôi đã cố gắng cắt <ItemGroup> chứa <Compile> mục và dán nó vào một tập tin mới, và xung quanh nó với

<Project DefaultTargets="Build" ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

và sau đó tham khảo rằng tập tin từ bản gốc với

<Import Project="Common.files.csproj" />

nhưng điều đó không hoạt động - giải pháp mở (có cảnh báo vì chúng tôi đã tấn công cấu hình mặc định), bu t không có mục nào xuất hiện trong Solution Explorer.

chúng ta đang làm gì sai?

+0

Điều gì sẽ xảy ra nếu bạn chọn "Hiển thị tất cả tệp"? – mellamokb

+1

@ mellamokb: điều đó không thành vấn đề - Chỉ hiển thị tất cả các tệp chỉ Toggles hiển thị nội dung trên đĩa. Tôi đã thử nó cũng chỉ để chắc chắn. – bright

Trả lời

10

Cố gắng với Visual Studio 2010:

1) Tạo .proj bên ngoài của bạn (hoặc .target) tập tin và thêm các tập tin của bạn (tôi đã sử dụng một tên item khác nhau nhưng điều đó không phải vấn đề)

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
     <ExternalCompile Include="Program.cs" /> 
     <ExternalCompile Include="Properties\AssemblyInfo.cs" /> 
    </ItemGroup> 
</Project> 

2) Nhập ngoài .proj tập tin của bạn ở phía trên cùng của bạn tập tin dự án Visual Studio:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="MyExternalSources.proj" /> 
    <PropertyGroup> 
    ... 

và sửa đổi các Compile ItemGroup như thế này:

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
</ItemGroup> 
... 

Cảnh báo: Bạn sẽ có thêm mặt hàng mới/tập tin vào tập tin .proj bên ngoài của bạn - tất cả các mục/tập tin bổ sung từ bên trong Visual Studio sẽ kết thúc như thế này :

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
    <Compile Include="MyNewClass.cs" /> 
</ItemGroup> 
... 
+0

Tuyệt vời , nó hoạt động. Có, thật đáng tiếc khi phải thêm các mục bằng tay, nhưng chúng có thể được thêm như thường lệ và sau đó chuyển sang tệp bên ngoài trước khi đăng ký. – bright

+0

Tôi đã thử kỹ thuật tương tự với nhưng có vẻ như không hoạt động. Có ai biết cách nhập một tập hợp nội dung 'mặc định' không, ví dụ: khi làm việc với một ứng dụng web OSS đã tuân thủ hiện có. – uniquelau

+0

@uniquelau Tôi vừa thử và hết hạn một sự cố khi tệp được đặt bên ngoài thư mục dự án "chính". Ngay sau khi tôi chuyển nội dung "tĩnh" vào thư mục dự án, nó đã làm việc giống với một GroupGroup 'Content'. Giải pháp của tôi thực sự chỉ là giải pháp thay thế và cho thấy cách bạn có thể chỉnh sửa các tệp dự án VS. Có thể tác vụ sau khi tạo tùy chỉnh có thể xử lý nội dung tĩnh di chuyển trong trường hợp của bạn. – Filburt

0

Tôi chưa bao giờ thấy tệp "bao gồm" hoạt động với MSBuild. Rõ ràng mục tiêu các tập tin làm việc theo cách này, nhưng tôi đã không nhìn thấy một phần msbuild tập tin bao gồm trong khác. COuld bạn sử dụng một phương pháp như minh họa trong điều này?
http://msdn.microsoft.com/en-us/library/ms171454(VS.80).aspx

Sử dụng ký tự đại diện là cách tôi đã xử lý điều này trong quá khứ.

+0

Cảm ơn, nhưng tôi vẫn đang chờ giải pháp. Đây có thể là phương sách cuối cùng nếu mọi thứ khác thất bại, nhưng nó không phải là tối ưu. – bright

+0

bạn cũng có thể sử dụng tác vụ CreateItem cùng với phân tích cú pháp tệp tùy chỉnh của riêng bạn để thêm các mục vào Nhóm mục tiêu biên dịch trong một mục tiêu BeforeBuild ... http://msdn.microsoft.com/en-us/library/s2y3e43x.aspx –

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