ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

.net core在Docker->Linux及Window平台环境变量的获取的兼容

2020-09-29 02:01:01  阅读:296  来源: 互联网

标签:core windows xxx EnvironmentVariableTarget Window Linux 进程 环境变量


如果说关于在Windows系统下,想要获取指定的环境变量的内容,这个在网上有很多相关的内容。

获取计算机的环境变量

Environment.GetEnvironmentVariable("name",EnvironmentVariableTarget.Machine)

获取用户的环境变量

Environment.GetEnvironmentVariable("name",EnvironmentVariableTarget.User)

 

但是跨平台之后,在linux中,就不是那么一回事了。

针对 EnvironmentVariableTarget 枚举按下 F12 可以看到如下内容。

 

 这两种方式都是针对windows平台的方法,不适用于 Mac 及 Linux环境。

所以目前只剩下一种方式,就是 EnvironmentVariableTarget  的枚举值 Process。

接下来就是具体如何实现,既能在windows系统读取到想要的环境变量,也能在docker容器下的Linux系统中读取到。

 

首先,修改代码,加入一行判断代码,判断当前系统环境是windows还是其他。

Environment.GetEnvironmentVariable("MysqlDb",RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? EnvironmentVariableTarget.Machine : EnvironmentVariableTarget.Process)

现在这样,就能保证windows系统平台下,使用 “machine” 的途径,而其他系统平台,则使用 “process”的途径

 

但是关于 process,从整个进程中关联到的环境变量中查找值,又还是有所限制。

Mac 与 Linux 系统里不支持计算机与用户环境变量获取,只能从启动该dotnet进程的父进程继承的或在dotnet进程本身范围内定义的所有环境变量的名称和值。一旦dotnet进程结束,这些后面的环境变量将不复存在。 

而如果想环境变量,保证是在同一个进程中被创建,同时也是被我们所读取的话,我这里找到的方式,是从 Dockerfile 下手。

 

修改Dockerfile

#设置 MySQL 连接字符串
ENV MysqlDb="Data Source=xxx.xxx.xxx.xxx;Database=test;User ID=root;Password=123456;pooling=true;port=3306;sslMode=None;CharSet=utf8;"

在dockerfile中写好脚本,在容器中创建我们要的环境变量。

这个时候,我们的.net core应用再去从进程中获取环境变量,就能读取到我们想要的值了。

 

标签:core,windows,xxx,EnvironmentVariableTarget,Window,Linux,进程,环境变量
来源: https://www.cnblogs.com/shapman/p/13747762.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有