簡體   English   中英

T4模板和Assembly.Load

[英]T4 template and Assembly.Load

這是我在StackOverflow上的第一個問題,所以嗨:)

是否可以使用T4模板中的Assembly.Load()按程序集名稱加載程序集? 我想用它來獲取加載程序集中具有ServiceContract屬性的所有類型。

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

在我的模板所在的項目中引用所需的程序集。 我想通了

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

有效,但它似乎不是一個好的解決方案。 此外,我希望該模板在構建后以及向.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>

使用Assembly.GetAssembly的解決方案也不起作用。 謝謝你的所有建議。

您是否嘗試將程序集加載到僅反射上下文?

我使用Microsoft.TextTemplating.targets指令遇到了同樣的問題。 您可以在.csproj的末尾添加transform命令作為可能的解決方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM