¿Alguien tiene un buen ejemplo o clase de ayuda que me permita leer la cadena de conexión en una aplicación web desde una plantilla T4 que resida en OTRO ensamblaje al que hace referencia la aplicación web. Estoy generando algún código de la base de datos a la que hace referencia y le mostraré algo de ayuda sobre cómo obtener la cadena de conexión para este uso. He leído el ejemplo de George Js here sin embargo, solo funciona cuando la plantilla reside en la aplicación web, por favor ayuda !!!leer web.config de otro ensamblado usando t4
Respuesta
var path = Host.ResolvePath(@"../Web.config");
var map = new ExeConfigurationFileMap { ExeConfigFilename = path };
var config = ConfigurationManager.OpenMappedExeConfiguration(
map,ConfigurationUserLevel.None);
var appSettings = config.AppSettings;
var connectionStrings = config.ConnectionStrings.ConnectionStrings;
Se podría tratar de hacer algo así:
var config = ConfigurationManager.OpenExeConfiguration("../somePathTo/web.config")
// use the config to get values like: config.AppSettings
hey rob, la plantilla t4 se ejecuta bajo una herramienta personalizada y, por lo tanto, las rutas relativas no funcionan como en el contexto de la herramienta, no del proyecto. –
Si ha llamado a Assembly, podría hacer algo. así: New Uri (Assembly.GetCallingAssembly(). CodeBase) .AbsolutePath Esto solo funcionaría, si su herramienta personalizada usa llamadas API para superar T4. Puede ser su herramienta personalizada podría proporcionar algún tipo de parámetro de ruta o podría escribir la información de ruta en algún tipo de almacén de datos compartidos. (Archivo XML del directorio de ejecución)? Sería bueno obtener más información. – Robert
este es el resultado de la llamada anterior a <# = System.Reflection.Assembly.GetCallingAssembly(). CodeBase #> file: /// C: /Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualStudio. TextTemplating.10.0/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.TextTemplating.10.0.dll –
después de un poco de búsqueda en torno he encontrado mi respuesta en t4 se puede utilizar
path = Host.ResolvePath(relativeFileName)
- 1. ¿Cómo leer app.config desde otro ensamblado?
- 2. ASP.NET ¿Cómo agregar el ensamblado en web.config?
- 3. Agregar referencia de ensamblado dentro de web.config
- 4. Cómo leer la sección system.web de web.config
- 5. ¿Cómo leer programáticamente los valores de web.config?
- 6. Ejecutando una plantilla T4 usando C#
- 7. Cómo enviar contenido desde otro ensamblado
- 8. Operando plantillas T4 de otra plantilla T4
- 9. plantilla de T4 y Assembly.Load
- 10. Cómo leer valores de la sección personalizada en web.config
- 11. Mono.Cecil: llame al método GENERIC base class 'de otro ensamblado
- 12. T4 y TextTemplatingFileGenerator
- 13. ¿Cómo leer un flujo en otro?
- 14. Leer clases en un espacio de nombres en una plantilla t4
- 15. ¿Cómo abrir un archivo en una ruta relativa usando T4?
- 16. Cómo agregar el ensamblado en el archivo web.config de mvc 4
- 17. Variable de lectura de Web.Config
- 18. Problema T4 al compilar la transformación
- 19. Leer la salida de eco de otro archivo PHP
- 20. leer una línea usando fscanf()
- 21. Leer cadena XML usando StAX
- 22. Leer Jabón mensaje usando C#
- 23. Al agregar un ensamblado en Web.config, ¿puedo especificar una versión o un rango?
- 24. ¿Cómo se usaría T4 para transformar clases de un proyecto a otro?
- 25. Comentarios en Plantillas T4
- 26. Comenzando con T4
- 27. métodos de extensión en T4
- 28. ¿Cómo acceder a las clases en otro ensamblado para fines de pruebas unitarias?
- 29. Cifrado de secciones personalizadas de un web.config
- 30. Leer ID de sesión usando Javascript
así que vamos a ver si lo comprenda el escenario ... tiene una aplicación web. usted tiene una plantilla que PUEDE modificar, pero está compilada en un conjunto referenciado por separado. Cuando ejecuta la transformación, ¿desea poder leer el archivo web.config de la aplicación web de referencia? segundo detalle necesario: ¿cómo está ejecutando la plantilla? interactivamente de VS o programmatically @ runtime? Si puede aclarar estas preguntas, confío en que se tendrá una solución simple. –
Usted es perfecto. la plantilla está en un conjunto referenciado que no sea la aplicación web real, para responder a su pregunta al principio solo para poder ejecutarla de forma interactiva en el tiempo de diseño en comparación con la presente. Estamos investigando una compilación integrada, tenemos svn en ejecución y la constante modificación de la cadena de conexión de plantillas nos está impulsando dilly (db está en la carpeta app_data). Estoy buscando una forma de referenciar el archivo db en la carpeta app_data usando rutas relativas (o absolutas) para acceder al archivo. –