Question

Quelle est la meilleure façon d'obtenir un chemin vers .net 2.0 fichier machine.config, si l'application est en cours d'exécution sur .net 4.0?

Une façon serait de faire un accès de manipulation de chaîne et système de fichiers pour remplacer v4.0 * v2.0 * en    new ConfigurationFileMap().MachineConfigFilename; puis passer à ConfigurationManager.OpenMappedMachineConfiguration(new ConfigurationFileMap(<HERE>)). Je vais recourir à cette solution si rien de mieux est disponible.

Était-ce utile?

La solution

Depuis que je devais le chemin d'accès machine.config pour les versions ASP.NET, je ne se soucient pas de tous les chemins du framework .NET (par exemple 3 et 3,5 cadres car ils ne sont que des extensions de 2.0). J'ai fini par l'interrogation clé de Registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET et la valeur de la clé Path-cadre. Enfin annexant config\machine.config sur le chemin-cadre a produit des résultats souhaités.

La méthode pour la carte runtime ASP.NET au chemin machine.config prendrait des chaînes de tout format « v2.0 », « 2.0.50727.0 » ou tout simplement « v2 » et « 2 », soit regex à une décimale chiffres comme « 2.0 » ou un premier chiffre si les chiffres décimaux ne sont pas spécifiés comme « 2 » et obtenir la juste valeur du registre. Quelque chose de semblable à ceci:


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");

Enfin, je passe cette configs à WebConfigurationMap (je me sers Microsoft.Web.Administration, mais vous pouvez l'utiliser avec System.Configuration ainsi, le code est presque le même):


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

WebConfigurationMap cartes de configuration machine.config personnalisée et web.config racine (donc nul comme deuxième argument en GetWebConfiguration ())

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top