2009-01-14 15 views
6

Tôi đang tạo mã động, hiện đang sử dụng String.Format và trình giữ chỗ - nhưng định dạng lại mã C# để sử dụng làm mẫu là một nỗi đau và tôi nghĩ rằng việc sử dụng mẫu T4 sẽ tốt hơn.Tôi có thể phân phối lại Động cơ T4 của Microsoft với sản phẩm của tôi không?

Tuy nhiên, việc tạo mã sẽ diễn ra trên một hệ thống đang chạy, vì vậy tôi cần biết rằng tôi có thể phân phối lại một cách an toàn và hợp pháp Công cụ Microsoft T4 với sản phẩm của mình.

Bất kỳ ai khác đã thực hiện việc này? Hoặc biết câu trả lời (hợp pháp)?

+1

Giấy phép (EULA) trên bản tuyên bố phân phối lại T4 là gì? Có một redistributable? –

+0

Đó là vấn đề - Tôi đã không thể tìm thấy một trong hai (chưa). Tôi biết nó phải được đóng gói nội bộ trong MS bằng cách nào đó bởi vì nó chỉ được sử dụng trong sản phẩm P & P Blueprints mới của họ. – Rammesses

Trả lời

5

Dường như có thể sớm có một tùy chọn khác.

Hôm qua, Miguel de Icaza đã đăng bài về tích hợp T4 trong MonoDevelop, vì vậy tôi hy vọng sẽ có một bộ công cụ T4 tương đương mono bất kỳ lúc nào.

Xem: http://tirania.org/blog/archive/2009/Mar-10.html

+0

Điều này đã thực sự được phát hành và bạn có thể lấy mã nguồn từ kho lưu trữ MonoDevelop. Biên dịch nhanh chóng với .Net và (với một chút tranh cãi), bạn sẽ có được một động cơ T4 khá dễ sử dụng cho các dự án của bạn. Tôi đoán tôi nên viết một bài viết trên blog về cách làm việc. – Rammesses

3

Bạn có thể phân phối lại T4 như một phần của DSLToolsRedist, tuy nhiên, nó yêu cầu phiên bản tiêu chuẩn của Visual Studio 2005 trở lên phải được cài đặt. Tôi không tin rằng T4 có thể được phân phối hợp pháp mà không có Visual Studio tại thời điểm này. Kịch bản bạn mô tả sẽ là directly supported in Visual Studio 2010

2

Tôi có câu trả lời và rất tiếc là nó không giống như Oleg được đề xuất. (Làm việc tốt trên T4 bằng cách Oleg). Bạn không thể phân phối lại T4 tại thời điểm này - nó là một phần của VS. Trong VS2010, bạn có thể biên dịch trước các mẫu T4 và sau đó phân phối lại các mẫu được biên dịch trước đó với ứng dụng của bạn mà không phụ thuộc vào T4 để chạy chúng.

1

Tôi có hệ thống trình tạo mã mẫu của riêng mình, biên dịch mã trong một miền ứng dụng riêng biệt, từ trước khi VS2008 xuất hiện.

Nếu bạn quan tâm, hãy đăng nhận xét và tôi sẽ đăng url lên mã.

Mã để sử dụng công cụ tạo mẫu của tôi là here, bạn có thể duyệt qua bằng trình duyệt web hoặc trỏ một máy khách Subversion vào đó. Lưu ý, liên kết bắt đầu ở đây thực sự dừng sau từ, nhưng trình kết xuất đồ họa WMD phía máy chủ rò rỉ liên kết vào văn bản sau.

Lưu ý rằng nếu bạn chỉ sao chép tệp đơn trong không gian tên đó, thì nó sẽ không tự biên dịch, nó yêu cầu một số thứ trong LVK.Delegates và LVK.Scripting, không gian tên lên một vài cấp từ liên kết ở trên . Nếu bạn không muốn hút toàn bộ thư viện, bạn sẽ cần phải trích xuất các phần mà nó phàn nàn về từng cái một cho đến khi nó biên dịch.

Ngoài ra còn có phiên bản nhị phân của thư viện tại /LVK_3_5/trunk/Binaries/Debug/LVK trong cùng một kho lưu trữ. Nếu bạn tải nó đơn giản như chỉ cần thêm một tham chiếu đến nó, và kiểm tra lớp LVK.Text.Templates.TextTemplate.

Rất tiếc, tôi không có bất kỳ ví dụ nào cho thư viện của tôi vào lúc này.

Về cơ bản, sử dụng một mẫu:

TextTemplate tt = new TextTemplate(); 
tt.Source = "... code here, check example file above ..."; 
tt.Compile(); 
String output = tt.Generate(singleObjectParameter); 

Bên trong mẫu, mà về cơ bản tất cả các mã được chèn trong một phương pháp duy nhất (điều này có nghĩa rằng nó không tốt như T4 về việc có thể để thêm các phương thức dễ dàng, nhưng bạn có thể sử dụng các phương thức nặc danh), bạn sẽ có quyền truy cập vào đối tượng dữ liệu được truyền vào nó như một tham số có tên là dữ liệu.

Vì vậy, để chỉ ra nội dung của các tham số truyền vào:

<%= data %> 

Để lặp lại nó:

<% for (Int32 index = 0; index < 10; index++) { %> 
<%= data %> 
<% } %> 

Nếu bạn có thắc mắc, gửi chúng vào email của tôi tại [email protected]

0

Đó là một sự xấu hổ thực sự, nhưng như Oleg chỉ ra, nếu nó chưa được kiểm tra thì làm thế nào bạn có thể phát hành nó.

Lassevk, chắc chắn tôi quan tâm - đang nghĩ về việc khôi phục một công cụ tạo mẫu mà tôi xây dựng khoảng 10 năm trước, nhưng tôi luôn sẵn sàng cho cuộc sống dễ dàng hơn!

2

Để rõ ràng, câu trả lời chính thức là bạn không thể phân phối động cơ Microsoft T4 như một mảnh riêng biệt từ Visual Studio.

Tuy nhiên, như của Visual Studio 2010, bạn có thể sử dụng và phân phối lại các mẫu được biên dịch trước, không có sự phụ thuộc vào Visual Studio.

Bạn cũng có thể sử dụng T4 bên ngoài Visual Studio trên máy đã cài đặt Visual Studio.

Bạn cũng có thể cấp phép và phân phối lại vỏ Visual Studio Isolated miễn phí và sử dụng làm máy chủ lưu trữ cho các công cụ của mình - bao gồm T4.

Kể từ Visual Studio 2010 SP1, bạn được cấp phép sao chép T4 vào máy xây dựng của bạn thông qua giấy phép trong buildserver.txt trong thư mục cài đặt VS của bạn.

+0

Bạn có thể làm rõ quan điểm về Visual Studio Isolated Shell không. Tuyên bố đó không có nghĩa là "có, bạn có thể phân phối lại T4 miễn phí" không? – Andy

+0

Bạn không thể phân chia vỏ bị cô lập, nó để tạo và phân phối các công cụ được lưu trữ trong trình bao, nhưng T4 chắc chắn là một phần của điều đó. – GarethJ

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