T4模板和Assembly.Load

Kap*_*íko 6 .net c# t4

这是我在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;
Run Code Online (Sandbox Code Playgroud)

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

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

有效,但它似乎不是一个好的解决方案.此外,我希望该模板在构建后以及向.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>
Run Code Online (Sandbox Code Playgroud)

使用Assembly.GetAssembly的解决方案也不起作用.谢谢你的所有建议.

Boh*_*dan 1

您是否尝试将程序集加载到仅反射上下文?