2009-01-12 11 views
10

Tôi có "Công cụ tùy chỉnh" cho Visual Studio để chuyển một số tệp mẫu thành mã. Để nhất quán và tính di động, tôi muốn có thể chạy bộ xử lý mẫu này từ MSBuild khi xây dựng bên ngoài Visual Studio.Sử dụng "Công cụ tùy chỉnh" của Studio trong MSBuild

Visual Studio tạo các đoạn sau đây cho các tập tin:

<!-- the template --> 
<None Include="Template.in"> 
    <Generator>Template Processor</Generator> 
    <LastGenOutput>Template.in.Designer.cs</LastGenOutput> 
</None> 
<!-- generated file --> 
<Compile Include="Template.in.Designer.cs"> 
    <AutoGen>True</AutoGen> 
    <DesignTime>True</DesignTime> 
    <DependentUpon>Template.in</DependentUpon> 
</Compile> 

Vấn đề ở đây là các Template.in chỉ xử lý bởi Studio, nhưng không phải bởi MSBuild, có thể dẫn đến out-of-date Designer.cs các tập tin.

Có một tác vụ MSBuild hiện có có thể sử dụng trực tiếp IVsSingleFileGenerator (bao gồm tải vị trí của nó từ sổ đăng ký) hay tôi phải gọi bộ xử lý theo cách thủ công (hoặc bằng cách thực hiện tác vụ MSBuild chính mình hoặc điều chỉnh bộ xử lý)?

Điều thú vị là Using MSBuild bài viết trên MSDN nói:

máy phát điện đơn tập tin có thể truy cập ở thiết kế thời gian mà thôi, nhưng nhiệm vụ MSBuild có thể được sử dụng tại thời gian thiết kế và xây dựng thời gian. Để linh hoạt tối đa, do đó, hãy sử dụng các tác vụ MSBuild để chuyển đổi và tạo mã. Để biết thêm thông tin , hãy xem Mục dự án (Visual SDK SDK).


Cập nhật: tôi đã bị hack công cụ này tùy chỉnh cụ thể vào một nhiệm vụ msbuild, nhưng nó không đẹp. Tôi vẫn muốn một giải pháp chung được duy trì tốt. Tôi đã posted the source trên blog của mình.

+1

Tôi đã gặp một số khó khăn công bằng để viết một SFG (xem http://www.codeproject.com/Articles/686405/Writing-a-Single-File-Generator) chỉ để nhận ra rằng cuối cùng họ không 't xây dựng tự động và không làm việc với MSBuild. Cách tiếp cận tốt hơn là gì? Tôi không thể truy cập liên kết blog của bạn. – Qwertie

Trả lời

1

Khi bạn chỉ định công cụ tùy chỉnh của mình từ bên trong VisualStudio, nó sẽ thêm gì vào tệp dự án hoặc giải pháp của bạn? Vì chúng chỉ là các tệp msbuild, bạn có thể sử dụng xml được thêm làm mẫu cho các tệp xây dựng của riêng bạn.

+0

gợi ý tốt. Tôi đã thêm một ví dụ –