当前位置: 首页 > news >正文

.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);//获取应用程序所在目录(绝对,不受工作目录影响)

相关文章:

  • 太多脚本将会毁掉持续交付
  • java中的equals和==
  • Fcoin交易所的危险游戏!韭菜请远离!
  • mavne settings.xml
  • Ambari 2.6(HDP 2.6.5)安装记要
  • IP 地址 与 DNS
  • iOS 开发知识索引
  • 多线程多进程学习threading,锁,线程间数据状态读取。
  • Lombok使用详解(转)
  • 【JS基础】--位置距离小结
  • Java中泛型ClassT、T与Class?
  • 查询优化器
  • malloc(0)的返回值
  • linux安装mysql5.7.19
  • Python(生成执行文件)
  • 03Go 类型总结
  • css的样式优先级
  • ECS应用管理最佳实践
  • IP路由与转发
  • JavaScript 基本功--面试宝典
  • Laravel核心解读--Facades
  • Linux各目录及每个目录的详细介绍
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • uni-app项目数字滚动
  • uva 10370 Above Average
  • Webpack 4x 之路 ( 四 )
  • 理清楚Vue的结构
  • 前端临床手札——文件上传
  • 前端面试之CSS3新特性
  • 前端之React实战:创建跨平台的项目架构
  • 树莓派 - 使用须知
  • 突破自己的技术思维
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 找一份好的前端工作,起点很重要
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​一些不规范的GTID使用场景
  • (5)STL算法之复制
  • (70min)字节暑假实习二面(已挂)
  • (六)激光线扫描-三维重建
  • (四)JPA - JQPL 实现增删改查
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)【Hibernate总结系列】使用举例
  • (转)c++ std::pair 与 std::make
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Oracle存储过程编写经验和优化措施
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET MVC第三章、三种传值方式
  • .net 获取url的方法
  • .net 设置默认首页
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /etc/fstab和/etc/mtab的区别
  • @ConfigurationProperties注解对数据的自动封装
  • @NoArgsConstructor和@AllArgsConstructor,@Builder