.NET Core 中的路径问题

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

1.工作路径 WorkingDirectory

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

Environment.CurrentDirectory;
Directory.GetCurrentDirectory();

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

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

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

(2)通过dotnet 命令运行

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

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

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

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

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

2.结论

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏晓晨的专栏

Docker for Windows 使用 VMware WorkStation

1922
来自专栏dotnet core相关

这可能是最low的发布dotnet core站点到centos7教程

不得不说:我在chrome上写了好长一段,贴了23张图,然后一个crash。。我想说我电脑上的chrome已经crash太多次了 以后一定要搞离线编辑的。

693
来自专栏Java学习123

windows环境下 curl 安装和使用

3376
来自专栏小狼的世界

ZendStudio中设置SVN:ignore

使用ZendStudio开发SVN中的代码时,经常容易将 .project、.settings、.buildpath 这类的zend的工程文件提交上去,非常麻烦...

562
来自专栏Core Net

ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署

3436
来自专栏云计算教程系列

如何在CentOS 7上使用Nginx设置基本HTTP身份验证

Nginx是主动使用的领先Web服务器之一。它及其商业版Nginx Plus由Nginx,Inc。开发。

290
来自专栏和蔼的张星的图像处理专栏

4. TX2--配置无线连接。

配置无线连接当然是有用的,虽然在学习阶段可以把TX2插上键盘和鼠标当做一个pc机来用,但是一旦部署到项目中,再想修改程序或者启动引用去连接鼠标和键盘可能就不是那...

1354
来自专栏猿人谷

eclipse在Ubuntu 13.04下的安装过程及问题小记

一、eclipse安装过程 首先确保在安装eclipse之前已经安装好Java虚拟机 1. eclipse官网下载压缩包  下载地址:http://www.ec...

1816
来自专栏极客日常

利用Katacoda免费同步Docker镜像到Docker Hub

安装kubernetes的时候,我们需要用到 gcr.io/google_containers 下面的一些镜像,在国内是不能直接下载的。如果用 Self Hos...

2712
来自专栏Core Net

ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署

1743

扫码关注云+社区