2010-01-31 7 views
5

¿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

+0

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. –

+0

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. –

Respuesta

3
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; 
1

Se podría tratar de hacer algo así:

var config = ConfigurationManager.OpenExeConfiguration("../somePathTo/web.config") 
// use the config to get values like: config.AppSettings 
+0

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. –

+0

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

+0

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 –

0

después de un poco de búsqueda en torno he encontrado mi respuesta en t4 se puede utilizar

path = Host.ResolvePath(relativeFileName) 
Cuestiones relacionadas