kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
Mike Powell
Mike Powell
Question

Folosind ConfigurationManager pentru a încărca config de la o locație arbitrară

Am'm în curs de dezvoltare un acces la date componentă care va fi folosit într-un site web care conține un amestec de classic ASP și ASP.NET pagini, și au nevoie de o modalitate buna de a gestiona setările de configurare.

Am'd place să folosesc un custom ConfigurationSection, și pentru ASP.NET paginile acestei lucrări de mare. Dar când componenta este numit prin COM interop la un classic ASP page, componenta e't rulează în contextul unei ASP.NET cererea și, prin urmare, nu are cunoștințe de web.config.

Există o modalitate de a spune ConfigurationManager la doar încărcați configurația arbitrară cale (de exemplu,..\web.configdacă ansamblul este în/binfolder)? Dacă există apoi am'm gândirea mea componentă poate cădea înapoi la în cazul în care implicitConfigurationManager.GetSectiona se întoarcenull` pentru secțiunea personalizat.

Orice alte demersuri pentru acest lucru ar fi binevenit!

121 2008-08-07T14:07:21+00:00 9
 newfurniturey
newfurniturey
Întrebarea editată 19 martie 2013 в 8:33
Programare
configuration
asp.net
asp-classic
Solution / Answer
 Ishmaeel
Ishmaeel
7 august 2008 в 2:14
2008-08-07T14:14:44+00:00
Mai mult
Sursă
Editează
#8410112

Încercați acest lucru:

System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath); //Path to your config file
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
122
0
Saturn Technologies
Saturn Technologies
9 ianuarie 2013 в 8:52
2013-01-09T20:52:41+00:00
Mai mult
Sursă
Editează
#8410116

O altă soluție este de a trece peste implicit de configurare a mediului de calea de fișier.

Am găsit cea mai bună soluție pentru non-trivial-calea de fișier de configurare de sarcină, în special în cel mai bun mod de a atașa fișierul de configurare pentru dll.

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", <Full_Path_To_The_Configuration_File>);

Exemplu:

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Shared\app.config");

Mai multe detalii pot fi găsite la blog.

În plus, acest alt răspuns are o soluție excelentă, completați cu codul pentru a reîmprospăta aplicația de configurare și o IDisposable obiect pentru a-l reseta înapoi să-l's original de stat. Cu acest soluție, puteți să vă păstrați temporar app config luneta:

using(AppConfig.Change(tempFileName))
{
    // tempFileName is used for the app config during this context
}
 Community
Community
Răspuns editat 23 mai 2017 в 11:54
66
0
 Gavin
Gavin
29 septembrie 2010 в 2:52
2010-09-29T02:52:01+00:00
Mai mult
Sursă
Editează
#8410114

Ishmaeel's a răspunde, în general, nu funcționează, cu toate acestea am găsit o problemă, care este faptul că, folosind `OpenMappedMachineConfiguration pare să-și piardă moștenit secțiunea grupuri din mașină.config. Acest lucru înseamnă că puteți accesa propriile secțiuni personalizate (care este tot OP vrut), dar nu sistemul normal secțiuni. De exemplu, acest cod nu va funcționa:

ConfigurationFileMap fileMap = new ConfigurationFileMap(strConfigPath);
Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
MailSettingsSectionGroup thisMail = configuration.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;  // returns null

