2016-01-31 2 views
0

У меня есть библиотека классов, в которой есть текстовые файлы с помощью Build Action = Content. Эти текстовые файлы считываются функцией в библиотеке классов. Для того, чтобы получить расположение текстовых файлов, которые я использую это:Получение файла «Содержимое» DLL из веб-приложения

var filePath = System.IO.Path.Combine(
    AppDomain.CurrentDomain.BaseDirectory, 
    "AFolder", 
    "textFileName.txt"); 

var fileContent = System.IO.File.ReadAllText(filePath); 

Я успешно извлечь содержимое текстового файла, когда я назвал функцию от модульного тестирования. Текстовый файл находится в C:\MySolution\MyProject.Test\bin\Debug\AFolder\textFileName.txt.

У меня есть другое веб-приложение, которое ссылается на эту библиотеку классов. Когда я вызвал функцию для чтения текстового файла из веб-приложения, он не смог найти текстовый файл, потому что он пытался получить файл с C:\MySolution\MyProject.Web\AFolder\textFileName.txt, тогда как текстовый файл фактически находится в C:\MySolution\MyProject.Web\bin\AFolder\textFileName.txt.

Так что моя проблема заключается в вызове AppDomain.CurrentDomain.BaseDirectory не всегда работает. Что я должен использовать вместо этого, чтобы получить папку?

ответ

1

Найдено ответ от link on the right с помощью System.Reflection.Assembly.GetExecutingAssembly().CodeBase:

var libPath = System.IO.Path.GetDirectoryName(
    new Uri(
     System.Reflection.Assembly.GetExecutingAssembly().CodeBase 
    ).LocalPath 
); 

var filePath = System.IO.Path.Combine(
    libPath, 
    "AFolder", 
    "textFileName.txt"); 

var fileContent = System.IO.File.ReadAllText(filePath); 
0

Вы можете попробовать System.WebHttpRuntime.BinDirectory, чтобы получить физический путь к директории/bin для текущего приложения.

EDIT 1:

Другой способ получить без использования System.Web использует AppDomain.CurrentDomain.SetupInformation.PrivateBinPath, это property предоставляет список каталогов базовой директории приложения, которые зондировали для частных собраний.

+0

Мне нужно добавить ссылку на System.Web моей библиотеки классов? Я не хочу этого делать, если смогу. Библиотека классов должна иметь возможность работать за пределами веб-приложения. –

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