Frage

Was ist der beste Weg, um einen Pfad zu .NET 2.0 machine.config-Datei zu erhalten, wenn die Anwendung auf .net 4.0 ausgeführt wird?

Eine Möglichkeit wäre, String-Manipulation und Dateisystemzugriff zu tun v4.0 * mit v2.0 zu ersetzen * in new ConfigurationFileMap().MachineConfigFilename; und gibt es dann zu ConfigurationManager.OpenMappedMachineConfiguration(new ConfigurationFileMap(<HERE>)). Ich werde auf diese Lösung zurückgreifen, wenn nichts besseres zur Verfügung.

War es hilfreich?

Lösung

Da ich den Pfad zu machine.config für ASP.NET-Versionen benötigt, habe ich über alle .NET-Framework Pfade nicht kümmern (z 3 und 3,5-Frameworks, da sie nur Erweiterungen von 2,0 sind). Ich landete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET Registrierungsschlüssel und Path Wert des Rahmen Schlüssel abfragt. Schließlich config\machine.config den Rahmen Pfad anhängt erhofften Ergebnisse gebracht.

Das Verfahren zur Karte ASP.NET-Laufzeit zu machine.config Pfadzeichenfolgen von einem beliebigen Format „v2.0“ nehmen würde „2.0.50727.0“ oder einfach nur „v2“ und „2“, regex es entweder eine Dezimalstelle wie „2.0“ oder eine erste Stelle, wenn Dezimalstellen wurden wie „2“ nicht angegeben ist und den richtigen Wert aus der Registrierung erhalten. Etwas ähnliches wie folgt aus:


string runtimeVersion = "2.0";
string frameworkPath;
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\ASP.NET");
foreach (string childKeyName in regKey.GetSubKeyNames())
{
   if (Regex.IsMatch(childKeyName, runtimeVersion))
   {
       RegistryKey subKey = regKey.OpenSubKey(childKeyName))
       {
          frameworkPath = (string)subKey.GetValue("Path");
       }
   }
}
string machineConfigPath = Path.Combine(frameworkPath, @"config\machine.config");
string webRootConfigPath = Path.Combine(frameworkPath, @"config\web.config");

Schließlich gebe ich diese configs WebConfigurationMap (I Microsoft.Web.Administration verwenden, aber man kann es mit System.Configuration als auch verwenden, der Code ist fast das gleiche):


using (ServerManager manager = new ServerManager())
{
   Configuration rootWebConfig = manager.GetWebConfiguration(new WebConfigurationMap(machineConfigPath, webRootConfigPath), null);
}

WebConfigurationMap abbildet Konfiguration benutzerdefinierte machine.config und Wurzel web.config (daher null als zweites Argument in GetWebConfiguration ())

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top