用途:为 dotnet/runtime 仓库中由 src/tests/Common/testenvironment.proj 定义的具名 CoreCLR 测试场景生成 CoreRun 可消费的 dotenv 文件,供 corerun[.exe] -e <path-to-env> <managed-test.dll> 使用。场景表与默认值以该 proj 文件为准,不手工复制。
输入:必需一个来自 testenvironment.proj 中 TestEnvironment 项的场景名;可选提供 src/tests/ 下的测试 .csproj,以合并其有效 CLRTestEnvironmentVariable 及适用的 CLRTestBatchEnvironmentVariable 或 CLRTestBashEnvironmentVariable 项。还可指定目标 OS、架构、配置、运行时版本及输出路径。默认目标 OS 为当前主机,架构 x64,配置 Release,运行时 coreclr,输出到 artifacts/tmp/test-scenario-env/<canonical-scenario>.env;由 standalone-test-repro 调用时使用 repro 目录的 .env 路径。
工作流:先解析场景名,无精确匹配时用 ask_user 询问最接近的具体场景名,不静默输出空环境;按项目条件处理目标相关重名,拒绝超出托管桌面 CoreCLR 支持的场景。再用 MSBuild 评估:先使用 build-and-test 技能,调用仓库自举的 dotnet 执行 CreateTestEnvFile 目标。Windows 主机用 .\dotnet.cmd msbuild src\tests\Common\testenvironment.proj /t:CreateTestEnvFile /p:Scenario=<scenario> "/p:TestEnvFileName=<resolved-output><temporary.cmd-or-sh>" /p:TargetsWindows=<true-or-false> /p:RuntimeVariant=<variant>;非 Windows 主机用 ./dotnet.sh msbuild src/tests/Common/testenvironment.proj /t:CreateTestEnvFile ...。临时脚本扩展名与 TargetsWindows 由目标 OS 决定,跨编译亦然;未请求 RuntimeVariant 时省略;jitstress_random_1 等随机场景保留生成值。随后仅解析生成的赋值行(Windows set NAME=VALUE,非 Windows export NAME=VALUE),忽略 shebang 等;空值写为 NAME='',重名取最后值;将 shell 变量引用转为 CoreRun 的 ${NAME} 形式而不展开,保留 %d 等格式标记,保护字面 $ 需整体单引号并按规则转义;按 NAME=VALUE 逐行写出便携条目,遵循 src/coreclr/hosts/corerun/dotenv.cpp 的引号转义要求;转换后仅删除该临时脚本。若提供项目,按包装器顺序合并:场景变量、目标专用变量、通用 CLRTestEnvironmentVariable,后者覆盖同名前者(含覆盖为空)。不包含环境进程变量、CI 凭据或无关 MSBuild 属性,不留未求值表达式。最后校验场景存在于所选目标、比对与临时脚本的一致性、验证合并优先级、确认 corerun -e 可解析、确认输出位于 artifacts/tmp。最终报告规范场景、输出路径、目标 OS 与架构及变量名,合并时报告项目路径与被覆盖的名字,避免打印敏感值。限制:仅支持托管桌面 CoreCLR 场景;具体可用场景取决于 testenvironment.proj。