2012-08-17 11 views
5

ist meine erste Frage auf Stackoverflow, so Hallo :)T4-Vorlage und Assembly.Load

Ist es möglich, Montage durch Montage Namen zu laden mit Assembly.Load() in T4-Vorlage? Ich möchte es verwenden, um alle Typen mit ServiceContract-Attribut in geladenen Assembly zu erhalten.

Die gewünschte Baugruppe wird im Projekt referenziert, wo meine Vorlage ist. Ich fand heraus, dass

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

funktioniert, aber es ist scheint nicht wie eine gute Lösung. Außerdem möchte ich diese Vorlage nach dem Bauprozess zu transformieren, und wenn ich folgende Zeilen hinzufügen

 <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> 

Lösung mit Assembly.GetAssembly CSPROJ funktioniert auch nicht. Vielen Dank für alle Vorschläge.

+0

Haben Sie das gesehen? http://stackoverflow.com/questions/3434713/cant-reference-an-assembly-in-a-t4-template – devlife

+0

Oh wow! Ihr Fall ist genau derselbe wie bei mir, bis auf die Überprüfung des wcf-Attributs! Hast du das gelöst? Ich versuche, eine Assembly manuell mithilfe von ShadowCopy zu laden, um Sperrprobleme bei den DLLs zu verhindern, die in der T4-Vorlage verwendet werden. – julealgon

+0

@julealgon leider nicht. Ich mache es manuell, wenn ich weiß, dass sich das Ergebnis ändert. –

Antwort

0

hatte ich das gleiche Problem mit der Microsoft.TextTemplating.targets Richtlinie. Sie können den Umwandlungsbefehl am Ende der .csproj als eine mögliche Problemumgehung hinzufügen:

<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>