6

これは 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 を使用したソリューションも機能しません。すべての提案に感謝します。

4

2 に答える 2

1

アセンブリをリフレクションのみのコンテキストに読み込もうとしましたか?

于 2014-04-06T10:24:10.510 に答える
0

Microsoft.TextTemplating.targetsディレクティブを使用して同じ問題が発生しました。.csproj可能な回避策として、最後に変換コマンドを追加できます。

<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>
于 2014-04-17T13:24:11.977 に答える