Environment data
dotnet --info output:
vscode ➜ /workspaces/dotnet $ dotnet --info
.NET SDK:
Version: 9.0.302
Commit: bb2550b9af
Workload version: 9.0.300-manifests.fadeff71
MSBuild version: 17.14.13+65391c53b
Runtime Environment:
OS Name: debian
OS Version: 12
OS Platform: Linux
RID: linux-arm64
Base Path: /usr/share/dotnet/sdk/9.0.302/
.NET workloads installed:
There are no installed workloads to display.
Configured to use loose manifests when installing new manifests.
Host:
Version: 9.0.7
Architecture: arm64
Commit: 3c298d9f00
.NET SDKs installed:
9.0.302 [/usr/share/dotnet/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 9.0.7 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 9.0.7 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
Other architectures found:
None
Environment variables:
Not set
global.json file:
Not found
Learn more:
https://aka.ms/dotnet/info
Download .NET:
https://aka.ms/dotnet/download
VS Code version:
Version: 1.103.2 (Universal)
Commit: 6f17636121051a53c88d3e605c491d22af2ba755
Date: 2025-08-20T16:45:34.255Z
Electron: 37.2.3
ElectronBuildId: 12035395
Chromium: 138.0.7204.100
Node.js: 22.17.0
V8: 13.8.500258-electron.0
OS: Darwin arm64 24.6.0
C# Extension version: 2.90.51
C# logs
C# output window contents:
2025-09-01 03:52:45.112 [trace] Activating C# Extension
2025-09-01 03:52:45.112 [info] Installing C# dependencies...
2025-09-01 03:52:45.112 [info]
2025-09-01 03:52:45.112 [info] Platform: linux, arm64, name=debian, version=12
2025-09-01 03:52:45.112 [info]
2025-09-01 03:52:45.112 [info] Downloading package 'Language server for Roslyn Copilot integration'
2025-09-01 03:52:45.112 [info] Failed at stage: downloadPackage
2025-09-01 03:52:45.112 [info] TypeError: Invalid URL
2025-09-01 03:52:45.112 [info]
2025-09-01 03:52:45.112 [debug] Extension vscode.configuration-editing does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.css-language-features does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.debug-auto-launch does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.debug-server-ready does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.emmet does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.extension-editing does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.git does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.git-base does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.github does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.grunt does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.gulp does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.html-language-features does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.ipynb does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.jake does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.json-language-features does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.markdown-language-features does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.markdown-math does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.merge-conflict does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension ms-vscode.js-debug does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension ms-vscode.vscode-js-profile-table does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.npm does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.php-language-features does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.references-view does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.search-result does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.terminal-suggest does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.tunnel-forwarding does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension vscode.typescript-language-features does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension dbaeumer.vscode-eslint does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension GitHub.copilot does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension GitHub.copilot-chat does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension GitHub.vscode-pull-request-github does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension ms-dotnettools.csdevkit does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension ms-dotnettools.csharp does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [debug] Extension ms-dotnettools.vscode-dotnet-runtime does not contribute csharpExtensionLoadPaths
2025-09-01 03:52:45.112 [trace] C# Extension activated in 33.479ms.
2025-09-01 03:52:45.916 [info] Locating .NET runtime version 9.0.1
2025-09-01 03:52:45.950 [info] Dotnet path: /usr/share/dotnet/dotnet
2025-09-01 03:52:45.950 [info] Activating C# + C# Dev Kit...
2025-09-01 03:52:45.972 [error] Microsoft.CodeAnalysis.LanguageServer client: couldn't create connection to server.
Error: Component DLL not found: /home/vscode/.vscode-server/extensions/ms-dotnettools.csharp-2.90.51-linux-arm64/.roslynCopilot/Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer.dll
at i0 (/home/vscode/.vscode-server/extensions/ms-dotnettools.csharp-2.90.51-linux-arm64/dist/extension.js:1203:9455)
at Function.setupDevKitEnvironment (/home/vscode/.vscode-server/extensions/ms-dotnettools.csharp-2.90.51-linux-arm64/dist/extension.js:1208:27174)
at Function.startServer (/home/vscode/.vscode-server/extensions/ms-dotnettools.csharp-2.90.51-linux-arm64/dist/extension.js:1208:21528)
at l (/home/vscode/.vscode-server/extensions/ms-dotnettools.csharp-2.90.51-linux-arm64/dist/extension.js:1208:15488)
at Q3.createConnection (/home/vscode/.vscode-server/extensions/ms-dotnettools.csharp-2.90.51-linux-arm64/dist/extension.js:58:11280)
at Q3.start (/home/vscode/.vscode-server/extensions/ms-dotnettools.csharp-2.90.51-linux-arm64/dist/extension.js:58:1231)
at Function.initializeAsync (/home/vscode/.vscode-server/extensions/ms-dotnettools.csharp-2.90.51-linux-arm64/dist/extension.js:1208:16003)
at oje (/home/vscode/.vscode-server/extensions/ms-dotnettools.csharp-2.90.51-linux-arm64/dist/extension.js:1208:38465)
Steps to reproduce
- Create a new dev container with the following
devcontainer.json:
{
"name": "C# (.NET)",
"image": "mcr.microsoft.com/devcontainers/dotnet:1-9.0-bookworm",
"remoteEnv": {
"HTTP_PROXY": "${localEnv:HTTP_PROXY}",
"HTTPS_PROXY": "${localEnv:HTTPS_PROXY}"
},
"customizations": {
"vscode": {
"extensions": [
"ms-dotnettools.csdevkit"
]
}
}
}
- Make sure your host system does not have HTTP_PROXY/HTTPS_PROXY set (i.e. environment variables needs to be unset).
- Reopen in dev container and wait for extensions to be installed.
- Create and open a new
helloworld.cs file to activate the C# extension.
Expected behavior
C# extension activates properly.
Actual behavior
C# extension fails to activate due to Invalid URL when trying to download the Roslyn Copilot Language Server (see log above for full details):
2025-09-01 03:52:45.112 [info] Downloading package 'Language server for Roslyn Copilot integration'
2025-09-01 03:52:45.112 [info] Failed at stage: downloadPackage
2025-09-01 03:52:45.112 [info] TypeError: Invalid URL
Additional context
I have tested that if I don't set HTTP_PROXY in the dev container, or if HTTP_PROXY is set to a valid proxy url, C# extension downloads the package and activates correctly.
Looking at the code, I believe the issue is how the system proxy url is obtained:
function getSystemProxyURL(requestURL: Url): string | undefined {
if (requestURL.protocol === 'http:') {
return process.env.HTTP_PROXY ?? process.env.http_proxy;
} else if (requestURL.protocol === 'https:') {
return process.env.HTTPS_PROXY ?? process.env.https_proxy ?? process.env.HTTP_PROXY ?? process.env.http_proxy;
}
return undefined;
}
export function getProxyAgent(requestURL: Url, proxy: string, strictSSL: boolean): Agent | undefined {
const proxyURL = proxy.length > 0 ? proxy : getSystemProxyURL(requestURL);
if (proxyURL === undefined) {
return undefined;
}
const proxyEndpoint = new URL(proxyURL);
...
}
The code checks if HTTP_PROXY is defined, and if not, returns undefined for getProxyAgent. But in my case, my HTTP_PROXY is defined, but is an empty string. The code ends up passing an empty string to new URL(proxyURL), most likely causing the Invalid URL error shown in the logs.
Why HTTP_PROXY may be set to empty
Certain team members on my team rely on proxy servers to get around restrictive network environments, and thus have HTTP_PROXY/HTTPS_PROXY set on their machines. To ensure the dev container can properly run apt-get and other commands that require network access, we want to propagate the host's environment variables to the dev container via removeEnv configuration in devcontainer.json.
The problem is not all team members need to use proxy servers, and thus in those cases HTTP_PROXY will be unset in the host system, causing the dev container to set HTTP_PROXY to empty.
Environment data
dotnet --infooutput:vscode ➜ /workspaces/dotnet $ dotnet --info .NET SDK: Version: 9.0.302 Commit: bb2550b9af Workload version: 9.0.300-manifests.fadeff71 MSBuild version: 17.14.13+65391c53b Runtime Environment: OS Name: debian OS Version: 12 OS Platform: Linux RID: linux-arm64 Base Path: /usr/share/dotnet/sdk/9.0.302/ .NET workloads installed: There are no installed workloads to display. Configured to use loose manifests when installing new manifests. Host: Version: 9.0.7 Architecture: arm64 Commit: 3c298d9f00 .NET SDKs installed: 9.0.302 [/usr/share/dotnet/sdk] .NET runtimes installed: Microsoft.AspNetCore.App 9.0.7 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 9.0.7 [/usr/share/dotnet/shared/Microsoft.NETCore.App] Other architectures found: None Environment variables: Not set global.json file: Not found Learn more: https://aka.ms/dotnet/info Download .NET: https://aka.ms/dotnet/downloadVS Code version:
C# Extension version: 2.90.51
C# logs
C# output window contents:
Steps to reproduce
devcontainer.json:{ "name": "C# (.NET)", "image": "mcr.microsoft.com/devcontainers/dotnet:1-9.0-bookworm", "remoteEnv": { "HTTP_PROXY": "${localEnv:HTTP_PROXY}", "HTTPS_PROXY": "${localEnv:HTTPS_PROXY}" }, "customizations": { "vscode": { "extensions": [ "ms-dotnettools.csdevkit" ] } } }helloworld.csfile to activate the C# extension.Expected behavior
C# extension activates properly.
Actual behavior
C# extension fails to activate due to Invalid URL when trying to download the Roslyn Copilot Language Server (see log above for full details):
Additional context
I have tested that if I don't set
HTTP_PROXYin the dev container, or ifHTTP_PROXYis set to a valid proxy url, C# extension downloads the package and activates correctly.Looking at the code, I believe the issue is how the system proxy url is obtained:
The code checks if
HTTP_PROXYis defined, and if not, returnsundefinedforgetProxyAgent. But in my case, myHTTP_PROXYis defined, but is an empty string. The code ends up passing an empty string tonew URL(proxyURL), most likely causing the Invalid URL error shown in the logs.Why HTTP_PROXY may be set to empty
Certain team members on my team rely on proxy servers to get around restrictive network environments, and thus have
HTTP_PROXY/HTTPS_PROXYset on their machines. To ensure the dev container can properly runapt-getand other commands that require network access, we want to propagate the host's environment variables to the dev container viaremoveEnvconfiguration indevcontainer.json.The problem is not all team members need to use proxy servers, and thus in those cases
HTTP_PROXYwill be unset in the host system, causing the dev container to setHTTP_PROXYto empty.