Недавно я столкнулся с проблемой, когда пытался использовать придуманное мной консольное приложение. Я определил настройки на панели свойств проекта VS2019, и когда я хотел протестировать приложение на другом компьютере, где я никогда не запускал его, я скопировал exe и файл exe.config, я отредактировал настройки в .config файл, чтобы отразить новую среду, но когда я запустил приложение, я увидел, что оно все еще запускается со старыми настройками.
Итак, когда я заглянул в него, я попробовал как Reload()
, так и Reset()
, но он просто не загружался из файла .config. Я попытался заглянуть в AppData\Local\ConsoleAppName
, но папку нигде не найти.
Затем я попробовал мастер публикации и экспериментировал с различными вариантами публикации, но ничего не изменилось, только так я мог их изменить настройки были через страницу свойств в VS2019.
Я написал следующее, чтобы провести некоторые тесты:
using ConsoleApp12.Properties;
using System;
using System.Configuration;
namespace ConsoleApp12
{
class Program
{
public static void PrintParametres()
{
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
Console.WriteLine(path);
foreach (SettingsProperty lSetting in Settings.Default.Properties)
{
Console.WriteLine("{0} = {1}", lSetting.Name, lSetting.DefaultValue);
}
}
static void Main()
{
Settings.Default.Reload();
ConsoleKeyInfo cki;
PrintParametres();
do
{
cki = Console.ReadKey(true);
switch (cki.Key)
{
case ConsoleKey.P:
PrintParametres();
break;
default:
Console.WriteLine("Print P for settings, Ctrl-C or Q to quit.");
break;
}
}
while (cki.Key != ConsoleKey.Q);
Settings.Default.Save();
}
}
}
Единственные файлы, которые он создает, - это .exe, .exe.config и .pdb. В исходном файле .config у меня есть:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ConsoleApp12.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<userSettings>
<ConsoleApp12.Properties.Settings>
<setting name="TestSetting" serializeAs="String">
<value>Some text in setting</value>
</setting>
</ConsoleApp12.Properties.Settings>
</userSettings>
</configuration>
И если я изменю значение на <value>Some other text in setting</value>
, результат для path
всегда будет %userprofile%\appdata\local\AppName\AppName.exe_Url_2543oxfebn2t3ud4uo1qvikliy41i53h\1.0.0.0\user.config
, но даже с видимыми системными файлами я не могу найдите эту папку, и свойства соответствуют тому, что определено в проекте, но они не отражают изменений в файле .config.
Есть кое-что, чего я действительно не понимаю в этой ситуации. Может, я неправильно понял в документации, или, может быть, это c для приложений Forms? Сейчас это консольное приложение, но цель состоит в том, чтобы сделать сервис, так что мне здесь не хватает? или мне следует поступить иначе?
РЕДАКТИРОВАТЬ: Этот вопрос уже был изучен, ответы были проверены и не дали никакого решения.