Ошибка при использовании пользовательского ТИПА в TextTemplate (t4) - PullRequest
1 голос
/ 16 января 2011

Я создал проект MVC и добавил к нему «Class1.cs» (в том же проекте) Код Class1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MvcApplication2.Models;
namespace MvcApplication2
{
    public class EntityAttribute
    {
        public string Name { get; set; }
    }
    public class Entity
    {
        public List<EntityAttribute> Attributes { get; set; }
        public string Name { get; set; }
    }
    public class Class1
    {
        public static string getTable()
        {
            return "tbl";
        }
    }
}

У меня есть файл текстового шаблона .tt:

<#@ template debug="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="$(SolutionDir)\MvcApplication2\bin\MvcApplication2.dll" #>
<#@ import namespace="MvcApplication2" #>
<#
    string s = Class1.getTable();
#>

Когда я запускаю CustomTool на TextTemplate, я получаю следующую ошибку:

Error   2   Compiling transformation: Metadata file 'MvcApplication2.dll' could not be found C:\Users\Igor\Documents\Visual Studio 2010\Projects\MvcApplication2\MvcApplication2\TextTemplate1.tt   1   1   MvcApplication2

Когда я меняю " <# @ assembly name =" MvcApplication2.dll "#> " на полный путь " <# @ assembly name = "C: \ Users \ Igor \ Documents \ Visual Studio 2010 \ Projects \ MvcApplication2 \ MvcApplication2 \ bin \ MvcApplication2.dll" #>"

Я получаюследующая ошибка:

Error 2 Compiling transformation: 'MvcApplication2.Class1' does not contain a definition for 'getTable' c:\Users\Igor\Documents\Visual Studio 2010\Projects\MvcApplication2\MvcApplication2\TextTemplate1.tt 8 20

Где моя ошибка ??Спасибо

1 Ответ

1 голос
/ 18 января 2011

Я обнаружил проблему.

Относительно 1-я ошибка : когда файл tt не может быть сгенерирован, это считается ошибкой, и приложение НЕ компилируется, соответственно 'MvcApplication2.dll'не существует.

Решение: закомментируйте все в файле и создайте приложение.Затем раскомментируйте все в файле tt и снова запустите CustomTool.

Относительно 2-я ошибка : как я уже говорил, если tt fie не может быть сгенерирован, это рассматривается как ошибка, и приложениеНЕ компилируется, соответственно все сделанные вами изменения НЕ сохраняются, и поэтому в нем говорится, что какой-то тип / метод не может быть найден (их просто нет в dll)

Решение: сделать как врешение abode.

--- НО ---

Даже если при запуске CustomTool не было ошибок, при сборке возникнет ошибка, поскольку VisualStudio и T4 хотят использовать dll, когда один из них используетэто уже.

Решение: используйте T4Toolbox и измените

<#@ assembly name="$(SolutionDir)\MvcApplication2\bin\MvcApplication2.dll" #>

на

<#@ VolatileAssembly processor="T4Toolbox.VolatileAssemblyProcessor" name="$(SolutionDir)\MvcApplication2\bin\MvcApplication2.Dll" #>

Вы можете прочитать статью и загрузить набор инструментов на сайте GEORGE MATHEW здесь

...