Проблема с развертыванием приложения Windows с помощью мастера установки - PullRequest
0 голосов
/ 20 мая 2010

У меня есть несколько XML-файлов, которые используются в моем приложении. Они хранятся в одной папке с приложением, в подпапке DATA: «C: \ MyProject \ DATA \». Чтобы получить путь к папке DATA, я использую этот код:

 static public string GetDataFolderPath()
 {
      string s = System.IO.Directory.GetCurrentDirectory().Replace(@"\bin\Debug", ""); 
      int i = s.LastIndexOf(@"\");
      s = s.Substring(0, i);
      i = s.LastIndexOf(@"\");
      s= s.Substring(0, i);
      return s + @"\Data\"; 
 }

Поэтому, когда я хочу развернуть свое приложение, я создаю проект установки и добавляю папку DATA в папку Application. Но после того, как я установил программу, т.е. «C: \ Project» (папка DATA- «C: \ Project \ DATA» я получил ошибку: «папка C: \ DATA не найдена». Что мне нужно изменить, чтобы все заработало после развертывания. Почему он ищет папку DATA на 1 уровень выше?

Ответы [ 2 ]

0 голосов
/ 20 мая 2010

Попробуйте, это может работать лучше:

public static string GetDataFolderPath()
{
#if DEBUG
    // This will be executed in Debug build
    string path = Directory.GetCurrentDirectory().Replace(@"\bin\Debug", "");
#else
    // This will be executed in Release build
    string path = Directory.GetCurrentDirectory();
#endif
    return Path.Combine(path, "Data");
}

Или просто так, если вы хотите использовать его для сборок Debug и Release:

public static string GetDataFolderPath()
{
    string path = Directory.GetCurrentDirectory().Replace(@"\bin\Debug", "");
    return Path.Combine(path, "Data");
}

Вы должны добавить using System.IO;, чтобы это работало.

0 голосов
/ 20 мая 2010

Может быть, текущий каталог (при запуске вашей программы) не тот, в котором лежат сборки?

попробовать:

//get the full location of the assembly 
string fullPath = System.Reflection.Assembly.GetAssembly(typeof(<your class name>)).Location;

//get the folder that's in
string theDirectory = Path.GetDirectoryName( fullPath );

или

string codeBase = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
return Path.GetDirectoryName(path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...