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

本文关键字:内容 文件 DLL Web 应用程序 获取 | 更新日期: 2023-09-27 18:32:34

我有一个类库,其中包含一些带有"生成操作=内容"的文本文件。这些文本文件由类库中的函数读取。要获取文本文件的位置,我使用它:

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

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

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

使用 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);

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

编辑 1:

不使用 System.Web 的另一种方法是使用 AppDomain.CurrentDomain.SetupInformation.PrivateBinPath ,此属性提供应用程序基目录下探测专用程序集的目录列表。