首页 > 编程语言 >Asp.Net Core 获取应用程序相关目录

Asp.Net Core 获取应用程序相关目录

时间:2024-06-21 15:43:04浏览次数:19  
标签:Core Asp string app ContentRootPath appDirectory Net public

原文链接:https://blog.csdn.net/hefeng_aspnet/article/details/135859719

在ASP.NET Core中,可以通过以下三种方式获取应用程序所在目录:

1、使用`AppContext.BaseDirectory`属性:
   string appDirectory = AppContext.BaseDirectory;

例如:D:\后端项目\testCore\test.WebApi\bin\Debug\net6.0\

2、使用`IHostEnvironment`服务: 在ASP.NET Core的启动文件(如Program.cs)中,可以通过依赖注入获取`IHostEnvironment`服务,并使用其`ContentRootPath`属性来获取应用程序所在目录:
   string appDirectory = hostEnvironment.ContentRootPath;

例如:D:\后端项目\testCore\test.WebApi\wwwroot

3、使用`IHostingEnvironment`服务: 在较早版本的ASP.NET Core中,可以使用`IHostingEnvironment`服务获取应用程序所在目录。方法与上述相似:
   string appDirectory = hostingEnvironment.ContentRootPath;

例如:D:\后端项目\testCore\test.WebApi\wwwroot

4、使用程序集信息获取typeof(Program)方式:

var executablePath = Assembly.GetEntryAssembly().Location;

string basePath2 =Path.GetDirectoryName(typeof(Program).Assembly.Location);

例如:D:\后端项目\testCore\test.WebApi\bin\Debug\net6.0\

5.依赖注入:

using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

public class Startup
{
    private readonly IHostEnvironment _hostEnvironment;

    public Startup(IHostEnvironment hostEnvironment)
    {
        _hostEnvironment = hostEnvironment;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // 添加其他服务

        string appDirectory = _hostEnvironment.ContentRootPath;

        // 使用 appDirectory 进行其他操作
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 配置中间件

        app.Run(async (context) =>
        {
            string appDirectory = env.ContentRootPath;

            await context.Response.WriteAsync($"Application Directory: {appDirectory}");
        });
    }
}

上面代码属NetCore早期版本,.NetCore3.1 后:

创建项目:

Startup中Configure自动注入IWebHostEnvironment:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Controller中直接注入即可:

private IWebHostEnvironment _evn;

public FileUploadController(IWebHostEnvironment evn)
{
    this._evn = evn;
}

使用:string webroot = _evn.WebRootPath;//拿到 wwwroot 路径

6、创建类方式:

1.先创建一个类:
public static class MyServiceProvider
    {
        public static IServiceProvider ServiceProvider
        {
            get; set;
        }
    }
2.Startup.cs中Configure方法中添加 :   

MyServiceProvider.ServiceProvider = app.ApplicationServices;

3.在需要用到程序路径的地方,引用:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
string path = MyServiceProvider.ServiceProvider.GetRequiredService<IHostingEnvironment>().ContentRootPath;  //.NET Core 3.1,IHostingEnvironment 要改为IHostEnvironment

 效果如下:

 

获取了路径:D:\\Project\\MyWebsite\\UI

4.如果需要获取UI下的wwwroot

路径方法得改一下,为
    static string path = MyServiceProvider.ServiceProvider.GetRequiredService<IHostingEnvironment>().WebRootPath;  //.NET Core 3.1,IHostingEnvironment 要改为IHostEnvironment

 

标签:Core,Asp,string,app,ContentRootPath,appDirectory,Net,public
From: https://www.cnblogs.com/Dongmy/p/18260650

