C# ProcessStartInfo.EnvironmentVariables和ProcessStartInfo.Environment之间有什么区别

C# ProcessStartInfo.EnvironmentVariables和ProcessStartInfo.Environment之间有什么区别,c#,.net-core,process,environment-variables,C#,.net Core,Process,Environment Variables,: 提供应用于此进程和子进程的环境变量的字符串字典 : 包含应用于此进程及其子进程的环境变量的通用字典 在.NET Framework应用程序上使用Environment属性与使用Environment Variables属性相同 在非.NET Framework应用程序上,ProcessStartInfo.EnvironmentVariables和ProcessStartInfo.Environment之间有什么区别?它们有不同的返回类型,但在其他方面没有功能上的区别 据介绍,.NET核心语言

:

提供应用于此进程和子进程的环境变量的字符串字典

:

包含应用于此进程及其子进程的环境变量的通用字典

在.NET Framework应用程序上使用Environment属性与使用Environment Variables属性相同


在非.NET Framework应用程序上,
ProcessStartInfo.EnvironmentVariables
ProcessStartInfo.Environment
之间有什么区别?

它们有不同的返回类型,但在其他方面没有功能上的区别


据介绍,.NET核心语言设计者希望使用标准的
IDictionary
,而不是原始
EnvironmentVariables
属性使用的有点陈旧的
StringDictionary
。他们无法在不破坏与.NET framework的兼容性的情况下更改现有属性的返回类型,因此他们添加了一个新的、大部分是冗余的属性。

换句话说,.NET核心团队最初开始尝试重新设计每个轮子,但后来被迫支持向后兼容性。这不是唯一的区别。我还没有做足够的调查来写一个正确的答案,但是当我在为一个ArgumentException(在Linux上)添加一个变量到EnvironmentVariables时遇到了这两个问题。使用环境解决了我的问题。更多信息请参见本讨论:我认为该链接中讨论的案例敏感性问题已不复存在。
Environment
EnvironmentVariables
在Windows上都不区分大小写,我相信它们在Linux上都区分大小写。