Почему мое приложение пытается прочитать объекты в неправильной папке? - PullRequest
0 голосов
/ 12 июня 2019

Я использую Visual Studio, чтобы сделать мой первый полный выпуск приложения, который представляет собой простой графический интерфейс WPF для настройки локально сохраненного объекта JSON и консольное приложение для запуска в фоновом режиме, используя данные этого объекта для мониторингасайт.Я опубликовал каждый проект в тестовой папке (скажем, «Опубликовать /»), где теперь находится каждый манифест приложения, а также в папке «Файлы приложения», содержащей другую подпапку для каждого проекта.

Я заставил приложения работать нормально - проблема в том, что файл конфигурации сохраняет в одну папку еще несколько уровней в C: \ Users \ username \ AppData \ Local \ Apps \ 2.0 \, и консольное приложениепопытка чтения из совершенно отдельной папки.Оба проекта пишут и читают, используя GetCurrentDirectory () для пути к файлу.Есть ли способ, которым я скучаю, чтобы исправить это?

Код для получения объекта JSON

try
        {
            //Confirms file exists
            if (File.Exists(Directory.GetCurrentDirectory().ToString() + filePath))
            {
                //Initialize json variable to a string, then deserialize it into an instance of RCDetails
                var json = File.ReadAllText(Directory.GetCurrentDirectory().ToString() + filePath);
                RCDetails parsedDetails = JsonConvert.DeserializeObject<RCDetails>(json);

                //Return deserialized JSON
                return parsedDetails;
            }
            else return null;

И код для записи объекта JSON

public void WriteToFile(RCDetails rcd)
    {
        //Serialize input instance of RCDetails class
        string JSONresult = JsonConvert.SerializeObject(rcd, Formatting.Indented);

        //Remove old JSON object
        if (File.Exists(Directory.GetCurrentDirectory().ToString() + jsonFilePath))
            File.Delete(Directory.GetCurrentDirectory().ToString() + jsonFilePath);

        //Create new JSON object with updated details
        File.WriteAllText(Directory.GetCurrentDirectory().ToString() + jsonFilePath, JSONresult);
    }

Точные шаги для публикации проекта:

  • С выбранным консольным приложением нажмите Build> Publish (имя консольного приложения)
  • Перейдите в C: \ Users \ имя пользователя \ Downloads \ Publish \
  • Для установки выберите «С CD-ROM илиDVD-ROM "
  • Выберите", приложение не будет проверять наличие обновлений
  • Выберите «Завершить» и повторите все шаги с тем же путем к файлу для конфигурации WPF

Решение IЯ нашел (не стесняйтесь, дайте мне знать, если это плохой план). Я просто добавил это в оба приложения.

string s = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\IntendedFolder";
        if (!Directory.Exists(s))
            Directory.CreateDirectory(s);
        Directory.SetCurrentDirectory(s);
...