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


    如果说关于在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应用再去从进程中获取环境变量,就能读取到我们想要的值了。

  • 相关阅读:
    正则表达式学习笔记(3)字符类
    一个Service/Functional/Persistence的简单框架
    在Visual Studio 2008环境下安装Boost
    你需要掌握的三种编程语言
    abstract、virtual、override 和 new
    WINCE下编译STLPort
    VS2008环境下编译使用SGI STL(using stlport 5.2.1)
    QT For WinCE, Visual Studio 2008环境的搭建
    VC6.0、VS2005、VS2008安装STLport5.2.1
    Ubuntu 11.10 安装nginx+php5+mysql 的web服务器
  • 原文地址:https://www.cnblogs.com/shapman/p/13747762.html
Copyright © 2020-2023  润新知