2009-12-01 3 views
3

Я пытаюсь получить полный путь к файлу в своем модульном тесте, который находится в папке моего проекта. я попытался с помощьюЧто такое .NET-эквивалент java's System.getProperty («user.dir»)?

Directory.GetCurrentDirectory(); 

но возвращает каталог, в котором мои тесты работают. Я хочу, чтобы каталог проекта (или раствора) без необходимости жестко кодировать его там. Затем я могу добавить последнюю часть имени файла. Нечто похожее на

System.getProperty("user.dir") 

в Java

ответ

0
string filePath = System.Reflection.Assembly.GetExecutingAssembly().Location; 
string folderPath = System.IO.Path.GetDirectoryName(filePath); 

Кроме того, это лучше помечать C# сообщения с выигрышными-формы, WPF или жерех-сети, так что мы можем сказать, что платформа вы работаете ,

+0

это получает текущий рабочий каталог, то есть, где выполняется тестирование, а не путь к проекту –

1
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 

Вы получите путь к самой тестируемой DLL тестовой панели.

Чтобы получить доступ к файлу в подпапке проекта, простейшая задача - отметить соответствующие файлы как Build Action = Content и Copy to Output Directory = Copy if newer. Если вы это сделаете, они будут скопированы в относительные папки под текущей сборкой при создании проекта. Затем вы можете вычислить физический путь относительно текущей сборки.

Например:

  • У вас есть текстовый файл, расположенный на <project root>\TestData\Data1.txt.
  • Когда вы строите проект в режиме отладки, он будет скопирован в <project root>\bin\Debug\TestData\Data1.txt.
  • Физический путь в вашем коде будет Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestData\Data1.txt").
+1

, который, как много накладных, просто ссылается на файл. Так ли большинство людей используют файлы тестовых данных в C#? У меня есть десятки файлов, некоторые большие, и кажется немного глупым, чтобы их скопировать и заставить их зависнуть в выходном каталоге –

+0

Я не знаю, что 'getProperty (« user.dir »)' делает в Java поэтому я не могу комментировать. В .NET, когда выполняется сборка, физически невозможно напрямую определить местоположение исходного кода. Там не может быть * никакого * исходного кода на машине, так как вы могли бы получить от него? Единственный способ получить нужные файлы - скопировать их из исходного кода в текущее место сборки. Отсюда мой ответ. –

Смежные вопросы