获取Web项目引用的类库项目中的相对文件路径

时间:2014-08-21 06:35:58

标签: c# asp.net

我有一个引用类库的ASP.Net网站。在类库中,我需要将文件读入内存。

在我的类库的顶层,有一个名为EmailTemplateHtml的文件夹,其中包含我想要读取的文件MailTemplate.html

我该怎么做?

5 个答案:

答案 0 :(得分:20)

在Visual Studio中,您可以配置库,以便将文件复制到依赖于它的任何项目的构建目录中。然后,您可以在运行时获取构建目录的路径,以便读取文件。

从新解决方案开始逐步说明:

  1. 创建应用程序项目和类库项目。
  2. 通过属性 - > 添加 - > 引用 > 解决方案资源管理器中应用程序上下文菜单中的参考:

    Screenshot showing the *Reference* option Screenshot showing *Reference Explorer*

  3. 在您需要阅读的类库项目中创建文件,然后将其复制到输出目录属性设置为始终复制通过解决方案资源管理器中的属性窗格复制更新:

    Screenshot showing the *Copy to Output Directory* option

  4. 类库项目您的应用程序(将使用完全相同的代码),引用相对于{{1}的文件}。例如:

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

    (请注意,在.NET Core之前,您可以使用相对于using System.Reflection; using System.IO; namespace MyLibrary { public class MyClass { public static string ReadFoo() { var buildDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var filePath = buildDir + @"\foo.txt"; return File.ReadAllText(filePath); } } } 的文件路径,但这在.NET Core应用程序中不起作用,因为the initial working directory for .NET Core apps is the source directory instead of the build directory,显然是因为这是ASP.NET Core需要。)

  5. 继续从您的应用程序代码中调用您的库代码,一切都会正常工作。 e.g:

    System.IO.Directory.GetCurrentDirectory()

答案 1 :(得分:3)

public static string ExecutionDirectoryPathName
{
     var dirPath = Assembly.GetExecutingAssembly().Location;
     dirPath = Path.GetDirectoryName(dirPath);
     return Path.GetFullPath(Path.Combine(dirPath, "\EmailTemplateHtml\MailTemplate.html"));

}

答案 2 :(得分:2)

如果要查找装配所在的路径;从程序集中,然后使用以下代码:

 public static string ExecutionDirectoryPathName
 {
   get
     {
         var dirPath = Assembly.GetExecutingAssembly().Location;
         dirPath = Path.GetDirectoryName(dirPath);
         return dirPath + @"\";
     }
 }

答案 3 :(得分:0)

我不确定您对类库中的文件夹的含义,但如果您希望按如下方式构建路径,则可以使用当前工作目录:

System.IO.Directory.GetCurrentDirectory()

然后,您可以使用Path.Combine()方法构建文件路径。

答案 4 :(得分:0)

您可以在类库中添加带有要设置的一些静态方法/属性的静态类。在启动应用程序方法中从Global.ascx.cs设置值。现在您可以获取类库的值。

希望这很清楚。 编码愉快