2012-06-18 38 views
9

Tôi cần có thể sử dụng một lớp bên trong mẫu T4, cả hai đều nằm trong giải pháp của tôi. Tôi có một lớp học có tên là Container trong số Container.cs. Trong mẫu văn bản của tôi, tôi muốn có thể truy cập vào lớp Container. Bất kỳ ý tưởng về làm thế nào tôi có thể làm điều này. Về cơ bản một cái gì đó như thế này:Sử dụng lớp bên trong mẫu T4

<#@ template language="C#" #>

<# var container = new Container() #>

+0

Vui lòng hiển thị mã của bạn –

Trả lời

15

Nói chung, nếu bạn cần phải thực sự sử dụng chức năng lớp container trong mẫu của bạn, bạn sẽ muốn tải lắp ráp rằng dự án của bạn đang xây dựng. Điều này giới thiệu một phụ thuộc vòng tròn, vì bạn cần một phiên bản được xây dựng của hội đồng của bạn để tái tạo mã mà sẽ được bao gồm trong hội đồng đó, vì vậy hãy nhận thức điều đó.

Nếu bạn đang sử dụng VS2010 trở lên, bạn sẽ có thể sử dụng một cái gì đó như:

<#@ assembly name="$(TargetPath)" #> 
<#@ import namespace="Your.Namespace" #> 

và sau đó sử dụng lớp container của bạn.

Nếu bạn có VS2010SP1 hoặc cao hơn, điều này sẽ khiến bạn không có probelms với khóa mà lắp ráp trong bộ nhớ, nhưng nếu bạn sớm hơn đó, sau đó bạn sẽ phải khởi động lại Visual Studio sau mỗi thế hệ trước khi bạn có thể xây dựng lại của bạn dự án.

+2

Tùy chọn khác trong mẫu T4 là [File.ReadAllBytes()] (http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx) và sau đó [Assembly.Load()] (http://msdn.microsoft.com/en-us/library/h538bck7.aspx) mảng byte vào bộ nhớ. Điều này sẽ yêu cầu đầy đủ các lớp đủ điều kiện 'new namespaces.class()' nhưng có nghĩa là bạn không phải khởi động lại Visual Studio mỗi lần. –

+0

Cảm ơn người đàn ông, Điều này thực sự làm việc tuyệt vời. – user1396149

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