2012-08-17 28 views
5

To jest moje pierwsze pytanie na StackOverflow tak Cześć :)T4 szablon i Assembly.Load

Czy to możliwe, aby załadować montaż wg nazwy Zgromadzenia z wykorzystaniem Assembly.Load() w szablonie t4? Chciałbym użyć go, aby uzyskać wszystkie typy z atrybutem ServiceContract w załadowanym zestawie.

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

Żądany zestaw odwołuje się w projekcie, w którym znajduje się mój szablon. Stwierdziłem, że działa, ale nie wydaje się dobrym rozwiązaniem. Poza tym chcę, że szablon do przekształcenia po kompilacji i kiedy dodać następujące linie do .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> 

rozwiązanie Assembly.GetAssembly nie działa albo. Dziękujemy za wszystkie sugestie.

+0

Widziałeś to? http://stackoverflow.com/questions/3434713/cant-reference-an-assembly-in-a-t4-template – devlife

+0

Oh wow! Twoja sprawa jest dokładnie taka sama jak moja, aż do sprawdzenia atrybutu wcf! Rozwiązałeś to? Próbuję załadować zespół ręcznie za pomocą ShadowCopy, aby zapobiec problemom z blokowaniem w bibliotekach DLL używanych w szablonie T4. – julealgon

+0

@julealgon niestety nie. Robię to ręcznie, gdy tylko wiem, że wynik się zmienia. –

Odpowiedz

0

miałem ten sam problem przy użyciu dyrektywy Microsoft.TextTemplating.targets. Możesz dodać polecenie przekształcenia na końcu .csproj jako możliwe obejście:

<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> 
Powiązane problemy