Отражение с T4 получает сборки

Я хочу получить весь класс в конкретной сборке, это мой код

 var assembly=Assembly.GetExecutingAssembly();

 var assemblies = assembly.GetTypes().Where(t => String.Equals(t.Namespace, "RepoLib.Rts.Web.Plugins.Profiler.Models", StringComparison.Ordinal)).ToArray();

когда код С# все в порядке, и я получаю свои сборки, но когда пишу в файле t4, у меня нет какой-либо ошибки, но счет моей сборки.

Ответы

Ответ 1

В шаблоне T4 исполняющая сборка не ваша, а одна из движка T4.

Для доступа к типам из ваших сборок вам необходимо выполнить следующие шаги:

  • Добавьте ссылку на свою сборку в шаблон. Поместите это вверху:

    <#@ assembly name="$(SolutionDir)<Project>\bin\Debug\<Project>.dll" #>
    
  • Импортируйте пространство имен вашей сборки. Поместите это где-то ниже предыдущей строки:

    <#@ import namespace="<Project>.<Namespace>" #>
    
  • Чтобы получить доступ к типам в этой сборке, выберите один из них и получите сборку из него:

    var assembly = typeof(<Type in assembly>).Assembly;
    var types = assembly.GetTypes()
                        .Where(t => String.Equals(
                            t.Namespace,
                            "RepoLib.Rts.Web.Plugins.Profiler.Models",
                            StringComparison.Ordinal))
                        .ToArray();