从Web应用程序获取DLL的“内容”文件

时间:2016-01-31 16:18:52

标签: c#

我有一个类库,其中包含一些Build Action = Content的文本文件。这些文本文件由类库中的函数读取。要获取文本文件的位置,我使用它:

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

我有另一个引用此类库的Web应用程序。当我调用该函数从Web应用程序读取文本文件时,它无法找到该文本文件,因为它试图从C:\MySolution\MyProject.Web\AFolder\textFileName.txt获取文件,而文本文件实际上在C:\MySolution\MyProject.Web\bin\AFolder\textFileName.txt。< / p>

所以我的问题是调用AppDomain.CurrentDomain.BaseDirectory并不总是有效。我应该使用什么来获取文件夹位置?

2 个答案:

答案 0 :(得分:1)

使用System.Reflection.Assembly.GetExecutingAssembly().CodeBase

link on the right找到答案
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);

答案 1 :(得分:0)

您可以尝试System.WebHttpRuntime.BinDirectory获取当前应用程序的/ bin目录的物理路径。

编辑1:

另一种不使用System.Web的方法是使用AppDomain.CurrentDomain.SetupInformation.PrivateBinPath,这个property提供应用程序基目录下的目录列表,这些目录被探测私有程序集。

相关问题