2010-01-31 23 views
5

Web uygulamasında başvurulan ANOTHER aksamında bulunan bir T4 şablonundan bir web uygulamasında bağlantı dizesini okumamı sağlayan iyi bir örnek veya yardımcı sınıfı var mı? Başvurduğu veritabanından bazı kodlar üretiyorum ve bu kullanım için bağlantı dizesinin nasıl alınacağı konusunda yardımcı olacağım. ive George Js örneğini okuyun here ancak şablon sadece web uygulamasında bulunduğunda çalışır, lütfen yardım edin!web.config dosyasını başka bir derlemeden okuyun t4

+0

kullanabilir i senaryoyu anlamak .. bir web uygulamanız var. Değiştirebileceğiniz ancak ayrı başvurulan derleme olarak derlenmiş bir şablonunuz var. Dönüşümü çalıştırdığınızda referans web uygulamasının web.config dosyasını okumak isteyebilirsiniz? İkinci detay gerekli: şablonu nasıl çalıştırıyorsunuz? VS veya programatik @ runtime etkileşimli olarak? Bu soruları netleştirebilirseniz, basit bir çözüm bulunacağından eminim. –

+0

Siz bir yerdesiniz. şablon, gerçek web uygulamasından başka, başvurulan bir derlemede, sorunuzu yanıtlamak için, sadece şu an için tasarım zamanında etkileşimli olarak çalıştırabilmek için. Biz entegre bir yapı araştırıyor, biz svn koşuyoruz ve şablonları bağlantı dizgisinin sürekli modifikasyonu bizi düzeltir (db app_data klasöründe). Dosyanın kendisine ulaşmak için göreli yolları (veya mutlak) kullanarak app_data klasöründeki db'ye başvurmanın bir yolunu arıyorum. –

cevap

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

Böyle bir şey yapmak deneyebilirsiniz:

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

hey rob, t4 şablonu özel bir araç altında çalıştırılır ve bu nedenle göreli yollar, proje değil araç bağlamında olduğu gibi çalışmaz. –

+0

Meclis'i çağırıyorsanız, sth yapabilirsiniz. Bunun gibi: Yeni Uri (Assembly.GetCallingAssembly(). CodeBase) .AbsolutePath Bu yalnızca işe yarar, eğer özel bir araç kullanırsanız, API çağrıları T4'ü kullanmak için kullanır. Özel aracınız bir tür yol parametresi sağlayabilir veya yol bilgisini bir tür paylaşılan veri deposuna yazabilir. (Excecuting dizininin XML-Dosyası)? Daha fazla bilgi almak güzel olurdu. – Robert

+0

Bu, yukarıdaki çağrının sonucudur <# = System.Reflection.Assembly.GetCallingAssembly(). CodeBase #> dosya: /// 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

t4 içinde ive etrafında benim cevap bulunamadı arama yapmak biraz sonra bu yüzden beni görelim biri

path = Host.ResolvePath(relativeFileName)