Пример SubSonic ASP.NET MVC в Visual Web Developer Express - PullRequest
7 голосов
/ 24 апреля 2009

В Visual Web Developer Express 2008 шаблон SubSonic ASP.NET MVC, похоже, не работает с новой добавленной мной базой данных. Я удалил базу данных Chinook и создал свою собственную. Я понимаю, что файлы .tt в папке Models используются для генерации кода, но они этого не делают (несмотря на изменение ConnectionStringName на то, что я установил в web.config)

Щелчок правой кнопкой мыши по каждому файлу .tt и выбор «Запустить пользовательский инструмент» не генерирует ничего, кроме сообщения об ошибке:

Cannot find custom tool 'TextTemplatingFileGenerator' on this system.

Где хранится этот инструмент? В CodeTemplates есть файлы .tt, которые используются при создании нового контроллера или представления, поэтому я предполагаю, что для этого есть инструмент.

Ответы [ 3 ]

10 голосов
/ 18 июня 2009

Следуя комментарию Адама , ВЫ МОЖЕТЕ сделать это в VS Express, но в шаблон необходимо внести изменения, как предложил Адам.

Требование Visual Studio используется только для получения пути к активному проекту, который затем используется для поиска файла web.config и пути app_data. Поскольку эти значения обычно известны в рамках проекта, мы можем жестко заменить значения

Обновите файл _Settings.tt следующим образом:

...
const string ConnectionStringName="Chinook";
//Use this when not building inside visual studio standard or higher
//make sure to include the trailing backslash!
const string ProjectPathDefault="c:\\path\\to\\project\\";

...

public EnvDTE.Project GetCurrentProject()  {

        if (Host is IServiceProvider)
        {
            IServiceProvider hostServiceProvider = (IServiceProvider)Host;
            if (hostServiceProvider == null)
                throw new Exception("Host property returned unexpected value (null)");

            EnvDTE.DTE dte = (EnvDTE.DTE)hostServiceProvider.GetService(typeof(EnvDTE.DTE));
            if (dte == null)
                throw new Exception("Unable to retrieve EnvDTE.DTE");

            Array activeSolutionProjects = (Array)dte.ActiveSolutionProjects;
            if (activeSolutionProjects == null)
                throw new Exception("DTE.ActiveSolutionProjects returned null");

            EnvDTE.Project dteProject = (EnvDTE.Project)activeSolutionProjects.GetValue(0);
            if (dteProject == null)
                throw new Exception("DTE.ActiveSolutionProjects[0] returned null");

            return dteProject;
         }
         return null;
}

...

public string GetConfigPath(){
        EnvDTE.Project project = GetCurrentProject();
        if (project != null)
        {
            foreach(EnvDTE.ProjectItem item in project.ProjectItems)
            {
             // if it is the configuration, then open it up
             if(string.Compare(item.Name, "Web.config", true) == 0)
             {
              System.IO.FileInfo info =
                new System.IO.FileInfo(project.FullName);
                return info.Directory.FullName + "\\" + item.Name;
             }
            }
            return "";
        }
        else
        {
            return ProjectPathDefault+"web.config";
        }
    }

    public string GetDataDirectory(){
        EnvDTE.Project project=GetCurrentProject();
        if (project != null)
        {
            return System.IO.Path.GetDirectoryName(project.FileName)+"\\App_Data\\";
        }
        else
        {
            return ProjectPathDefault+"App_Data\\";
        }
    }
...

Затем используйте функцию VS External Tools для настройки инструмента T4 (Инструменты-> Внешние инструменты): Установите эти свойства:

  • Название: T4
  • Команда: C: \ Program Files \ Common Files \ Microsoft Общий \ TextTemplating \ 1,2 \ TextTransform.exe
  • Аргументы: $ (ProjectDir) \ Models \ Classes.tt
  • Исходный каталог: $ (ProjectDir)
  • Использовать окно вывода и Подсказка для аргументов должна быть проверена.

Нажмите Ok и затем запустите вновь созданный инструмент из меню Tools-> External Tools.

4 голосов
/ 24 апреля 2009

Оказывается, и я этого не знал, что шаблоны T4 работают только на VS Standard или лучше :(. Я думал, что когда-то он был доступен с VS SDK - возможно, вы могли бы его найти там: (

2 голосов
/ 26 апреля 2009

Существует инструмент командной строки TextTransform, который вы можете использовать:

[http://msdn.microsoft.com/en-us/library/bb126461.aspx][1]

По умолчанию в версиях Express он установлен в C: \ Program Files \ Common Files \ Microsoft Shared \ TextTemplating \ 1.2

Однако шаблоны MVC требуют запуска шаблонов t4 в Visual Studio, поэтому я уверен, что, по крайней мере, без патча к шаблонам вы не сможете заставить их работать.

...