相关文章

  • .NET Core的文件系统[3]:由PhysicalFileProvider构建的物理文件系统
    原文链接:https://blog.csdn.net/weixin_33795833/article/details/90324791ASP.NETCore应用中使用得最多的还是具体的物理文件,比如配置文件、View文件以及网页上的静态文件,物理文件系统的抽象通过PhysicalFileProvider这个FileProvider来实现,该类型定义在NuGet包“Microsoft.Ext......
  • C# 之 .net core -- 创建项目
    原文链接:https://www.cnblogs.com/hkzw/p/12001420.html一、新建一个Web的应用程序 二、选择项目的基本信息(.netcoer2.2 和带有试图控制器的程序)在这里创建的是MVC模式,也可以用其他的,比如空的、web应用程序。跟平常开的的那种表面上差别不大,总之需要什么选什么 ......
  • .NET 6 Swagger+JWT 配置
    1.1封装一个SwaggerExtend类(包含JWT配置)///<summary>///Swagger静态类///</summary>publicstaticclassSwaggerExtend{///<summary>///添加服务:swagger///</summary>///<paramname=&qu......
  • Anthropic 推出 Claude 3.5 Sonnet,称新模型优于 GPT-4 Omni
    近日,人工智能研究公司Anthropic宣布推出其最新的语言模型Claude3.5Sonnet,并声称该模型在多个方面优于OpenAI的GPT-4Omni。这一消息在人工智能领域引起了广泛关注和讨论。本文将详细介绍Claude3.5Sonnet的技术特点、应用前景以及其与GPT-4Omni的对比。http://www.z......
  • Anthropic 的 Claude 3.5 Sonnet 在企业人工智能竞赛中胜过 OpenAI 和谷歌
    全球领先的人工智能研究公司Anthropic宣布推出Claude3.5Sonnet,这是一款集无与伦比的性能和成本效益于一身的开创性人工智能模型。克劳德模型系列的最新迭代产品将彻底改变企业人工智能的格局,以低于竞争对手的成本为企业提供最先进的功能。Anthropic联合创始人Daniel......
  • 【车载网络协议】【Ethernet】【ARP】【第二章-字段介绍】
    一、报文类型ARP协议中的请求(Request)和响应(Reply)是通过特定的字段来进行交换信息的。下面是对ARP请求和响应字段的详细介绍。二、请求报文硬件类型(HardwareType):指定网络接口的硬件类型,例如以太网通常使用1表示以太网。协议类型(ProtocolType):指定网络层协议类型,例如IPv4......
  • 【车载网络协议】【Ethernet】【ARP】【第三章-缓存介绍】
    一、概念简介ARP(AddressResolutionProtocol)是一种用于将网络层地址(IP地址)解析为数据链路层地址(MAC地址)的协议。ARPCache是ARP协议在计算机或网络设备上维护的一个重要数据结构,用于存储IP地址与对应的MAC地址之间的映射关系。本文将介绍ARPCache的作用、工作原理......
  • Unet已死,Transformer当立!详细解读基于DiT的开源视频生成大模型EasyAnimate
    DiffusionModels视频生成-博客汇总前言:最近阿里云PIA团队开源了基于DiffusionTransformer结构的视频生成模型EasyAnimate,并且提出了专门针对视频的sliceVAE,对于目前基于Unet结构的视频生成最好如SVD形成了降维打击,不论是生成质量、生成时长上都是遥遥领先。这篇博客详细......
  • mac苹果窗口辅助工具:Magnet for mac 2.14.0中文免激活版
    Magnet是一款针对MacOS系统的窗口管理工具软件。它能够帮助用户更加高效地管理和组织桌面上的窗口,通过简单的快捷键操作,可以将窗口自动调整到指定的位置和大小,实现多窗口快速布局。Magnet还支持多显示器环境下的窗口管理,可以让用户更加轻松地在多屏幕之间切换和布局窗口。......
  • Windows的Gitlab Runner搭配的PowerShell脚本:发布传统ASP.NET Web应用程序
    简介GitlabRunner在Windows上运行之后,我们在.gitlab-ci.yml中编写script语句,思路和Linux是一样。但是考虑到Windows的特点,为了让程序员少接触一些知识点,以及给未来执行作业的时候预留更多的操作空间。简单说就是未来修改执行作业时候的逻辑,但是每个软件仓库根目录下的.gitlab-ci......