2017-03-08 1 views
0

Le code suivant, lorsqu'il est exécuté dans Visual Studio 2015 et versions antérieures, affiche une boîte de message avec la valeur attendue "12345". Lorsque j'exécute le même code dans Visual Studio 2017, la boîte de message affiche une valeur vide.Problème ConfigurationManager dans VS 2017

Est-ce un bogue dans Visual Studio 2017 ou le code doit-il être modifié?

UPDATE (cause spécifique):

Ainsi, la cause principale, ainsi que la réponse acceptée, est que j'avais ouvert la solution dans VS 2015 qui a généré les * .vshost.exe fichiers connexes. Plus tard, j'ai ouvert la solution dans VS 2017 et, bien sûr, les fichiers * .vshost.exe ne sont pas nettoyés automatiquement, ils étaient toujours là.

MISE À JOUR 2 (pour ceux qui veulent être en mesure d'utiliser un code similaire dans les deux):

string executablePath = Application.ExecutablePath; 
executablePath = Path.GetFileNameWithoutExtension(executablePath); 
executablePath = executablePath + ".vshost.exe"; 

// Check if the *.vshost.exe exists 
if (File.Exists(executablePath)) 
{      
    try 
    { 
     // If deleting throws an exception then the stub is being run by *.vshost.exe while 
     //  debugging which means this is NOT Visual Studio 2017 (*.vshost.exe is no longer used in VS 2017) 
     File.Delete(executablePath); 
     // If it deletes then use the regular app path since VS2017 is using that now. 
     executablePath = Application.ExecutablePath; 
    } 
    catch (Exception) 
    {       
     executablePath = Application.ExecutablePath; 
    } 
} 
else     
    executablePath = Application.ExecutablePath; 

Configuration cfg = ConfigurationManager.OpenExeConfiguration(executablePath); 
cfg.AppSettings.Settings.Add("Testing", "12345");    
cfg.Save(ConfigurationSaveMode.Modified); 
ConfigurationManager.RefreshSection(cfg.AppSettings.SectionInformation.Name); 

string testing = ConfigurationManager.AppSettings["Testing"]; 

MessageBox.Show(testing); 

Répondre

0

Le processus d'hébergement débogueur a been removed in VS2017, donc lorsque vous exécutez votre application le chemin que vous donner au OpenExeConfiguration La méthode est incorrecte.

Au lieu de cela, passez Application.ExecutablePath à cette méthode et cela devrait fonctionner. La même chose devrait fonctionner dans VS 2015 si vous désactivez le processus d'hébergement (Propriétés du projet -> Déboguer -> Activer le processus d'hébergement Visual Studio).

Il est étrange que vous utilisiez le chemin du processus d'hébergement en premier lieu, car cela ne fonctionnerait que lors de l'exécution dans le débogueur à partir de Visual Studio.

+0

L'étrange est que j'ai le code stub qui me permet de basculer entre différents environnements et mes applications lit dans divers paramètres pour déterminer où se connecter et à qui se connecter en tant que. Cela permet de gagner du temps en configurant tout cela à la main car j'ai besoin de basculer entre eux fréquemment. –