Использовать Microsoft.AspNetCore dll в файле t4 для генерации текста - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь использовать файл t4 для генерации кода для моего веб-API ASP.Core.Мне нужно выполнить следующий код в .tt файле

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="Microsoft.AspNetCore.Mvc.ViewFeatures.dll" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Runtime" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="Microsoft" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
    <#
        // put cs code here 

        var asm = Assembly.LoadFrom(Path.Combine(Directory.GetCurrentDirectory(), "D:\\work\\AITeF\\AdministratorModule\\AdministratorModule\\bin\\Debug\\netcoreapp2.1\\AdministratorModule.dll"));

        var controlleractionlist = asm.GetTypes()
            .Where(type => typeof(Controller).IsAssignableFrom(type))
            .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public))
            .Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any())
            .Select(x => new { Controller = x.DeclaringType.Name, Action = x.Name, ReturnType = x.ReturnType.Name, Attributes = String.Join(",", x.GetCustomAttributes().Select(a => a.GetType().Name.Replace("Attribute", ""))) })
            .OrderBy(x => x.Controller).ThenBy(x => x.Action).ToList();
    #>

Однако я всегда получаю сообщение об ошибке, что не удается найти пространство имен «Контроллер».Как я могу сослаться на это .dll, чтобы выполнить мой код без ошибок.

1 Ответ

0 голосов
/ 20 декабря 2018

После того, как вы добавили действительный путь для Microsoft.AspNetCore.Mvc.ViewFeatures.dll Вам необходимо либо импортировать пространство имен для Controller, либо полностью указать его

<#@ assembly name="a:\valid\path\to\Microsoft.AspNetCore.Mvc.ViewFeatures.dll" #>
<#@ assembly name="System.Core" #>
// ...
<#@ import namespace="Microsoft.AspNetCore.Mvc.Controller" #>

// or fully qualified
    var controlleractionlist = asm.GetTypes()
        .Where(type => typeof(Microsoft.AspNetCore.Mvc.Controller).IsAssignableFrom(type))
...