2009-04-24 11 views
7

En Visual Web Developer Express 2008, la plantilla SubSonic ASP.NET MVC no parece funcionar con una nueva base de datos que agregué. Eliminé la base de datos Chinook y creé la mía propia. Entiendo que los archivos .tt en la carpeta Modelos se usan para generar código, pero no (a pesar de cambiar ConnectionStringName a lo que configuré en el archivo web.config)Ejemplo de SubSonic ASP.NET MVC en Visual Web Developer Express

Haciendo clic con el botón derecho en cada archivo .tt y seleccionando 'herramienta personalizada Run' no genera nada, excepto un mensaje de error:

Cannot find custom tool 'TextTemplatingFileGenerator' on this system. 

donde se guarda esa herramienta? Hay archivos .tt en CodeTemplates, que se usan cuando se crea un nuevo controlador o vista, así que supongo que hay una herramienta que hace esto.

+0

¿Las plantillas T4 funcionan con un proyecto regular de MVC? Estoy pensando que las plantillas t4 no pueden instalarse con Express. – jfar

Respuesta

10

Siguiendo con Adam's comentario, PUEDE hacer esto en VS Express, pero hay cambios requeridos a la plantilla como sugirió Adam.

El requisito de Visual Studio solo se utiliza para obtener la ruta al proyecto activo, que luego se usa para encontrar un archivo web.config y la ruta app_data. Puesto que estos valores son conocidos generalmente dentro de un proyecto, podemos codificar sustituye los valores

actualizar el archivo _Settings.tt así:

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

A continuación, utilizar las herramientas externas VS función para configurar una herramienta T4 (Herramientas -> Herramientas externas): establecer estas propiedades:

  • Título: T4
  • Comando: C: \ Archivos de programa \ Archivos comunes \ Microsoft Shared \ TextTemplating \ 1.2 \ TextTransform.exe
  • Argumentos: $ (projectdir) \ models \ Classes.tt
  • directorio inicial: $ (projectdir)
  • Utilice la ventana de salida y Se debe comprobar la solicitud de argumentos.

Haga clic en Aceptar y luego ejecute la herramienta recién creada desde el menú Herramientas-> Herramientas externas.

+0

Hey ranomore, Intenté su solución, pero recibo cada vez el Message Settings.tt (1,4): advertencia: se encontraron varias directivas de plantilla en la plantilla. Todos menos el primero serán ignorados. Se deben especificar múltiples parámetros para la directiva de plantilla dentro de una directiva de plantilla. ¿Alguna idea? Eché un vistazo al archivo Settings.tt, solo hay una directiva de plantilla. Gracias de antemano – john84

+1

Sé que un buen programador corrige todos los mensajes de advertencia, pero en este caso es seguro hacer una excepción. Lo que está viendo es que algunos archivos que se incluyen en el archivo externo también tienen una directiva de plantilla. T4 solo procesa la primera directiva de plantilla que encuentra. –

+0

Acabo de descubrir que recogió esto y lo puso a funcionar, gran trabajo. –

4

Resulta, y yo no sabía esto, que las plantillas T4 solo se ejecutan en VS Standard o mejor :(. Pensé que, en un momento, estaba disponible con el VS SDK - tal vez podría encontrar que allí :(

2

hay una herramienta TextTransform línea de comandos que puede utilizar:

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

Por defecto en las versiones express que se instala en C: \ archivos de programa \ archivos comunes \ Microsoft Shared \ TextTemplating \ 1.2

Sin embargo, las plantillas MVC requieren que las plantillas t4 se ejecuten en Visual Studio, así que estoy bastante seguro de que sin al menos un parche para las plantillas no podrá hacer que funcionen.

+0

No se admiten Visual Studio 2008 Express Editions (de acuerdo con los requisitos del sistema) – SamWM

+0

Sí y el instalador evita que continúe sin Estándar o superior. Sin embargo, acabo de descargar e instalar Express y agregó la herramienta de línea de comandos TextTransform a la siguiente ruta: C: \ Archivos de programa \ Archivos comunes \ Microsoft Shared \ TextTemplating \ 1.2 Así que espero que pueda prescindir del SDK . –

+2

Recibe un error al ejecutar en Classes.tt: _SQLServer.tt (1,4): advertencia: se encontraron varias directivas de plantilla en la plantilla. Todos menos el primero serán ignorados. Se deben especificar múltiples parámetros para la directiva de plantilla dentro de una directiva de plantilla. – SamWM

Cuestiones relacionadas