@@ -9,6 +9,9 @@ CODEX_ENV_RUST_VERSION=${CODEX_ENV_RUST_VERSION:-}
99CODEX_ENV_GO_VERSION=${CODEX_ENV_GO_VERSION:- }
1010CODEX_ENV_SWIFT_VERSION=${CODEX_ENV_SWIFT_VERSION:- }
1111CODEX_ENV_PHP_VERSION=${CODEX_ENV_PHP_VERSION:- }
12+ CODEX_ENV_DOTNET_VERSION=${CODEX_ENV_DOTNET_VERSION:- }
13+
14+ DEFAULT_DOTNET_ROOT=${DOTNET_ROOT:-/ usr/ share/ dotnet}
1215
1316echo " Configuring language runtimes..."
1417
@@ -73,3 +76,45 @@ if [ -n "${CODEX_ENV_PHP_VERSION}" ]; then
7376 mise use --global " php@${CODEX_ENV_PHP_VERSION} "
7477 fi
7578fi
79+
80+ if [ -n " ${CODEX_ENV_DOTNET_VERSION} " ]; then
81+ desired=" ${CODEX_ENV_DOTNET_VERSION} "
82+ current_sdk=$( dotnet --list-sdks | awk ' NR==1 {print $1}' )
83+ echo " # .NET SDK: ${desired} (default: ${current_sdk:- none} )"
84+
85+ custom_root=" ${HOME} /.dotnet/${desired} "
86+ mkdir -p " ${custom_root} "
87+
88+ install_args=()
89+ match_pattern=" ^${desired} "
90+ if [[ " ${desired} " =~ ^[0-9]+\. [0-9]+$ ]]; then
91+ install_args=(--channel " ${desired} " )
92+ match_pattern=" ^${desired} \."
93+ else
94+ install_args=(--version " ${desired} " )
95+ fi
96+
97+ needs_install=1
98+ if [ -x " ${custom_root} /dotnet" ]; then
99+ if " ${custom_root} /dotnet" --list-sdks | awk ' {print $1}' | grep -Eq " ${match_pattern} " ; then
100+ needs_install=0
101+ fi
102+ fi
103+
104+ if [ " ${needs_install} " -eq 1 ]; then
105+ tmp_script=$( mktemp)
106+ curl -sSL https://dot.net/v1/dotnet-install.sh -o " ${tmp_script} "
107+ chmod +x " ${tmp_script} "
108+ " ${tmp_script} " " ${install_args[@]} " --install-dir " ${custom_root} " --no-path
109+ rm -f " ${tmp_script} "
110+ fi
111+
112+ export DOTNET_ROOT=" ${custom_root} "
113+ export DOTNET_MULTILEVEL_LOOKUP=0
114+ case " :${PATH} :" in
115+ * :" ${DOTNET_ROOT} " :* ) ;;
116+ * ) export PATH=" ${DOTNET_ROOT} :${PATH} " ;;
117+ esac
118+ else
119+ export DOTNET_ROOT=" ${DEFAULT_DOTNET_ROOT} "
120+ fi
0 commit comments