2010-01-31 3 views
5

Est-ce que quelqu'un a un bon exemple ou une classe d'aide qui me permettrait de lire la chaîne de connexion dans une application web à partir d'un modèle T4 résidant dans un autre assembly référencé par l'application web. Je suis en train de générer du code à partir de la base de données référencée et j'apporterais de l'aide sur la façon d'obtenir la chaîne de connexion pour cette utilisation. ive lire George Js exemple here mais cela ne fonctionne que lorsque le modèle réside dans l'application web, s'il vous plaît aider !!!read web.config d'un autre assembly utilisant t4

+0

alors laissez-moi voir si je comprendre le scénario .. vous avez une application web. vous disposez d'un modèle que vous pouvez modifier mais qui est compilé dans un assembly référencé distinct. Lorsque vous exécutez la transformation, vous souhaitez pouvoir lire le fichier web.config de l'application Web de référence? deuxième détail nécessaire: comment exécutez-vous le modèle? interactivement de VS ou par programme @ runtime? Si vous pouvez clarifier ces questions, je suis convaincu qu'une solution simple doit être trouvée. –

+0

Vous êtes sur. le modèle est dans un ensemble référencé autre que l'application web actuelle, pour répondre à votre question d'abord juste pour être en mesure de l'exécuter de manière interactive au moment de la conception en vs .. pour l'instant. Nous étudions une construction intégrée, nous avons svn en cours d'exécution et la modification constante de la chaîne de connexion des modèles nous rend dilly (db est dans le dossier app_data). Je cherche un moyen de référencer la base de données dans le dossier app_data en utilisant des chemins relatifs (ou absolus) pour obtenir le fichier lui-même. –

Répondre

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

Vous pouvez essayer de faire quelque chose comme ça:

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

hey rob, le template t4 est exécuté sous un outil personnalisé et donc les chemins relatifs ne fonctionnent pas comme c'est dans le contexte de l'outil et non du projet. –

+0

Si vous appelez Assembly, vous pouvez le faire. comme cela: Nouvel Uri (Assembly.GetCallingAssembly(). CodeBase) .AbsolutePath Cela ne fonctionnerait que si votre outil personnalisé utilise des appels API pour excuser T4. Peut être votre outil personnalisé pourrait fournir un certain type de paramètre de chemin ou pourrait écrire les informations de chemin dans un certain type de magasin de données partagé. (Fichier XML du répertoire d'exécution)? Ce serait bien d'avoir plus d'informations. – Robert

+0

ceci est le résultat de l'appel ci-dessus pour <# = System.Reflection.Assembly.GetCallingAssembly() # CodeBase.> fichier : /// 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

après un peu de recherche autour ive trouvé ma réponse à t4, on peut utiliser

path = Host.ResolvePath(relativeFileName)