2009-04-24 1 views
7

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

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

Cannot find custom tool 'TextTemplatingFileGenerator' on this system. 

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

+0

Какие шаблоны T4 работают с обычным проектом MVC? Я думаю, что шаблоны t4 не могут быть установлены с помощью выражения? – jfar

ответ

10

Следующее вместе с комментарием Adam's, ВЫ МОЖЕТЕ это сделать в 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 инструмент (Tools -> External Tools): установить эти свойства:

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

Нажмите «ОК», а затем запустите вновь созданный инструмент в меню «Инструменты -> Внешние инструменты».

+0

Hey ranomore, Я пробовал ваше решение, но каждый раз получаю сообщение Settings.tt (1,4): warning: В шаблоне были найдены несколько директив шаблонов. Все, кроме первого, будут проигнорированы. Несколько параметров директивы шаблона должны указываться в одной директиве шаблона. У вас есть идея? Я просмотрел файл Settings.tt, существует только одна директива шаблона. Заранее спасибо – john84

+1

Я знаю, что хороший программист исправляет все предупреждающие сообщения, но в этом случае можно сделать исключение. Что вы видите, так это то, что файл, который включен во внешний файл, также имеет директиву шаблона. T4 обрабатывает только первую директиву шаблона, которую он находит. –

+0

Я просто заметил, что вы выбрали это и получили его работу, отличную работу. –

4

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

2

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

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

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

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

+0

Visual Studio 2008 Express Edition не поддерживается, хотя (в соответствии с системными требованиями) – SamWM

+0

Да и установщик останавливает вас от продолжения без Стандартного или выше. Однако я только что загрузил и установил express и добавил инструмент командной строки TextTransform по следующему пути: C: \ Program Files \ Common Files \ Microsoft Shared \ TextTemplating \ 1.2 Так что, надеюсь, вы сможете обойтись без SDK , –

+2

Получить сообщение об ошибке при запуске на Classes.tt: _SQLServer.tt (1,4): warning: в шаблоне были найдены несколько шаблонных директив. Все, кроме первого, будут проигнорированы. Несколько параметров директивы шаблона должны указываться в одной директиве шаблона. – SamWM

 Смежные вопросы

  • Нет связанных вопросов^_^