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