2009-04-24 8 views
7

W programie Visual Web Developer Express 2008 szablon SubSonic ASP.NET MVC wydaje się nie działać z nową bazą danych, którą dodałem. Usunąłem bazę danych Chinook i utworzyłem własną. Rozumiem, że pliki .tt w folderze Models służą do generowania kodu, ale nie zmieniają (pomimo zmiany ConnectionStringName na to, co ustawię w pliku web.config).Subsoniczna próbka ASP.NET MVC w programie Visual Web Developer Express

Kliknięcie prawym przyciskiem myszy na każdym pliku .tt i wybranie "Uruchom narzędzie niestandardowe" nie generuje niczego, oprócz komunikatu o błędzie:

Cannot find custom tool 'TextTemplatingFileGenerator' on this system. 

Gdzie jest przechowywane to narzędzie? Istnieją pliki .tt w CodeTemplates, które są używane podczas tworzenia nowego kontrolera lub widoku, więc zakładam, że istnieje narzędzie, które to robi.

+0

Czy szablony T4 działają ze zwykłym projektem MVC? Myślę, że szablony t4 mogą nie być zainstalowane z ekspresowym? – jfar

Odpowiedz

10

Po tym, jak wraz z komentarzem Adam's, MOŻESZ zrobić to w VS Express, ale są wymagane zmiany do szablonu, jak zasugerował Adam.

Wymóg Visual Studio służy tylko do uzyskania ścieżki do aktywnego projektu, który jest następnie używany do znalezienia pliku web.config i ścieżki app_data. Ponieważ wartości te są ogólnie znane w projekcie, możemy zakodować substytutów Wartości

aktualizować plik _Settings.tt tak:

... 
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\\"; 
     } 
    } 
... 

następnie użyj narzędzia VS zewnętrzne wyposażone założyć T4 narzędzie (narzędzia -> Narzędzia zewnętrzne): ustawić te właściwości:

  • Tytuł: T4
  • Command: C: \ Program Files \ Common Files \ Microsoft Shared \ TextTemplating \ 1.2 \ TextTransform.exe
  • Argumenty: $ (ProjectDir) \ Modele \ Classes.tt
  • katalogów początkowa: $ (ProjectDir)
  • Użyj okna wyjściowego i Należy sprawdzić monit o argumenty:.

Kliknij przycisk Ok, a następnie uruchom nowo utworzone narzędzie z menu Narzędzia-> Narzędzia zewnętrzne.

+0

Hej ranomore, Próbowałem Twojego rozwiązania, ale otrzymuję za każdym razem Message Settings.tt (1,4): ostrzeżenie: W szablonie znaleziono wiele dyrektyw szablonów. Wszystkie z wyjątkiem pierwszego zostaną zignorowane. W ramach jednej dyrektywy szablonowej należy podać wiele parametrów do dyrektywy szablonu. Masz jakiś pomysł? Zajrzałem do pliku Settings.tt, istnieje tylko jedna dyrektywa szablonu. Z góry dziękuję – john84

+1

Wiem, że dobry programista naprawia wszystkie komunikaty ostrzegawcze, ale w tym przypadku można bezpiecznie zrobić wyjątek. To, co widzisz, to że jakiś plik zawarty w zewnętrznym pliku ma również dyrektywę szablonów. T4 przetwarza tylko pierwszą znalezioną dyrektywę szablonową. –

+0

Właśnie zauważyłem, że podniosłeś to i sprawiłeś, że działa, świetna robota. –

4

Okazuje się, a ja o tym nie wiedziałem, że szablony T4 działają tylko w standardzie VS lub lepszym :(Myślałem, że był on kiedyś dostępny z SDK VS - może mógłbyś znaleźć to tam :(

2

jest TextTransform narzędzie linii poleceń, które można użyć:

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

domyślnie w wersji Express, jest zainstalowany na C: \ Program Files \ Common Files \ Microsoft Udostępnione \ TextTemplating \ 1.2

Jednak szablony MVC wymagają, aby szablony t4 były uruchamiane w Visual Studio, więc jestem całkiem pewny, bez przynajmniej łatki do szablonów, których nie będziesz mógł uruchomić.

+0

Visual Studio 2008 Express Editions nie jest jednak obsługiwany (zgodnie z wymaganiami systemu) – SamWM

+0

Tak, a instalator uniemożliwia kontynuowanie pracy bez standardowego lub wyższego poziomu. Jednak po prostu pobrałem i zainstalowałem ekspresowe i dodałem narzędzie wiersza poleceń TextTransform do następującej ścieżki: C: \ Program Files \ Common Files \ Microsoft Shared \ TextTemplating \ 1.2 Mam nadzieję, że powinieneś być w stanie obejść się bez SDK . –

+2

Wystąpił błąd podczas działania na Classes.tt: _SQLServer.tt (1,4): ostrzeżenie: W szablonie znaleziono wiele dyrektyw szablonów. Wszystkie z wyjątkiem pierwszego zostaną zignorowane. W ramach jednej dyrektywy szablonowej należy podać wiele parametrów do dyrektywy szablonu. – SamWM

Powiązane problemy