Practic, dacă ai pus un ceas pe configurare.SectionGroups`, ai'll vedea că system.net nu este înregistrată ca un SectionGroup, deci's destul de mult inaccesibile prin canalele normale.

Există două moduri am găsit pentru a lucra în jurul valorii de acest lucru. Prima, pe care am don't ca, este de a re-pune în aplicare sistemul secțiunea grupuri prin copierea lor din mașină.config în propria ta web.config de exemplu

<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <sectionGroup name="mailSettings" type="System.Net.Configuration.MailSettingsSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <section name="smtp" type="System.Net.Configuration.SmtpSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </sectionGroup>
</sectionGroup>

Am'm nu sunt sigur aplicația web în sine va rula corect după aceea, dar puteți accesa sectionGroups corect.

Cea de-a doua soluție este în loc pentru a vă deschide fișeirul web.config ca un EXE de configurare, care este, probabil, mai aproape de funcția acestuia oricum:

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap() { ExeConfigFilename = strConfigPath };
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
MailSettingsSectionGroup thisMail = configuration.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;  // returns valid object!

Îndrăznesc să spun că nici unul dintre răspunsurile oferite aici, nici al meu sau Ishmaeel's, sunt destul folosind aceste funcții cum .NET designeri destinat. Dar, acest lucru pare să funcționeze pentru mine.

40
0
Joseph Daigle
Joseph Daigle
8 august 2008 в 2:04
2008-08-08T14:04:32+00:00
Mai mult
Sursă
Editează
#8410113

În plus față de Ishmaeel's a răspunde, metoda OpenMappedMachineConfiguration () va returna întotdeauna o "Configurare" obiect. Deci, pentru a verifica pentru a vedea dacă este încărcat ar trebui să verificațiHasFile de proprietate în cazul în care adevărat înseamnă a venit dintr-un fișier.

Rahil Wazir
Rahil Wazir
Răspuns editat 23 aprilie 2014 в 9:14
10
0
 Jacob
Jacob
19 martie 2019 в 1:12
2019-03-19T13:12:05+00:00
Mai mult
Sursă
Editează
#8410120

Acceptat răspunsul este greșit!!

Se aruncă următoarea excepție privind accesarea AppSettings proprietate:

nu poate să arunce obiect de tip 'System.De configurare.DefaultSection' de tip 'System.De configurare.AppSettingsSection'.

Aici este soluția corectă:

System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "YourFilePath";
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
6
0
Iftikhar Ali
Iftikhar Ali
11 noiembrie 2010 в 6:38
2010-11-11T18:38:54+00:00
Mai mult
Sursă
Editează
#8410115

Eu am furnizat valori de configurare pentru cuvântul găzduit .nET Compoent după cum urmează.

O .NET Class Library componentă a fi numit/a găzduit în MS Word. Pentru a oferi valori de configurare pentru componentele mele, am creat winword.exe.config în C:\Program Files\Microsoft Office\OFFICE11 folder. Tu ar trebui să fie capabil să citească configurații de valori ca în Tradiționale .NET.

string sMsg = System.Configuration.ConfigurationManager.AppSettings["WSURL"];
 abatishchev
abatishchev
Răspuns editat 22 iulie 2011 в 9:27
4
0
Javier Ca&#241;on
Javier Cañon
14 iulie 2014 в 8:43
2014-07-14T20:43:22+00:00
Mai mult
Sursă
Editează
#8410117

Pentru ASP.NET utilizarea WebConfigurationManager:

var config = WebConfigurationManager.OpenWebConfiguration("~/Sites/" + requestDomain + "/");
(..)
config.AppSettings.Settings["xxxx"].Value;
 Banana
Banana
Răspuns editat 14 iulie 2014 в 9:08
1
0
 gatsby
gatsby
9 august 2018 в 10:53
2018-08-09T10:53:32+00:00
Mai mult
Sursă
Editează
#8410119

Acest lucru ar trebui să facă truc :

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", "newAppConfig.config);

Sursa : https://www.codeproject.com/Articles/616065/Why-Where-and-How-of-NET-Configuration-Files

0
0
 JoelFan
JoelFan
8 februarie 2016 в 10:18
2016-02-08T22:18:57+00:00
Mai mult
Sursă
Editează
#8410118

Utilizarea de procesare XML:

var appPath = AppDomain.CurrentDomain.BaseDirectory;
var configPath = Path.Combine(appPath, baseFileName);;
var root = XElement.Load(configPath);

// can call root.Elements(...)
0
0
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
Daniel Gogov
Înregistrat 2 zile în urmă
2
工藤 芳則
Înregistrat 1 săptămână în urmă
3
Ирина Беляева
Înregistrat 1 săptămână în urmă
4
Darya Arsenyeva
Înregistrat 2 săptămâni în urmă
5
anyta nuam-nuam (LapuSiK)
Înregistrat 2 săptămâni în urmă
ID
JA
KO
RO
RU
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire