.Net DevelopmentСтатьи

Определение пути к исполняемой сборке (.Net Compact Framework 1.1-2.0)

Автор:

Когда передо мной возникла казалось бы простая задача, определить каталог, откуда было запущено мое .Net приложение я весьма самоуверенно подумал: "Да ну, напишу за минуту!"
НЕ тут-то было:) Строка вида

 string CurDir = System.Environment.CurrentDirectory;

работать отказалась, ибо в .Net Compact Framewok у класса Environment отсутствует статический метод CurrentDirectory. Опробовав несколько других фишек я убедился в том, что и он не работают!
Возник парадокс:
для выполнения простейшей задачи необходимо было писать сторонную native-библиотеку на С++!
Подобный путь был мне неприемлем.
Однако только после двух недель упорных поисков я почти случайно обратил внимание на пространство имен System.Reflection.Assembly, где довольно быстро нашел решение проблемы. Вот оно:

using System;
using System.Data;

namespace DirectoryReadPPC
{
  class Class1
  {
    static void Main(string[] args)
    {
      DateTime CurrTime = DateTime.Now;
      String CodePath = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
      // Aha, let's cut off the last slash and the file name with existention
      CodePath = CodePath.Substring(0, CodePath.LastIndexOf(@"\"));
      Console.WriteLine("Log started at:\n{0}", CurrTime);
      Console.WriteLine("Current OS:\n{0}", Environment.OSVersion); 
      Console.WriteLine("Current version of .Net:\n{0}",Environment.Version);
      // We'll show them, there we came from!
      Console.WriteLine("Current path:\n{0}",CodePath);
    }
  }
}

Надеюсь, этот код сможет помочь кому-то. Естественно, я не гарантирую его правильность и не несу ответственности за возможное некорректное исполнение данного кода:)))
Выражаю благодарность Сергею Конюхову aka gauss за его  упорное неверие, которое неизменно подвигало меня на новые поиски;)

29 ноября 2005

Комментарии [3]

#1
22:02, 2 янв 2006

по поводу "у класса Environment отсутствует статический метод CurrentDirectory" - вобще-то есть System.IO.Directory.GetCurrentDirectory

#2
18:23, 3 янв 2006

_grisha
У Compact Framework нету.
RTFM.

Прошло более 3 лет
#3
10:43, 18 июня 2009

а можно вместо

CodePath = CodePath.Substring(0, CodePath.LastIndexOf(@"\"));

использовать

Path.GetDirectoryName

http://msdn.microsoft.com/ru-ru/library/system.io.path.getdirectoryname.aspx

.Net DevelopmentСтатьи

Тема в архиве.