2012-08-17 33 views
5

Đây là câu hỏi đầu tiên của tôi trên StackOverflow vì vậy Hi :)Mẫu T4 và Assembly.Load

Có thể tải lắp ráp theo tên lắp ráp bằng Assembly.Load() trong mẫu t4 không? Tôi muốn sử dụng nó để có được tất cả các loại với thuộc tính ServiceContract trong hội đồng được nạp.

var loadedAssembly = Assembly.Load(assemblyName); 
    var types = from type in loadedAssembly.GetTypes() 
    where Attribute.IsDefined(type, typeof(ServiceContractAttribute))select type; 

Hội đồng mong muốn được tham chiếu trong dự án có mẫu của tôi. Tôi đã tìm ra rằng

<#@ assembly name="$(TargetDir)\DesiredAssemblyName.dll" #> 
    var loadedAssembly = Assembly.GetAssembly(typeof(SomeType)); 

hoạt động nhưng không có vẻ là giải pháp tốt. Bên cạnh đó tôi muốn mẫu đó chuyển đổi sau khi tạo và khi tôi thêm các dòng sau vào .csproj

 <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\ 
     TextTemplating\v10.0\Microsoft.TextTemplating.targets"/> 
     <PropertyGroup> 
     <TransformOnBuild>true</TransformOnBuild> 
     </PropertyGroup> 
     <ItemGroup> 
     <!--Add VS\...\PublicAssemblies to the list of places 
     to look for assemblies used by templates.--> 
     <T4ReferencePath Include="..\Onii.Vespa.AppServer\"/> 
     </ItemGroup> 

giải pháp với Assembly.GetAssembly cũng không hoạt động. Cảm ơn mọi đề xuất.

+0

Bạn đã thấy điều này chưa? http://stackoverflow.com/questions/3434713/cant-reference-an-assembly-in-a-t4-template – devlife

+0

Ồ wow! Trường hợp của bạn là chính xác giống như tôi, xuống đến kiểm tra thuộc tính wcf! Bạn đã giải quyết điều này? Tôi đang cố gắng để tải một hội đồng bằng tay bằng cách sử dụng ShadowCopy để ngăn chặn các vấn đề khóa trên dlls được sử dụng bên trong mẫu T4. – julealgon

+0

@julealgon tiếc là không. Tôi làm điều đó bằng tay bất cứ khi nào tôi biết rằng kết quả thay đổi. –

Trả lời

0

tôi đã cùng một vấn đề bằng cách sử dụng chỉ thị Microsoft.TextTemplating.targets. Bạn có thể thêm lệnh chuyển đổi ở cuối .csproj làm giải pháp khả thi:

<Target Name="AfterBuild"> 
    <Exec Command="&quot;%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\$(VisualStudioVersion)\TextTransform&quot; -P &quot;..\Onii.Vespa.AppServer\&quot; -I &quot;$(ProjectDir.TrimEnd('\'))&quot; YourTemplate.tt" /> 
</Target> 
Các vấn đề liên quan