Tôi có một tập lệnh .tt cần tham khảo một vài cụm ngoài.Sử dụng tham chiếu dự án làm đường dẫn lắp ráp trong T4
Máy chủ T4 có thể tự động bao gồm các cụm được tham chiếu trong dự án - chứ không phải là tôi thêm thủ công chỉ thị lắp ráp cho từng dự án?
Ví dụ: Việc tham chiếu một assembly từ một nuget là một mục tiêu di chuyển khi sử dụng một đường dẫn tương ứng với $(ProjecDir)
.
Sử dụng đường dẫn lắp ráp như $(Project)\bin\Debug\Example.dll
cũng có vẻ ít hơn tối ưu - vì nó đòi hỏi phải xây dựng như đã thành công trước đó - mà có lẽ không phải là trường hợp nếu bạn có một tập tin .tt tạo ra các "ErrorGeneratingOutput
" trong một cs nộp! ?
Cập nhật 1:
Vì vậy, tôi đã có một đâm thứ hai tại đây nhưng lần này cố gắng để giải quyết vấn đề xung quanh "TransformOnBuild" (như một mặt lưu ý Tôi rất có thể giới thiệu dự án tuyệt vời @ kzu của: https://github.com/clariuslabs/TransformOnBuild) và không có $ (SolutionDir) có sẵn khi không chạy TextTransform thông qua trực tiếp từ msbuild. Dù sao - tôi đã đưa ra một giải pháp 2 bước.
Mục tiêu msbuild sử dụng danh sách mới tập hợp chỉ thị dựa trên các tham chiếu được tìm thấy trong tệp csproj.
Bất kỳ tệp .tt nào khác trong dự án đều có thể bao gồm tệp được tạo tự động để đăng ký hội đồng dự án.
Dưới đây là một ví dụ về mục tiêu:
<Target Name="Write_AssemblyRefs_TT" BeforeTargets="TransformOnBuild">
<!-- A message for all to enjoy! -->
<WriteLinesToFile File="@(MyTextFile)"
Lines="<# /* AUTOGENERATED BY MSBUILD and Kern Herskind Nightingale */ #>"
Overwrite="true"
Encoding="Unicode" />
<!-- Output all assembly references with a HintPath -->
<WriteLinesToFile File="@(MyTextFile)"
Lines="<#@ assembly name="$(ProjectDir)%(Reference.HintPath)" #>"
Overwrite="false"
Encoding="Unicode"
Condition="'%(Reference.HintPath)' != ''" />
<!-- Output all project references - this could fail with custom nameing/build output dirs -->
<WriteLinesToFile File="@(MyTextFile)"
Lines="<#@ assembly name="$(ProjectDir)%(ProjectReference.RelativeDir)bin\$(Configuration)\%(ProjectReference.Name).dll" #>"
Overwrite="false"
Encoding="Unicode" />
</Target>
<ItemGroup>
<MyTextFile Include="AssemblyRefs.tt" />
</ItemGroup>
Và làm thế nào để đưa nó vào trong file T4 (tầm thường):
<#@ include file="AssemblyRefs.tt" #>
thế hệ Mã cho máy phát điện mã :)
Cập nhật 2:
Tôi đã tạo gói Nuget để dễ dàng thêm mục tiêu xây dựng thế hệ chỉ thị lắp ráp ở trên: https://www.nuget.org/packages/AssemblyReferencesTT/1.0.12
Wonder nếu $ (libDir) kỹ thuật được mô tả ở đây có thể là một phần của giải pháp: http : //blogs.msdn.com/b/t4/archive/2013/08/29/what-s-new-in-t4-for-visual-studio-2013.aspx – herskinduk
herskinduk, tôi không thể tìm thấy cách nào để làm điều đó, tuy nhiên nó sẽ không thể tạo ra một tập tin tt với đường dẫn chính xác, sau đó xây dựng thứ được tạo ra tập tin tt? – samy
@samy Tôi cho rằng điều đó là có thể. Về cơ bản điều này xuất phát từ sự cần thiết phải phân phối một tập tin .tt thông qua nuget. Nó sẽ là siêu slick nếu tôi chỉ có thể sử dụng Nuget để quản lý các phụ thuộc - điều này sẽ yêu cầu T4 để có thể tải các tài liệu tham khảo dự án mặc dù. Có lẽ MEF là câu trả lời? – herskinduk