.NET Core 中的路径问题

.NET Core 应用程序相对于以前的.NET Framework 应用程序在启动运行的方式上有一定的差异,今天就来谈一谈这个获取应用程序启动路径的问题。

1.工作路径 WorkingDirectory

下面的两种方式都可以获取工作路径,结果都是一样的:

Environment.CurrentDirectory;
Directory.GetCurrentDirectory();

其实所谓的工作路径就是我们应用程序的启动路径,所以我们平时所说的获取应用程序的启动路径,也是通过上面的方式。

(1)我们通过VS F5直接运行

1529820341662

VS会先编译我们的项目,输出到Debug\对应的sdk版本 目录下,然后以这个目录作为工作路径,启动我们的应用程序。

(2)通过dotnet 命令运行

我们在项目根目录,执行 dotnet run命令:

1529820460067

我们执行 dotnet run命令来启动时,对于程序的工作路径就是执行命令的路径,所以说,获取到的路径变化了。但是我们通过dotnet run命令运行的应用程序文件实际所在的目录也是和上面的目录一样的,即:Debug\对应的sdk版本,我们可以通过代码来测试一下:

1529820714691

新加的代码是获取程序集所在的路径,可以发现也是在 Debug\对应的sdk版本 目录下的。

我们将程序发布到 D:\test 目录下

1529821435227

可以看到,前两种方式获取到的都是执行dotnet命令所在的目录即工作目录,后一种方式是获取到的我们应用程序所在的目录。

2.结论

通过上面的测试,我们可以得出结论,.NET Core 应用程序获取工作路径/启动路径,就是获取的执行dotnet命令时所在的目录,所以当我们在Linux等系统部署时,设置守护进程时,记得一定要将工作路径设置为程序文件所在的目录,不然应用程序获取到的路径将不会是应用程序文件所在的目录,当我们在应用程序里设置了一些相对路径,诸如读取配置文件,写日志(Log4net、NLog),将会与我们的预期不一样。因为相对路径,是默认相对于应用程序的工作路径的。

Environment.CurrentDirectory; //获取应用程序工作目录
Directory.GetCurrentDirectory();//获取应用程序工作目录(和上面的方式效果是一样的)

Path.GetDirectoryName(typeof(Program).Assembly.Location);//获取应用程序所在目录(绝对,不受工作目录影响)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嵌入式程序猿

带你走进飞思卡尔Kinetis Flashloader (2)

这一节主要介绍下在主机和Kinetis Flashloader 之间的数据包传输协议,包括不同类型的包,带数据的命令包和不带数据的命令包。 Flashload...

3418
来自专栏游戏杂谈

Unity中调用DLL库

DLL —— Dynamic Link Library(动态链接库文件),这里以Window平台为例。

723
来自专栏玄魂工作室

asp.net core开发环境准备

1.1 安装sdk和运行时 浏览器打开网址https://www.microsoft.com/net/download, 到.Net Core下载页面。 ? ...

2823
来自专栏乐沙弥的世界

Linux 前后台作业切换及脱机管理

    Linux bash shell单一终端界面下,我们经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他的任务。所...

701
来自专栏Python小屋

Python通过WMI读取主板BIOS信息

Windows Management Instrumentation (WMI,Windows管理规范) 是Web-Based Enterprise Manag...

38210
来自专栏蓝天

nohup、&、setsid、fork和fg、bg究竟有啥区别?

在后台运行的进程不一定是守护进程!一个进程要成为守护进程,必须做到以下两点:

872
来自专栏哲学驱动设计

分享 MSDN 下载工具(Word/PDF)

给大伙分享一个最近出炉的 MSDN 到 Word/PDF 转换器。我已经用它转换了 WPF、VSPackage、WWF 等 MSDN 章节为 PDF。 介绍 下...

22610
来自专栏androidBlog

Git config 使用说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/de...

910
来自专栏hbbliyong

Visual Studio 2013 添加新项缺失[ADO.NET 实体数据模型]解决方法

      之前使用在Vs2012下使用SQLite+EF建的项目在VS2013下不能运行了,我把以前的*.edmx删除后准备重新添加以下 .可是,在添加新项目...

2916
来自专栏Ken的杂谈

ASP.NET Core 应用发布与部署指南/教程

项目创建完成后,需要修改Program.cs文件 手动指定启动的Url为:http://*:5000

2513

扫码关注云+社区