2011-09-21 36 views
5

Tôi có mẫu T4 được sử dụng với TextTemplatingFilePreprocessor để tạo lớp mà sau đó tôi có thể sử dụng để tạo đầu ra của mẫu.Có thể sử dụng các biểu tượng biên dịch có điều kiện trong các mẫu T4

Khi bắt đầu mẫu T4, tôi nhập một số không gian tên. Ví dụ.

<#@ import namespace="Company.ProductX.Widgets" #> 
<#@ import namespace="Company.ProductX.Services" #> 
//... 

Tôi muốn sử dụng Preprocessor Directives để chuyển ra các hàng nhập khẩu với một tập hợp các không gian tên (trong đó cung cấp các giao diện tương tự nhưng khác nhau chức năng để ProductX). Ví dụ.

<# 
#if(ProductX) 
{ 
#> 
    <#@ import namespace="Company.ProductX.Widgets" #> 
    <#@ import namespace="Company.ProductX.Services" #> 
    //... 
<# 
} 
#endif 
#> 
<# 
#if(ProductY) 
{ 
#> 
    <#@ import namespace="Company.ProductY.Widgets" #> 
    <#@ import namespace="Company.ProductY.Services" #> 
    //... 
<# 
} 
#endif 
#> 

Với ví dụ trên, nhập có vẻ tạo câu lệnh sử dụng tương ứng trong lớp bất kể chỉ thị tiền xử lý. Ví dụ.

using Company.ProductX.Widgets 
using Company.ProductX.Services 
using Company.ProductY.Widgets 
using Company.ProductY.Services 

Có cách nào khác để sử dụng Preprocessor trong mẫu T4 để tự ảnh hưởng đến bản mẫu chứ không chỉ là mẫu đầu ra?

Trả lời

5

Trong ví dụ của bạn, chỉ thị tiền xử lý được đưa vào đầu ra được tạo ra. Những gì bạn có khả năng có thể làm là có tệp ProductX.tt nhập khẩu không gian tên chính xác và sử dụng < # @ include #> để bao gồm mã mẫu.

Something như thế này (ProductX.tt):

<#@ import namespace="Company.ProductX.Widgets" #> 
<#@ import namespace="Company.ProductX.Services" #> 

<#@ include file="TheTemplateCode.ttinclude"  #> 

(ProductY.tt):

<#@ import namespace="Company.ProductY.Widgets" #> 
<#@ import namespace="Company.ProductY.Services" #> 

<#@ include file="TheTemplateCode.ttinclude"  #> 

Tôi không chắc chắn nếu điều này giúp bạn nhưng phải trung thực tôi đang gặp khó khăn một chút bit với trường hợp sử dụng ở đây.

+0

Chúng tôi sử dụng các mẫu 'tiêu đề' này để thực hiện việc này và tìm mẫu hoạt động khá tốt. Không có cách nào để chèn điều kiện xung quanh các chỉ thị được tích hợp vào sản phẩm. – GarethJ

+0

Cảm ơn câu trả lời. Điều này nghe giống như một công việc tốt xung quanh. Một khi tôi đã có nó làm việc tôi sẽ đánh dấu nó như là giải pháp. –

0

Ý tưởng mới cho câu hỏi cũ.

Có thể sử dụng Custom T4 Text Template Directive Processor để chuyển mã tùy ý đến đầu ra T4.

Bộ xử lý chỉ thị tùy chỉnh sẽ cần được đăng ký trên mỗi máy để sử dụng.

+1

Bạn có thể viết một bộ xử lý chỉ thị tùy chỉnh về cơ bản là một chỉ thị bao gồm tùy chỉnh, có. Đó là rất nhiều công việc so với cách tiếp cận tiêu đề mẫu mặc dù. – GarethJ

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