微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

我怎样才能做到这一点?

解决方法

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

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

>创建应用程序项目和类库项目.
>通过解决方案资源管理器中应用程序的上下文菜单中的Properties-> Add-> Reference,从应用程序项目添加对类库项目的引用:



>在类库项目中创建需要读取的文件,然后将其“复制到输出目录”属性设置为“始终复制”或“通过解决方案资源管理器中的”属性窗格复制(如果较新):


>从类库项目或应用程序中(要么使用完全相同的代码),相对于Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)引用您的文件.例如:

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之前,您可以使用相对于System.IO.Directory.GetCurrentDirectory()的文件路径,但这在.NET Core应用程序中不起作用,因为the initial working directory for .NET Core apps is the source directory instead of the build directory,显然是因为这是ASP所需要的.NET Core.)
>继续从您的应用程序代码调用您的库代码,一切都会正常工作.例如.:

using Microsoft.AspNetCore.Mvc;
using MyLibrary;

namespace AspCoreAppWithLib.Controllers
{
    public class HelloWorldController : Controller
    {
        [HttpGet("/read-file")]
        public string ReadFileFromLibrary()
        {
            return MyClass.ReadFoo();
        }
    }
}

原文地址:https://www.jb51.cc/csharp/97017.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