2011-02-08 45 views
7

Trước khi tôi đầu tư rất nhiều thời gian nghiên cứu Razor và khả năng ứng dụng của nó, tôi muốn hỏi bạn Razor gurus nếu ai có thể sử dụng Razor để tạo mã C#? Bất kỳ vấn đề mà bạn có thể nghĩ ngay lập tức?Sử dụng dao cạo để tạo mã?

+0

nhận xét về "đóng cửa như quá rộng ": Câu hỏi này có thực sự mở rộng không? Câu hỏi thực sự ở đây là "có thể sử dụng dao cạo để tạo mã và nếu có". Có một ví dụ làm việc cho thấy cách tạo mã. – k3b

Trả lời

4

Bạn chắc chắn thể sử dụng Razor để tạo ra mã C#, nhưng nó không thực sự được thiết kế cho các ngôn ngữ phi XML như thế nào. Bạn sẽ phải có rất nhiều thẻ < văn bản >.

+0

Cảm ơn, đó là thông tin tôi đang tìm kiếm. – epitka

+0

+1 Cảm ơn thông tin về ´ ´ đã giúp tạo bản trình diễn hoạt động. (xem câu trả lời của tôi dưới đây) – k3b

+0

Andrew - Dao cạo tốt hơn 100 lần so với bất kỳ động cơ templating nào khác mà tôi đã gặp. Kudos cho bạn! Tôi chắc chắn sẽ vẫn sử dụng nó hơn máy phát điện gode khác, thậm chí w/ thẻ! –

11

thử đầu tiên của tôi với phiên bản razor .dll 2.1.4039.23635 là dễ dàng hơn nhiều so với tôi dự kiến ​​

Đây là một bản demo làm việc nhỏ

Các CodeGenerator

using System.Diagnostics; 
using RazorEngine; 

namespace CodeGen3b 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string template = ... see below; 
      try 
      { 
       string generatedCode = Razor.Parse(template, 
            new { UserNamespace = "MyOwnNamespace" }); 
       Debug.WriteLine(generatedCode); 

      } 
      catch (System.Exception ex) 
      { 
       Debug.WriteLine(ex.Message); 
       Debug.WriteLine(ex.StackTrace); 
      } 
     } 
    } 
} 

Các mẫu trông giống như thế này

using System; 
namespace @Model.UserNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
       @for(int i = 0; i < 3; i++){ 
       <text>Debug.WriteLine("hello @i " + @Model.UserNamespace); 
</text>} 
     } 
    } 
} 

Lưu ý các yếu tố có thể ngăn chặn <text> dao cạo từ giải thích Debug.WriteLine

Các đầu ra

using System; 
namespace MyOwnNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
       Debug.WriteLine("hello 0 " + MyOwnNamespace); 
       Debug.WriteLine("hello 1 " + MyOwnNamespace); 
       Debug.WriteLine("hello 2 " + MyOwnNamespace); 
     } 
    } 
} 

Nó sẽ được tốt đẹp nếu Razor sẽ thực hiện @"..."@ hoặc @'...'@ như bí danh cho <text>...</text>. Tôi đã thêm razorengine.codeplex-Issue này làm yêu cầu cải thiện. Nếu bạn có kế hoạch để sử dụng dao cạo như CodeGenerator xin upvote nó ở razorengine.codeplex-Issue

Chỉnh sửa: như @Epitka đề nghị, chúng ta có thể sử dụng @: ở vị trí của một đơn thẻ dòng văn bản:

using System; 
namespace @Model.UserNamespace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
       @for(int i = 0; i < 3; i++){ 
       @:Debug.WriteLine("hello @i " + @Model.UserNamespace); 
       } 
     } 
    } 
} 
+2

chưa có? @: – epitka

+0

epitka là chính xác: http://weblogs.asp.net/scottgu/archive/2010/12/15/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax.aspx –

+0

@ k3b Cảm ơn! bạn vui lòng tạo một dự án nhỏ về ví dụ của bạn và chia sẻ nó để tải xuống? – Shahin

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