update laptop config

This commit is contained in:
greyweather committed 2026-08-14 21:33:40 +01:00
1 parent 733a94f15f
commit efde36f8f3
338 files changed
+45564 -122

No files matched your search

@@ -0,0 +1 @@
export declare const dotnetCoreAcquisitionExtensionId = "ms-dotnettools.vscode-dotnet-runtime";
@@ -0,0 +1,334 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* * Licensed to the .NET Foundation under one or more agreements.
* The .NET Foundation licenses this file to you under the MIT license.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.dotnetCoreAcquisitionExtensionId = void 0;
exports.dotnetCoreAcquisitionExtensionId = 'ms-dotnettools.vscode-dotnet-runtime';
//# sourceMappingURL=DotnetCoreAcquisitionId.js.map
// SIG // Begin signature block
// SIG // MIIpkwYJKoZIhvcNAQcCoIIphDCCKYACAQExDzANBglg
// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
// SIG // knF7xsvBDxMr0Wd3DmPlMYk6r5hfsO8WPki2OPAM+veg
// SIG // gg3lMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
// SIG // AAAAHDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMC
// SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
// SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
// SIG // b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg
// SIG // Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjQw
// SIG // ODA4MjEzNjIzWhcNMzUwNjIzMjIwNDAxWjBfMQswCQYD
// SIG // VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
// SIG // cmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQgV2luZG93
// SIG // cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwggIiMA0GCSqG
// SIG // SIb3DQEBAQUAA4ICDwAwggIKAoICAQCafWt9J8F2Ki6u
// SIG // 49U0/8wrbe78VPggo/uwZIn0vwdoFyhlOzlfUl0SRj9c
// SIG // hbOaeo6bGIuHGMxeegFdABJphI1fME9pbz1OQYTd8Fd9
// SIG // B6mDyGBI+T91l39JFw/X741H9RgLVxK4ifMOwCzWlRJv
// SIG // UbOHjwNGbGB2gm1OZAVCUA17++oWnznEIHRQgNyN82LX
// SIG // 819rzsMfO7gzmgrsijkWYofXN803/kywuUGC8oVTAZw1
// SIG // xBwzq72sPdg0siKqXYEVqbn86gxctXoFY5KF2YW/vaWf
// SIG // YXlMzV014TqF83sYemMwC+H5QVpvgXNYUMhEnpxLwSc5
// SIG // 1ftubt4e+444DFGOOPll0OLvanXQ3v1OUngGikb74m5o
// SIG // uM+0EaS72bJWtAj4jlBs9NA6ObH5AtBMJbEs3zN/vAPa
// SIG // 7MhVToFg1T87ffDiT9hKGhDqvBhPRgqDdou/+AthQsH3
// SIG // 9QUgkyVmTtVnK9jLXiROlMRlfooQPJzedWDyg9nWBqHs
// SIG // K170cwv9R6FHkr5WX9Jn/RhxLb75GyVUUaOjwX9Jnebf
// SIG // O1W9ZjP3yKdXsqcmsZl5IKXAcLspbDqtpElTiecAT6Gh
// SIG // LLCZHjHCpxLrrvvlCnQx5UtA7bGIzdEJzrnL03UrHb4c
// SIG // yjkoyRd11aq/X9gveOS10+a8SiB1CBAwXDWFOgSgwx+q
// SIG // 36SjjgkopQIDAQABo4IBRjCCAUIwDgYDVR0PAQH/BAQD
// SIG // AgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQe
// SIG // gt8O14yz1wI0gw7aq61lua+47DAZBgkrBgEEAYI3FAIE
// SIG // DB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8G
// SIG // A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
// SIG // A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
// SIG // b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
// SIG // ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
// SIG // MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
// SIG // b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
// SIG // MTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBD
// SIG // X/jfP7vplIw7XPW7aAOdkQXNF1Q0gTEATKsbueoVxwcL
// SIG // nLVFrNVwagwzCBQh7vXOmP1BfkzfBCII57owKSmJhz+H
// SIG // +BDNwEUppc66ReaMzicdAQORVL9Y5qXX/9mW6qbwsZcb
// SIG // /xtUeCo60ppqjx87OooMN2+0U24+wcSEvHziJMGFkIQd
// SIG // ny45YPtx0qwxjxSIaSCVlWpjCEe2u9jhqJ43X+Oa7KcK
// SIG // iB7sp2VOGr8va7gf0YYW8JvnzG/ATHnCGk5pKIcfxGWe
// SIG // RjVnDeqE2FtxtgTNwd2M51pJfbeLIT+tHzLnvtpLHRxl
// SIG // khPBFU3UphlHY9I61HOOpRlRSSEhd/zMXMZ5TXj9Socq
// SIG // /mc0+BLbPyO5rn6Wi5y2pczEdsyLoRjgFlrMHrG47Rc5
// SIG // FVBYA0dklvdNyNFypWzxAOqvHqRxifa6MYfOZ7BCnATV
// SIG // MOEnKevCgqkqRQWiosldbJHfpfFOdFjXjzG/Qc89DnwE
// SIG // mpfL+bEBvg1tNZDfiPkSlCGzOSOdMCY4h8pkBTQ7G6Gx
// SIG // cfSPeZghBD1O31Gd1U/xzlFW5Jl+5bSAv3kALuRjvH7v
// SIG // nHhEzMm726MVDOHWDQvj86KFMX5gtA7ikcAdtW1/fmnL
// SIG // iAZMSJuBHdztfcNVS6AO1DTlLie8+jUNlv/qu3J3zj5d
// SIG // kFS+KpYAm5VE9r5kKZZVdzCCByAwggUIoAMCAQICEzMA
// SIG // AAEibAYzo9FStt0AAAAAASIwDQYJKoZIhvcNAQEMBQAw
// SIG // XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
// SIG // dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
// SIG // IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
// SIG // DTI2MDMwNTE5NTgyNFoXDTI3MDMwMzE5NTgyNFowdDEL
// SIG // MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
// SIG // EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
// SIG // c29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9z
// SIG // b2Z0IENvcnBvcmF0aW9uMIICIjANBgkqhkiG9w0BAQEF
// SIG // AAOCAg8AMIICCgKCAgEAnhZbtyCbTJtA3AlBeRCh1Cof
// SIG // y9OmtScr8V9mlWmqcgAccAyDcMZkktDEeTm6r1+EyoWF
// SIG // 9iHO/hzYTY8WYO1CVEzGpkQ3Jp0t0B2DnqKrIL3i9Zhk
// SIG // LLwalkThItrQXvD68Ca2HeLXn5XfNZGkNXJ287lLqLt3
// SIG // 7gBzbnSZwAluUqj5mRxeeuSI+48DHiT8VOSR7DwLP2Nd
// SIG // Wlj8SPOZFRFHnI3zjKSMeaE15zYvVJ8OwUr/0kq135Mg
// SIG // MhcqrvjzfcpiFi5jgD2gJyfkMRkWfQ+4ycuH2StEcTtR
// SIG // pT02o4fcYG8+0g0ngu9M/EaPJoDtyJqwg7+CnSc7U+XZ
// SIG // wonlVyzEsQqlopHys55qAmgKhubJHcpS+QhYvE0FSgEm
// SIG // 9kEdDI0tX6l9BaTpIIm7u/pthD846d+kpIGdU11XwDt4
// SIG // +QY0WU/1V2lktGZPnjZ/P0kH/FPy0UaZ7iV4ZDllQTSB
// SIG // quXsOhLCiEJuQ7Xq+TU0iifIFJaosAymdR7mkxFp9T5o
// SIG // DdGGBfWr/Hw03lWxD0HtOMr+O6PJWKZXRTNAfZFjnJCH
// SIG // NFPoVzQv/qZw1VIdn4zfibTGiyk0znIlzNhdLbdwm3Sj
// SIG // vnAppQs0roTfWnkNphhJ0GN791d1tebmlKWBC02Dk3k8
// SIG // A1ZGCVwmSv8zUV8VN/K0Pi8MSznkVTbxGIdibNJ7l9EC
// SIG // AwEAAaOCAb4wggG6MA4GA1UdDwEB/wQEAwIHgDAfBgNV
// SIG // HSUEGDAWBgorBgEEAYI3PQYBBggrBgEFBQcDAzAMBgNV
// SIG // HRMBAf8EAjAAMB0GA1UdDgQWBBSfMrW3QLbYu4n2imys
// SIG // bT8G75SYkjBUBgNVHREETTBLpEkwRzEtMCsGA1UECxMk
// SIG // TWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
// SIG // dGVkMRYwFAYDVQQFEw0yMzA4NjUrNTA2OTY1MB8GA1Ud
// SIG // IwQYMBaAFB6C3w7XjLPXAjSDDtqrrWW5r7jsMGoGA1Ud
// SIG // HwRjMGEwX6BdoFuGWWh0dHA6Ly93d3cubWljcm9zb2Z0
// SIG // LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFdpbmRv
// SIG // d3MlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjQu
// SIG // Y3JsMHcGCCsGAQUFBwEBBGswaTBnBggrBgEFBQcwAoZb
// SIG // aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j
// SIG // ZXJ0cy9NaWNyb3NvZnQlMjBXaW5kb3dzJTIwQ29kZSUy
// SIG // MFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNydDANBgkqhkiG
// SIG // 9w0BAQwFAAOCAgEAmFhSMo035OTrzq8QPKAEto20uvz9
// SIG // Awyy4qmbMsunWPb34nfj9rmsLsoHqFcJLxqjDtFA1rrq
// SIG // bMvFUP+RcPhl38e5/QH76FYN9Kx5vPN7IlkPfxmmsgod
// SIG // tfZW3mq5Uc4sqk2aM+0obwNt30aCrNyPS5V1ljh9XeQn
// SIG // hbbsl9A+KEQVNaUEvoow0r/OPGYi8Ko4oEO1wWmIjzVU
// SIG // CPMTJJFXiHOgee+a1bMaixea0BTLl2YcFPgVxG1WuLZl
// SIG // QM2PYHj913Tj/i/zsFkFfN2eqaE/0VukDKpDaYH+z3N6
// SIG // Ehihk6a99gMByLrcJlmhGo/GrMg1IxQAcyQRugB/KboE
// SIG // 3+ONK+tbjZcOpg16aXzmVcrh7h/d7jc2iDb7lv2P8hGE
// SIG // g3U78ukp+RsFqxyjQNt1EdfAG7uwdrjng4Yk6uvaHj5i
// SIG // hAD44xzE0Aa2VF/lQcL/r+zCQa/ANLOM4PwGPgPy5jeb
// SIG // 3kKXAI04/R/tpihEKG0U1BygQ1tU9X12EG9SXVkFwyvS
// SIG // J+i8fBGljhMWJLQHHhn88QvTaAo8QVG/G2ukDkFzWqq8
// SIG // 0JQ8xsKsS7IgpTfh+oefKQXxRdjqEmi5YKYodFkX6e7E
// SIG // xnXbKemo2wAF+1UiP1t9qNhuymgyHNY4qJOuAZwUaHsL
// SIG // SpzZtzctLpZieiICGQOQzgMU/bT7RLTYcB5obIcxghsG
// SIG // MIIbAgIBATB2MF8xCzAJBgNVBAYTAlVTMR4wHAYDVQQK
// SIG // ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMDAuBgNVBAMT
// SIG // J01pY3Jvc29mdCBXaW5kb3dzIENvZGUgU2lnbmluZyBQ
// SIG // Q0EgMjAyNAITMwAAASJsBjOj0VK23QAAAAABIjANBglg
// SIG // hkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYB
// SIG // BAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGC
// SIG // NwIBFTAvBgkqhkiG9w0BCQQxIgQgVsuxeiu/mE7RBNSy
// SIG // sBER5I5mGydtygI5e/jUuWhLOiIwQgYKKwYBBAGCNwIB
// SIG // DDE0MDKgFIASAE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0
// SIG // dHA6Ly93d3cubWljcm9zb2Z0LmNvbTANBgkqhkiG9w0B
// SIG // AQEFAASCAgApz8PpeipIYNNh2W1H4jyoxs8PNXUG0nV3
// SIG // za0RG7gNE+lMb0pUB/WOPXJqdYhgoeeTp1AH2vMxP8wE
// SIG // pE3qJe7/vEzglNIkB0EiwA657O4WfqsAoZZNlxuQHTOZ
// SIG // q1Mc0FK8+BmQIlWQsGbdfg00ZgqQ+BOjpVxPQiXkA+fm
// SIG // dZK8wBCNWBjU6ZDDyMSm0W0oPXsz8uFnbv3ZTSSJEbYz
// SIG // i4UfftplQX5fIUxo2mb6n9M/6hOm7GWDqgTaUxhJz/8x
// SIG // EM3Vm6txUtfJyj0+IEua2MCXhCH3blZ0hdLLI0XNtR27
// SIG // OlJHY5fpr1qdh4hxla99RYBaiVlPshAkWpj7XMkWHKkS
// SIG // J+6kmHGsN55cTjdwbQsYAWLo596n7o7iFzmK2v19EIsO
// SIG // mGuK+WosWdm/i9+rJ5iIfwy+hByekxbsdQNDVOwo1lwE
// SIG // wlUECzGtBynw4vu/JQMkKlxg1aL9/5LN/XhDXYvxEnrK
// SIG // Rp6UvF4qBdmxEhzzDTUgqKat8FFFczHImVowc8GVwARj
// SIG // hPInRbeva700ZpRusvThLEgfr89Jank1HZIRTYEieLb9
// SIG // 7gNIN/shiLKxfnJxvgaNQr89lYdTPz3fb/Flb2nv8l1P
// SIG // WwaOoSoe0NXiY0Ps09lZpIqW0mDolWRS3H3XIOUDS2Nf
// SIG // w9+HNHFtgT8ZhEX1mttJ0+97bznzf3p9paGCF7Awghes
// SIG // BgorBgEEAYI3AwMBMYIXnDCCF5gGCSqGSIb3DQEHAqCC
// SIG // F4kwgheFAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsq
// SIG // hkiG9w0BCRABBKCCAUkEggFFMIIBQQIBAQYKKwYBBAGE
// SIG // WQoDATAxMA0GCWCGSAFlAwQCAQUABCCe2Q6ZAfxXWHZP
// SIG // YHuSzPzsaCYauXf6yenbJYeow80mYAIGahCo93xwGBMy
// SIG // MDI2MDYxMDAwMDUxMy4wMThaMASAAgH0oIHZpIHWMIHT
// SIG // MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
// SIG // bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
// SIG // cm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNy
// SIG // b3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQx
// SIG // JzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjoyQTFBLTA1
// SIG // RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUt
// SIG // U3RhbXAgU2VydmljZaCCEf4wggcoMIIFEKADAgECAhMz
// SIG // AAACEKvN5BYY7zmwAAEAAAIQMA0GCSqGSIb3DQEBCwUA
// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1
// SIG // MDgxNDE4NDgxMloXDTI2MTExMzE4NDgxMlowgdMxCzAJ
// SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
// SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
// SIG // ZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29m
// SIG // dCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG
// SIG // A1UECxMeblNoaWVsZCBUU1MgRVNOOjJBMUEtMDVFMC1E
// SIG // OTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
// SIG // cCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
// SIG // MIICCgKCAgEAjcc4q057ZwIgpKu4pTXWLejvYEduRf+1
// SIG // mIpbiJEMFWWmU2xpip+zK7xFxKGB1CclUXBU0/ZQZ6LG
// SIG // 8H0gI7yvosrsPEI1DPB/XccGCvswKbAKckngOuGTEPGk
// SIG // 7K/vEZa9h0Xt02b7m2n9MdIjkLrFl0pDriKyz0QHGpdh
// SIG // 93X6+NApfE1TL24Vo0xkeoFGpL3rX9gXhIOF59EMnTd2
// SIG // o45FW/oxMgY9q0y0jGO0HrCLTCZr50e7TZRSNYAy2lyK
// SIG // bvKI2MKlN1wLzJvZbbc//L3s1q3J6KhS0KC2VNEImYdF
// SIG // gVkJej4zZqHfScTbx9hjFgFpVkJl4xH5VJ8tyJdXE9+v
// SIG // U0k9AaT2QP1Zm3WQmXedSoLjjI7LWznuHwnoGIXLiJMQ
// SIG // zPqKqRIFL3wzcrDrZeWgtAdBPbipglZ5CQns6Baj5Mb6
// SIG // a/EZC9G3faJYK5QVHeE6eLoSEwp1dz5WurLXNPsp0VWp
// SIG // lpl/FJb8jrRT/jOoHu85qRcdYpgByU9W7IWPdrthmyfq
// SIG // eAw0omVWN5JxcogYbLo2pANJHlsMdWnxIpN5YwHbGEPC
// SIG // uosBHPk2Xd9+E/pZPQUR6v+D85eEN5A/ZM/xiPpxa8dJ
// SIG // Z87BpTvui7/2uflUMJf2Yc9ZLPgEdhQQo0LwMDSTDT48
// SIG // y3sV7Pdo+g5q+MqnJztN/6qt1cgUTe9u+ykCAwEAAaOC
// SIG // AUkwggFFMB0GA1UdDgQWBBSe42+FrpdF2avbUhlk86BL
// SIG // SH5kejAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtT
// SIG // NRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3
// SIG // Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3Nv
// SIG // ZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5j
// SIG // cmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBo
// SIG // dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Nl
// SIG // cnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El
// SIG // MjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1Ud
// SIG // JQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIH
// SIG // gDANBgkqhkiG9w0BAQsFAAOCAgEAvs4rO3oo8czOrxPq
// SIG // nnSEkUVq718QzlrIiy7/EW7JmQXsJoFxHWUF0Ux0PDyK
// SIG // FDRXPJVv29F7kpJkBJJmcQg5HQV7blUXIMWQ1qX0KdtF
// SIG // QXI/MRL77Z+pK5x1jX+tbRkA7a5Ft7vWuRoAEi02HpFH
// SIG // 5m/Akh/dfsbx8wOpecJbYvuHuy4aG0/tGzOWFCxMMNhG
// SIG // AIJ4qdV87JnY/uMBmiodlm+Gz357XWW5tg3HrtNZXuQ0
// SIG // tWUv26ud4nGKJo/oLZHP75p4Rpt7dMdYKUF9AuVFBwxY
// SIG // ZYpvgk12tfK+/yOwq84/fjXVCdM83Qnawtbenbk/lnbc
// SIG // 9KsZom+GnvA4itAMUpSXFWrcRkqdUQLN+JrG6fPBoV8+
// SIG // D8U2Q2F4XkiCR6EU9JzYKwTuvL6t3nFuxnkLdNjbTg2/
// SIG // yv2j3WaDuCK5lSPgsndIiH6Bku2Ui3A0aUo6D9z9v+XE
// SIG // uBs9ioVJaOjf/z+Urqg7ESnxG0/T1dKci7vLQ2XNgWFY
// SIG // O+/OlDjtGoma1ijX4m14N9qgrXTuWEGwgC7hhBgp3id/
// SIG // LAOf9BSTWA5lBrilsEoexXBrOn/1wM3rjG0hIsxvF5/Y
// SIG // OK78mVRGY6Y7zYJ+uXt4OTOFBwadPv8MklreQZLPnQPt
// SIG // iwop4rlLUYaPCiD4YUqRNbLp8Sgyo9g0iAcZYznTuc+8
// SIG // Q8ZIrgwwggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZ
// SIG // AAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQG
// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
// SIG // cnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9v
// SIG // dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0y
// SIG // MTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJ
// SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
// SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
// SIG // ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
// SIG // dCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG
// SIG // 9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL
// SIG // 1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4X
// SIG // YDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY
// SIG // 6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhu
// SIG // je3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7
// SIG // M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928
// SIG // jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+
// SIG // tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCG
// SIG // MFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39
// SIG // IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+A
// SIG // utuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDy
// SIG // t0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDq
// SIG // hFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrX
// SIG // Y28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH
// SIG // 29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLE
// SIG // hReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3
// SIG // PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQF
// SIG // AgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8
// SIG // RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJl
// SIG // pxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30B
// SIG // ATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jv
// SIG // c29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5o
// SIG // dG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGC
// SIG // NxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8G
// SIG // A1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/o
// SIG // olxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZF
// SIG // aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
// SIG // cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu
// SIG // Y3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+
// SIG // aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0
// SIG // cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJ
// SIG // KoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5y
// SIG // S/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1
// SIG // OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2Lpyp
// SIG // glYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM
// SIG // 9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9Ak
// SIG // vUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6L
// SIG // GYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmR
// SIG // sqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2
// SIG // zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyx
// SIG // TkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGO
// SIG // WhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJ
// SIG // Xk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FB
// SIG // SX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+
// SIG // 57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq
// SIG // 8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cir
// SIG // Ooo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGby
// SIG // oYIDWTCCAkECAQEwggEBoYHZpIHWMIHTMQswCQYDVQQG
// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
// SIG // cnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJl
// SIG // bGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsT
// SIG // Hm5TaGllbGQgVFNTIEVTTjoyQTFBLTA1RTAtRDk0NzEl
// SIG // MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy
// SIG // dmljZaIjCgEBMAcGBSsOAwIaAxUAOsyf2b6riPKnnXlI
// SIG // gIL2f53PUsKggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET
// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
// SIG // aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt
// SIG // cCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAO3S4N4w
// SIG // IhgPMjAyNjA2MDkxODU4MzhaGA8yMDI2MDYxMDE4NTgz
// SIG // OFowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA7dLg3gIB
// SIG // ADAKAgEAAgIYrwIB/zAHAgEAAgITiDAKAgUA7dQyXgIB
// SIG // ADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMC
// SIG // oAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3
// SIG // DQEBCwUAA4IBAQAyqwqN9PdZlA4h+Dqtf1TdiC2Bp3ik
// SIG // Yn2tUtfrkqVBWVn5t0kMw3zk9DwaIWy7lDqOCq37QJ7h
// SIG // YCfi8+La4ohv/yeQoKSQ8E2wxN3/Hj1P1pI/FsXFlJSl
// SIG // Q3ES+bUC+JR3EosJu73txiyhv74oZDrmiwMNVg7V6EmH
// SIG // ezfZg+Y6nArfwUu+p5yWGx9hDGZX3UvbcU21DWiH0w1t
// SIG // 1Hr+WI2mu1j2bKa3+Taj6bFboWSFEwbLEF/I/CsO3oY+
// SIG // 7bHNUvPsVJ6YBNjIsbqWShnQYg8XS2gbkmrE3bnHNABA
// SIG // ctnNJo5EJqZ8io/4C4Cw4i1NTfYv8ZobZhzWGPXZQNbh
// SIG // lxEEMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMx
// SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
// SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh
// SIG // bXAgUENBIDIwMTACEzMAAAIQq83kFhjvObAAAQAAAhAw
// SIG // DQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzEN
// SIG // BgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgg0ND
// SIG // 8SLJ5OcVR8sP6n4MAhiFfNB+dX3roa4Fs48DQvAwgfoG
// SIG // CyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCDD1SHufsjz
// SIG // Y59S1iHUQY9hnsKSrJPg5a9Mc4YnGmPHxjCBmDCBgKR+
// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAC
// SIG // EKvN5BYY7zmwAAEAAAIQMCIEIH1MAgCiUNvw/aCckFok
// SIG // vc8O+FMQXNWfx302v6OEI0bqMA0GCSqGSIb3DQEBCwUA
// SIG // BIICAH3z9sGo4nXN7C/o/59BdQ2R1ivGbaFVSBH0sTwR
// SIG // iMMpRJI9KYQLeXS7evUgHkElGOTMs4mDPuHyOfQz1+Rq
// SIG // MMCqKmoBASoN400+HQiaVCwPHdMZwh2UqPve2vtB0N0/
// SIG // Bd5U6G/L6eSvaCGSOsV+FuPEfvfuFI6bycLhKxpb3GvA
// SIG // C6j5jH6TaTbM+nmOM6J++qFungAJNEuZvWD7cbPgpmDm
// SIG // QttaGUz/5LoQfVuNxvh5MB9YJMxsRbzh6uzXpVlLwpAw
// SIG // msEALPL4Vh60nVTEHxQuXXjZtFGEVZH/+e6N7yUxSgKn
// SIG // 5C85km6prI/4HTcafdO0a25bcv4vIiZXQ06nRn5n4Oys
// SIG // 86VDmEtPG8Jv1bX56gqYCtJB0BC7Dli2c6X0Fzhc9slD
// SIG // syT75CB7I1y7sJMPY3iCa8HbDs4RQ/Zvve1CfoTRL0FO
// SIG // Xsj/otyj1exmV/5hcBNVy5mggLrPcZ9Qg76rDuVO5jrh
// SIG // U6xA0BzXMsYAmxocBwVKCyugBP0pnkT7MR79UCeUeNDV
// SIG // esGRDlnVZtgEL3q+lWARPZU/rcVn97f/hn5Jbt4AgQRN
// SIG // EsKBxkD4E2dDqJN9Qy777pdOvnDcCsBcNmDq+hJveOc0
// SIG // tAVGpbDzeyunGu2575gKC4YxfGqQXeZ99kWqGyKs4J/2
// SIG // 481/TNTa4n/rrQZ41B1q/iEwVDQx
// SIG // End signature block
@@ -0,0 +1 @@
{"version":3,"file":"DotnetCoreAcquisitionId.js","sourceRoot":"","sources":["../src/DotnetCoreAcquisitionId.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEnF,QAAA,gCAAgC,GAAG,sCAAsC,CAAC"}
@@ -0,0 +1,70 @@
import * as vscode from 'vscode';
import { DotnetInstallMode, EventStream, IDotnetSearchContext, IEventStream } from 'vscode-dotnet-runtime-library';
/**
* Tool name constants matching those in package.json
*/
export declare namespace ToolNames {
const installSdk = "install_dotnet_sdk";
const listVersions = "list_available_dotnet_versions_to_install";
const recommendedSdkVersion = "recommended_dotnet_sdk_version";
const listInstalledVersions = "list_installed_dotnet_versions";
const findPath = "find_dotnet_executable_path";
const uninstallSystemSdk = "uninstall_system_dotnet_sdk";
const uninstallVSCodeRuntime = "uninstall_vscode_owned_dotnet_runtime";
const getSettingsInfo = "get_settings_info_for_dotnet_installation_management";
}
/**
* Determines whether a version string fully specifies an SDK patch version (e.g. "10.0.106"),
* as opposed to a partial version ("10", "10.0"), a feature band ("10.0.1xx"), or a wildcard.
* Only fully-specified versions can meaningfully mismatch the patch that actually gets installed.
*/
export declare function isFullySpecifiedSdkVersion(version: string | undefined, eventStream: IEventStream): version is string;
/**
* Builds the `IDotnetSearchContext` the Language Model tools use to query `dotnet.availableInstalls`.
* Exported so tests can assert the tool opts in to the findPath fallback (see `fallbackToFindPathInstalls`)
* without having to drive the full command end to end.
*/
export declare function buildAvailableInstallsSearchContext(mode: DotnetInstallMode, dotnetExecutablePath?: string): IDotnetSearchContext;
/**
* From a list of installed SDK versions, returns the highest fully-specified patch that shares the
* same major.minor and feature band as the requested version, or undefined if none match.
* This identifies the patch the Linux package manager actually installed when the requested one was unavailable.
*/
export declare function highestPatchInSameFeatureBand(requestedVersion: string, installedVersions: string[], eventStream: IEventStream): string | undefined;
/**
* Computes the note appended to a successful SDK install result when the Linux package manager installed a
* different patch than the one requested, or '' when no note is warranted.
*
* The note is emitted only when ALL of these hold:
* - the install happened on Linux (the distro package manager only offers the latest patch in a feature band),
* - the requested version fully specifies a patch (e.g. "10.0.106"),
* - the requested patch is NOT among the installed SDKs, and
* - a different, higher patch in the same feature band IS installed (the substitute the package manager chose).
*
* Extracted as a pure function (the only side effect is version-parse event posting) so the conditional logic
* can be unit-tested without performing a real install.
*
* @param installedSdkVersions The SDK versions visible after the install, or undefined when that query failed.
*/
export declare function computeLinuxPatchMismatchNote(platform: NodeJS.Platform, requestedVersion: string | undefined, installedSdkVersions: string[] | undefined, eventStream: IEventStream): string;
/**
* Normalizes the requested SDK version for the install platform.
*
* Linux distro package managers only expose the .1xx feature band, so a bare major ("6") or major.minor ("6.0")
* request must be converted to the major.minor.1xx feature band (e.g. "6.0.1xx") before the distro install is
* attempted. On Windows and macOS the version is returned unchanged, because their installers can target an
* exact patch. Versions that already specify a patch or feature band are returned unchanged on every platform.
*
* Extracted as a pure function (taking `platform` explicitly rather than reading `process.platform`, and posting
* only version-parse events) so the platform-specific normalization can be unit-tested without performing a real
* install or stubbing the global platform.
*
* @param version The requested version (e.g. "6", "6.0", "6.0.301", "6.0.1xx").
* @param platform The target platform; only 'linux' triggers feature-band normalization.
*/
export declare function resolveSdkVersionForInstall(version: string, platform: NodeJS.Platform, eventStream: IEventStream): string;
/**
* Registers all Language Model Tools for the .NET Install Tool extension.
* These tools enable AI agents (like GitHub Copilot) to help users manage .NET installations.
*/
export declare function registerLanguageModelTools(context: vscode.ExtensionContext, eventStream: EventStream): void;
@@ -0,0 +1 @@
{"version":3,"file":"LanguageModelTools.js","sourceRoot":"","sources":["../src/LanguageModelTools.ts"],"names":[],"mappings":"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 truncated
@@ -0,0 +1,7 @@
/**
* Comprehensive information for the AI agent about the .NET Install Tool extension.
* This explains settings, architecture, installation types, and useful tricks.
*
* Extracted into its own file to keep LanguageModelTools.ts focused on tool logic.
*/
export declare const settingsInfoContent = "\n# .NET Install Tool - Guide\n\n## Overview\nThe .NET Install Tool is a VS Code extension that manages .NET installations. It serves two distinct purposes:\n1. **For VS Code Extensions**: Automatically installs .NET runtimes that other extensions (C#, C# DevKit, Unity, Bicep, etc.) need to run their internal components\n2. **For Users**: Provides commands to find and install .NET SDKs system-wide for development\n\n---\n\n## Installation Types\n\n### LOCAL (Extension-Managed) Runtime Installs\n- Small, isolated .NET runtime installs stored in VS Code's extension data folder\n- NOT on the system PATH, NOT visible via `dotnet --list-runtimes`\n- Used solely by VS Code extensions to run their internal components\n- Auto-managed; users rarely need to interact with these\n- The extension's uninstall list ONLY shows these local installs for runtimes\n\n### GLOBAL/Admin SDK Installs (system-wide)\n- System-wide .NET SDK installs (includes runtimes)\n- Typical Locations: Windows: `%ProgramFiles%\\dotnet` (admin required) | macOS: `/usr/local/share/dotnet` (.pkg) | Linux: `/usr/lib/dotnet` or `/usr/share/dotnet` (package manager; officially supported: Ubuntu + RHEL; community distros may work; WSL is not supported)\n\n- Requires administrator/sudo privileges; users must accept elevation prompts\n- IS on the system PATH after installation\n- Visible via `dotnet --list-sdks` and `dotnet --list-runtimes`\n- Use \"Install .NET SDK System-Wide\" command for this\n\n---\n\n## existingDotnetPath Setting (Commonly Misunderstood)\n\n### What It Does\nControls which .NET runtime VS Code **extensions** use to run their internal components.\n\n### What It Does NOT Do\n- Does NOT change what .NET the user's code runs on\n- Does NOT affect `dotnet build` or `dotnet run` commands\n- Does NOT change a project's target framework\n\n### When Users Need This\n- Extensions fail to start with \"could not find .NET runtime\" errors\n- Corporate/restricted environments where the extension cannot auto-download .NET\n- Air-gapped machines without internet or PowerShell script execution restrictions\n- User wants extensions to use a specific pre-installed .NET version\n\n**IMPORTANT:** If a user wants to pin which SDK their PROJECT uses (for `dotnet build`, `dotnet run`, etc.), existingDotnetPath is the WRONG setting. They should use `global.json` instead \u2014 see the \"I want to use a local/repo-specific SDK\" scenario below.\n\nSetting names and formats:\n- `dotnetAcquisitionExtension.existingDotnetPath` \u2014 per-extension:\n```json\n[{ \"extensionId\": \"ms-dotnettools.csharp\", \"path\": \"C:\\\\Program Files\\\\dotnet\\\\dotnet.exe\" }]\n```\n- `dotnetAcquisitionExtension.sharedExistingDotnetPath` \u2014 all extensions:\n```json\n\"C:\\\\Program Files\\\\dotnet\\\\dotnet.exe\"\n```\n\n---\n\n## How to See What's Installed\n\n**Extension-Managed Local Installs:** Run the \"Uninstall .NET\" command \u2014 the dropdown shows all extension-managed installs.\n\n**System-Wide Global Installs:** Run `dotnet --list-sdks` and `dotnet --list-runtimes` in terminal, or use the listInstalledVersions tool.\n\n**listInstalledVersions Tool:** Calls `dotnet.availableInstalls` to scan SDKs/runtimes for a given dotnet executable. If no path provided, it uses PATH (typically global install). Returns version, architecture, and directory for each install.\n\n---\n\n## Uninstall Notes\n\n- The uninstall list only shows extension-managed installs, not system-wide ones\n- **Trick:** To uninstall a global SDK not in the list, first install the SAME version via the extension (this registers it), then it appears in the uninstall list\n- Global SDK uninstall requires the same admin/elevated privileges as installing\n\n---\n\n## Version Selection\n\nCheck `global.json` first \u2014 if present, install `sdk.version` (respecting rollForward). Otherwise, latest LTS.\n\nSDK and runtime share major.minor but differ in patch:\n\n| SDK | Includes Runtime |\n|---------|-----------------|\n| 8.0.100 | 8.0.0 |\n| 8.0.204 | 8.0.4 |\n\nInstalling an SDK always includes the corresponding runtime.\n\n---\n\n## global.json paths (.NET 10+)\n\nFor repo-local SDK resolution, use the `paths` property in global.json:\n```json\n{\n \"sdk\": {\n \"version\": \"10.0.100\",\n \"paths\": [\".dotnet\", \"$host$\"]\n }\n}\n```\n- First matching SDK wins\n- Only works with SDK commands (`dotnet run`, `dotnet build`), NOT with native apphost\n- The host `dotnet` must be .NET 10+\n- Ref: https://learn.microsoft.com/dotnet/core/tools/global-json#paths\n\n---\n\n## Common Scenarios\n\n- **\"I want to develop .NET applications\"** - Install an SDK globally via \"Install .NET SDK System-Wide.\" This provides the `dotnet` CLI for build, run, test, and publish.\n- **\"I want a local/repo-specific SDK (not global)\"** - Use the `paths` property in global.json (.NET 10+ required) \u2014 see section above. DO NOT use existLine truncated
@@ -0,0 +1,473 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Licensed to the .NET Foundation under one or more agreements.
* The .NET Foundation licenses this file to you under the MIT license.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.settingsInfoContent = void 0;
/**
* Comprehensive information for the AI agent about the .NET Install Tool extension.
* This explains settings, architecture, installation types, and useful tricks.
*
* Extracted into its own file to keep LanguageModelTools.ts focused on tool logic.
*/
exports.settingsInfoContent = `
# .NET Install Tool - Guide
## Overview
The .NET Install Tool is a VS Code extension that manages .NET installations. It serves two distinct purposes:
1. **For VS Code Extensions**: Automatically installs .NET runtimes that other extensions (C#, C# DevKit, Unity, Bicep, etc.) need to run their internal components
2. **For Users**: Provides commands to find and install .NET SDKs system-wide for development
---
## Installation Types
### LOCAL (Extension-Managed) Runtime Installs
- Small, isolated .NET runtime installs stored in VS Code's extension data folder
- NOT on the system PATH, NOT visible via \`dotnet --list-runtimes\`
- Used solely by VS Code extensions to run their internal components
- Auto-managed; users rarely need to interact with these
- The extension's uninstall list ONLY shows these local installs for runtimes
### GLOBAL/Admin SDK Installs (system-wide)
- System-wide .NET SDK installs (includes runtimes)
- Typical Locations: Windows: \`%ProgramFiles%\\dotnet\` (admin required) | macOS: \`/usr/local/share/dotnet\` (.pkg) | Linux: \`/usr/lib/dotnet\` or \`/usr/share/dotnet\` (package manager; officially supported: Ubuntu + RHEL; community distros may work; WSL is not supported)
- Requires administrator/sudo privileges; users must accept elevation prompts
- IS on the system PATH after installation
- Visible via \`dotnet --list-sdks\` and \`dotnet --list-runtimes\`
- Use "Install .NET SDK System-Wide" command for this
---
## existingDotnetPath Setting (Commonly Misunderstood)
### What It Does
Controls which .NET runtime VS Code **extensions** use to run their internal components.
### What It Does NOT Do
- Does NOT change what .NET the user's code runs on
- Does NOT affect \`dotnet build\` or \`dotnet run\` commands
- Does NOT change a project's target framework
### When Users Need This
- Extensions fail to start with "could not find .NET runtime" errors
- Corporate/restricted environments where the extension cannot auto-download .NET
- Air-gapped machines without internet or PowerShell script execution restrictions
- User wants extensions to use a specific pre-installed .NET version
**IMPORTANT:** If a user wants to pin which SDK their PROJECT uses (for \`dotnet build\`, \`dotnet run\`, etc.), existingDotnetPath is the WRONG setting. They should use \`global.json\` instead — see the "I want to use a local/repo-specific SDK" scenario below.
Setting names and formats:
- \`dotnetAcquisitionExtension.existingDotnetPath\` — per-extension:
\`\`\`json
[{ "extensionId": "ms-dotnettools.csharp", "path": "C:\\\\Program Files\\\\dotnet\\\\dotnet.exe" }]
\`\`\`
- \`dotnetAcquisitionExtension.sharedExistingDotnetPath\` — all extensions:
\`\`\`json
"C:\\\\Program Files\\\\dotnet\\\\dotnet.exe"
\`\`\`
---
## How to See What's Installed
**Extension-Managed Local Installs:** Run the "Uninstall .NET" command — the dropdown shows all extension-managed installs.
**System-Wide Global Installs:** Run \`dotnet --list-sdks\` and \`dotnet --list-runtimes\` in terminal, or use the listInstalledVersions tool.
**listInstalledVersions Tool:** Calls \`dotnet.availableInstalls\` to scan SDKs/runtimes for a given dotnet executable. If no path provided, it uses PATH (typically global install). Returns version, architecture, and directory for each install.
---
## Uninstall Notes
- The uninstall list only shows extension-managed installs, not system-wide ones
- **Trick:** To uninstall a global SDK not in the list, first install the SAME version via the extension (this registers it), then it appears in the uninstall list
- Global SDK uninstall requires the same admin/elevated privileges as installing
---
## Version Selection
Check \`global.json\` first — if present, install \`sdk.version\` (respecting rollForward). Otherwise, latest LTS.
SDK and runtime share major.minor but differ in patch:
| SDK | Includes Runtime |
|---------|-----------------|
| 8.0.100 | 8.0.0 |
| 8.0.204 | 8.0.4 |
Installing an SDK always includes the corresponding runtime.
---
## global.json paths (.NET 10+)
For repo-local SDK resolution, use the \`paths\` property in global.json:
\`\`\`json
{
"sdk": {
"version": "10.0.100",
"paths": [".dotnet", "$host$"]
}
}
\`\`\`
- First matching SDK wins
- Only works with SDK commands (\`dotnet run\`, \`dotnet build\`), NOT with native apphost
- The host \`dotnet\` must be .NET 10+
- Ref: https://learn.microsoft.com/dotnet/core/tools/global-json#paths
---
## Common Scenarios
- **"I want to develop .NET applications"** - Install an SDK globally via "Install .NET SDK System-Wide." This provides the \`dotnet\` CLI for build, run, test, and publish.
- **"I want a local/repo-specific SDK (not global)"** - Use the \`paths\` property in global.json (.NET 10+ required) — see section above. DO NOT use existingDotnetPath.
- **"C# extension won't start / can't find .NET"** → Check \`dotnet --info\` in terminal. If missing, install SDK globally. If a RUNTIME is installed but not detected, set existingDotnetPath or sharedExistingDotnetPath.
- **"Extension installed .NET but I can't use it in terminal"** - Extension-managed runtimes are LOCAL and not on PATH. For terminal/CLI usage, install globally.
- **"I want to use a different .NET version for my project"** - NOT existingDotnetPath. Create \`global.json\` in the project root or install the desired SDK globally.
- **"Which dotnet does the C# extension use?"** - Use the findDotNetPath tool. It searches in order: existingDotnetPath setting - PATH - DOTNET_ROOT - extension-managed local installs.
---
## Additional Settings
- **installTimeoutValue**: Seconds to wait for downloads (default: 600). Increase for slow connections.
- **proxyUrl**: HTTP proxy URL for corporate firewalls.
---
## .NET Hives Architecture
.NET supports multiple installation "hives" (locations). Extension-managed local installs do not conflict with global system installs.
- The \`dotnet\` executable typically only sees installs in its own folder
- \`dotnet.findPath\` shows which hive extensions like C# DevKit will use
- \`dotnet.availableInstalls\` lists installs in a specific hive when given an executable path
`;
//# sourceMappingURL=SettingsInfoContent.js.map
// SIG // Begin signature block
// SIG // MIIpZgYJKoZIhvcNAQcCoIIpVzCCKVMCAQExDzANBglg
// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
// SIG // 7nMqSGwZslPefCM2xYqey8hN3lZdgIReehAuWjGchRag
// SIG // gg3WMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
// SIG // AAAAHDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMC
// SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
// SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
// SIG // b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg
// SIG // Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjQw
// SIG // ODA4MjEzNjIzWhcNMzUwNjIzMjIwNDAxWjBfMQswCQYD
// SIG // VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
// SIG // cmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQgV2luZG93
// SIG // cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwggIiMA0GCSqG
// SIG // SIb3DQEBAQUAA4ICDwAwggIKAoICAQCafWt9J8F2Ki6u
// SIG // 49U0/8wrbe78VPggo/uwZIn0vwdoFyhlOzlfUl0SRj9c
// SIG // hbOaeo6bGIuHGMxeegFdABJphI1fME9pbz1OQYTd8Fd9
// SIG // B6mDyGBI+T91l39JFw/X741H9RgLVxK4ifMOwCzWlRJv
// SIG // UbOHjwNGbGB2gm1OZAVCUA17++oWnznEIHRQgNyN82LX
// SIG // 819rzsMfO7gzmgrsijkWYofXN803/kywuUGC8oVTAZw1
// SIG // xBwzq72sPdg0siKqXYEVqbn86gxctXoFY5KF2YW/vaWf
// SIG // YXlMzV014TqF83sYemMwC+H5QVpvgXNYUMhEnpxLwSc5
// SIG // 1ftubt4e+444DFGOOPll0OLvanXQ3v1OUngGikb74m5o
// SIG // uM+0EaS72bJWtAj4jlBs9NA6ObH5AtBMJbEs3zN/vAPa
// SIG // 7MhVToFg1T87ffDiT9hKGhDqvBhPRgqDdou/+AthQsH3
// SIG // 9QUgkyVmTtVnK9jLXiROlMRlfooQPJzedWDyg9nWBqHs
// SIG // K170cwv9R6FHkr5WX9Jn/RhxLb75GyVUUaOjwX9Jnebf
// SIG // O1W9ZjP3yKdXsqcmsZl5IKXAcLspbDqtpElTiecAT6Gh
// SIG // LLCZHjHCpxLrrvvlCnQx5UtA7bGIzdEJzrnL03UrHb4c
// SIG // yjkoyRd11aq/X9gveOS10+a8SiB1CBAwXDWFOgSgwx+q
// SIG // 36SjjgkopQIDAQABo4IBRjCCAUIwDgYDVR0PAQH/BAQD
// SIG // AgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQe
// SIG // gt8O14yz1wI0gw7aq61lua+47DAZBgkrBgEEAYI3FAIE
// SIG // DB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8G
// SIG // A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
// SIG // A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
// SIG // b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
// SIG // ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
// SIG // MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
// SIG // b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
// SIG // MTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBD
// SIG // X/jfP7vplIw7XPW7aAOdkQXNF1Q0gTEATKsbueoVxwcL
// SIG // nLVFrNVwagwzCBQh7vXOmP1BfkzfBCII57owKSmJhz+H
// SIG // +BDNwEUppc66ReaMzicdAQORVL9Y5qXX/9mW6qbwsZcb
// SIG // /xtUeCo60ppqjx87OooMN2+0U24+wcSEvHziJMGFkIQd
// SIG // ny45YPtx0qwxjxSIaSCVlWpjCEe2u9jhqJ43X+Oa7KcK
// SIG // iB7sp2VOGr8va7gf0YYW8JvnzG/ATHnCGk5pKIcfxGWe
// SIG // RjVnDeqE2FtxtgTNwd2M51pJfbeLIT+tHzLnvtpLHRxl
// SIG // khPBFU3UphlHY9I61HOOpRlRSSEhd/zMXMZ5TXj9Socq
// SIG // /mc0+BLbPyO5rn6Wi5y2pczEdsyLoRjgFlrMHrG47Rc5
// SIG // FVBYA0dklvdNyNFypWzxAOqvHqRxifa6MYfOZ7BCnATV
// SIG // MOEnKevCgqkqRQWiosldbJHfpfFOdFjXjzG/Qc89DnwE
// SIG // mpfL+bEBvg1tNZDfiPkSlCGzOSOdMCY4h8pkBTQ7G6Gx
// SIG // cfSPeZghBD1O31Gd1U/xzlFW5Jl+5bSAv3kALuRjvH7v
// SIG // nHhEzMm726MVDOHWDQvj86KFMX5gtA7ikcAdtW1/fmnL
// SIG // iAZMSJuBHdztfcNVS6AO1DTlLie8+jUNlv/qu3J3zj5d
// SIG // kFS+KpYAm5VE9r5kKZZVdzCCBxEwggT5oAMCAQICEzMA
// SIG // AAEj1Y8CQwYD7i4AAAAAASMwDQYJKoZIhvcNAQEMBQAw
// SIG // XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
// SIG // dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
// SIG // IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
// SIG // DTI2MDMwNTE5NTgyNloXDTI3MDMwMzE5NTgyNlowdDEL
// SIG // MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
// SIG // EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
// SIG // c29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9z
// SIG // b2Z0IENvcnBvcmF0aW9uMIICIjANBgkqhkiG9w0BAQEF
// SIG // AAOCAg8AMIICCgKCAgEA0aHw4cqjafYpVNgzOgrXKtRf
// SIG // d9bEgMnzBJkd3BP36auAteUkGKDUX8kNWF5nI7X1o2gA
// SIG // eA7Kq/qaNEOiF0hERd9f5XgrYkbT60vP9U/RQPQHjlE2
// SIG // hWMqh0c9TODFXk8LvPWR6PcUduklUJjh2xVi4p2c5QVf
// SIG // VlCcX89EzTHVsAF88Z2PZ5Z/BZ92NAZwl1PFd8I3gggM
// SIG // aKjNL9oDxtuXjZ+uuYL+2bd84d70GIQ5G+PIVyT4uA7w
// SIG // q6QVcAndCL9koLeKn7Z+Uk8qoXbuVlqr2vqZPkmu9Q2/
// SIG // TgMumy+uNGxps5VHpNSwD/exMvHsZdHPWs5ixEAfe6uC
// SIG // Ub4QknnowTPemvGOnHK634YP4WSRDpGtXiAycQrinWWl
// SIG // gnnNL/le6CN0UrSbtQRHBfXeBUGg0mlgwGw8al1JtXx1
// SIG // CfV6pMtcn7aU3yhcN/4KrMl1eODxOxFR8MEwgBhOWfrJ
// SIG // F0beBxB7iIXDhsSBWx95wJeSrxcaKUbNsxMb4dloXlvD
// SIG // 7u/bK922mppUANr+JPRaiZeJNUX8DuXtP/Qisg2enHJP
// SIG // 5VfMxzOzybTbUFB3NRaMme/BkpV+lBYicQ1s1Mz2yBzH
// SIG // FeD0gVfPzu27OYf28a9weD8YyKVlM7WYc1wYVPb4VI0I
// SIG // Dl+WS1e25kifiK8bWjfucNjbHsLfTfpn1FBcigL9/LkC
// SIG // AwEAAaOCAa8wggGrMA4GA1UdDwEB/wQEAwIHgDAfBgNV
// SIG // HSUEGDAWBgorBgEEAYI3PQYBBggrBgEFBQcDAzAMBgNV
// SIG // HRMBAf8EAjAAMB0GA1UdDgQWBBTZY+x9pGbaYjJs+ecI
// SIG // oKI1pFmWUjBFBgNVHREEPjA8pDowODEeMBwGA1UECxMV
// SIG // TWljcm9zb2Z0IENvcnBvcmF0aW9uMRYwFAYDVQQFEw0y
// SIG // MzA4NjUrNTA2OTU2MB8GA1UdIwQYMBaAFB6C3w7XjLPX
// SIG // AjSDDtqrrWW5r7jsMGoGA1UdHwRjMGEwX6BdoFuGWWh0
// SIG // dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
// SIG // L01pY3Jvc29mdCUyMFdpbmRvd3MlMjBDb2RlJTIwU2ln
// SIG // bmluZyUyMFBDQSUyMDIwMjQuY3JsMHcGCCsGAQUFBwEB
// SIG // BGswaTBnBggrBgEFBQcwAoZbaHR0cDovL3d3dy5taWNy
// SIG // b3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQl
// SIG // MjBXaW5kb3dzJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0El
// SIG // MjAyMDI0LmNydDANBgkqhkiG9w0BAQwFAAOCAgEALuml
// SIG // Wq89UW+f/XgA/aBzsEEuIw5J2wWJw8C3IDMv4ffeZJ7j
// SIG // y+v+StF0lCAlK41N/2y+elA9bVcF7EXoaxzJEZIDjEJP
// SIG // u3h/l76enMsk8cICDO8cuWEn91ZiQ9xiPO5ZBlKjxRTq
// SIG // hlo82XN3v1EFO1WzeBJYeMyXijnaJFzbhN2uVNZQK9YZ
// SIG // w+lqXyBztp8xlB1UlwyzJLVijDvPaTIC4egVx3cdXALY
// SIG // froJfOrHVwvlcQkCdvGtibzauUUHBARLqkiEnt/2EVmE
// SIG // U0i6oZ/Hmr+JSuJ/t35wMtm5s++me1Cfdl+SoE2hw/q/
// SIG // HL15rLBR91Gzo+hLRPnOEjzWhXSFFhicmQYS204YZYdU
// SIG // JW04NF+OxoSPPamf5cbmHhA2Gzxmg68vyqTKFEMVPpeP
// SIG // YkOs3ZFkjxnMweGQ1UUq5A6s9iu9LSLxWs/GHzIc08uY
// SIG // YTDRr6JwnILmhU4FLMa/jq7xglmnTlf6WdwXEWnyrwQ1
// SIG // /p3stxxXFAciN1T8yFO7GqFG3Lo6k1QOhnjUsm6PACPu
// SIG // 9faJgTm8n9pa4mW/Wtv6FXuUoioR/wQ0FZ/teENulMa1
// SIG // AP/M1TpcyUuXiUGIZBzPYf2NjZ5q9sS7RTdL1v2mne4t
// SIG // dOHVUWkyzAc2yiJQgTq7gYzPO360HNjXH2+SpnuLvaOh
// SIG // kFWX95FcvqfLr/GIJ0ExghroMIIa5AIBATB2MF8xCzAJ
// SIG // BgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
// SIG // cG9yYXRpb24xMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5k
// SIG // b3dzIENvZGUgU2lnbmluZyBQQ0EgMjAyNAITMwAAASPV
// SIG // jwJDBgPuLgAAAAABIzANBglghkgBZQMEAgEFAKCBrjAZ
// SIG // BgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEE
// SIG // AYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0B
// SIG // CQQxIgQgeCPjuxYbrqhR0TDXv6N2yj7/VOcZppQSSc8j
// SIG // cIVxwVgwQgYKKwYBBAGCNwIBDDE0MDKgFIASAE0AaQBj
// SIG // AHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9z
// SIG // b2Z0LmNvbTANBgkqhkiG9w0BAQEFAASCAgA14wV6BJYf
// SIG // pk6GUTbicFiUorT1hUHKfAdBoOLOapn5cSXFF6DWOxE9
// SIG // J4zEuL+osxSd3uyJPAMhdCH018CiddNqDgsmkg1YYU5W
// SIG // VTkgbFFrOg/R6+70yrNsMz/fc0FMJlMKayELO8r+1Kvb
// SIG // QSKZdvnMzZULFKe6LtbLTGAc4fo/czoCzXsow4/EVv/z
// SIG // a6iT7R021k2TUtJed5sF8vA8yOB+4zfmBuntxFXiEBIe
// SIG // dh70N4R0ZeS9iYDEmQRm83+X9+4b1htSD/XLJpKMOfZT
// SIG // 7iadGVk0ZdFqvqxdReUz2RKYzLFpInV0Tep1JtvPLO5M
// SIG // XVivcSG1D7YzU6pRIh+vtP4Uv4/gdm5irW/b1ncspLTj
// SIG // UEjVLoYqvDe4IgQ4gPm4QctjjNAYRRTb/Ph/Gy1tSfDQ
// SIG // Po9hKIqbpM/BHFJLFP31FQmooa0ZcKtkes7xuX4su+5A
// SIG // N8Ht18kftVUdF28W4cL48H99DFtIrgGMmMVoBAEyN5uI
// SIG // vEzTjGVsFBcNOX46HXKdJ/6cz/mZh84jOUSlbMx51NPE
// SIG // MaogitdsIjELIEB5eIjHJJOMDlQsnycNDX5MP6eXybNx
// SIG // ge5vLyDpahxrCDdPz2uOb3/4Wqc6D4kJszmA3VLTY8Pu
// SIG // qwGuSBkleOosCrsq8CL3cV19+iQicLNs8XkC/ZcBMdP/
// SIG // TF2erRYiHx2qwaGCF5IwgheOBgorBgEEAYI3AwMBMYIX
// SIG // fjCCF3oGCSqGSIb3DQEHAqCCF2swghdnAgEDMQ8wDQYJ
// SIG // YIZIAWUDBAIBBQAwggFQBgsqhkiG9w0BCRABBKCCAT8E
// SIG // ggE7MIIBNwIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFl
// SIG // AwQCAQUABCBQD5OJu3qkng+1GMhQH8vRPU6BqqfIHrGo
// SIG // hzhmbMVRWAIGah9Man2PGBEyMDI2MDYxMDAwMDUyMC44
// SIG // WjAEgAIB9KCB0aSBzjCByzELMAkGA1UEBhMCVVMxEzAR
// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
// SIG // bjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3Bl
// SIG // cmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNO
// SIG // OkE5MzUtMDNFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3Nv
// SIG // ZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIR6jCCByAwggUI
// SIG // oAMCAQICEzMAAAIn1cCDw7EuVy0AAQAAAicwDQYJKoZI
// SIG // hvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
// SIG // Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
// SIG // BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
// SIG // A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw
// SIG // MTAwHhcNMjYwMjE5MTk0MDA0WhcNMjcwNTE3MTk0MDA0
// SIG // WjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
// SIG // bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
// SIG // FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMc
// SIG // TWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUG
// SIG // A1UECxMeblNoaWVsZCBUU1MgRVNOOkE5MzUtMDNFMC1E
// SIG // OTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
// SIG // cCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
// SIG // MIICCgKCAgEA4sVstXwzki+Ko9wNaWncvnpSAy8Jxd1L
// SIG // i8ySDlsBh3BIK8ccLZ8r4lCA5pscpU1JdbvtqwT6ds0+
// SIG // AcMEIbxmiaRMarzy5QxZW35kn5SiPOnhaqH4me4/DU0T
// SIG // uJe8BoPTY5vprjWrk3BVtqnXyIyhPedDpK5vTJzDhmMv
// SIG // n4mzWHcUz0T6tU+DC2St7N73TMjBDpXXDkJEiqcQ+v9R
// SIG // pOoDpgrtioCPH9Hser2MZyg5fVtDi0hGv+svNqCG7Jvt
// SIG // UAYnzkOO8VikxtQpr7Rq/OS8wO+fzAHFJkcOf6H/6hE9
// SIG // FBVdVrpTHCayOgwEgLDQjQfuli66LbgWQI/lTJam5+UT
// SIG // GekOCGOycGgIiF4e1Y8a58FDmGRvFhBoX6wPfHYvuyxJ
// SIG // /QKr7xDshvlEHI1YQgmzBl4oCV0gKXsnlrqQrA9I4EDD
// SIG // QsXweQSwQ1sYHWN3SQRD4MX5IEw0CwYILVb9neQmMRyo
// SIG // CCLQeGyOXkm+Y5CBtlqLZxXrU9JXoKcPxKM8H9/WqOrR
// SIG // DWNtXlViM0cPxrJr8I2EBer1a8Tg9KRlbH6hhfLN1T3m
// SIG // O4SNk8RxTKjQNCAf2tjS2OyU8WACgD/9dRCWbe8W6gyz
// SIG // IA9WA3RhMxqUIo5t5wDwi9gnmz/45rvdGmydluNucoJR
// SIG // h0yP5wga8EqX0QoMM63xXpSWgijOvt+WhX8CAwEAAaOC
// SIG // AUkwggFFMB0GA1UdDgQWBBTS1ufDeDBkhurne41qoE/d
// SIG // qK30XjAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtT
// SIG // NRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3
// SIG // Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3Nv
// SIG // ZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5j
// SIG // cmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBo
// SIG // dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Nl
// SIG // cnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El
// SIG // MjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1Ud
// SIG // JQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIH
// SIG // gDANBgkqhkiG9w0BAQsFAAOCAgEAKp3LneD0gtbXm9h+
// SIG // p0bsu7A4iitdxVyYq1QeE38I3aNjG/kC+I+8Gf5OBvT9
// SIG // AgDR2Raw0HCtFRQ08rK2LvGdAIWteGnA2T7MiKD7wBkU
// SIG // YWhxLn+zXJEY5H2v8paNSsiCPI2y/TfbCQKgTy/FeBTQ
// SIG // Y5Y7/tRhwzsNdu62c+WUkz6AD29kgNL+cg4HKVDH8YJT
// SIG // 8qenJzz6EKU7Q/ThsfA8Jtj/qNUz8QSMuiNE/UWrrpaI
// SIG // FQrysH5X3i03CgL50htawo3q0l5lNQzVzrAA/27K0o4G
// SIG // 1+ZgGw+100TBf72sAFhEhXJ/wY44s8XlmW9NGmEpZCQN
// SIG // q1bRZTDOPNWlVl3QG1zz+Uc1Ilk5YMh3/xu5QsR2FhiG
// SIG // bgdd092iOmPJhIJ/6LuNGohSaPK9PotD+RnTZ3lrcYkd
// SIG // AjClH5KPubP+93MHtVn6fASl2tu9HInFUGrBX+bEVe6R
// SIG // Zvle3zUV8Aru2p0zpoGu+szu/9rfszpYm76YU/kOmXfg
// SIG // dqmLEp+MQWmPmMx6Z8nC1uXLycoT8QQnG9aEWH4UcwgA
// SIG // 29rrSNhLRgo3Nj9oouC8keEDG/5/HDsHi/SKlUyis81Z
// SIG // Ps2ScVd766eC8rkF8NDt9JWugXB3TQAAAfVAvN87NxvX
// SIG // fgJSH2SzPe7TFDSlo2waSIqxcei0wxV1bWUHe4asy2Ac
// SIG // o24x9LowggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZ
// SIG // AAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQG
// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
// SIG // cnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9v
// SIG // dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0y
// SIG // MTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJ
// SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
// SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
// SIG // ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
// SIG // dCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG
// SIG // 9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL
// SIG // 1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4X
// SIG // YDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY
// SIG // 6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhu
// SIG // je3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7
// SIG // M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928
// SIG // jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+
// SIG // tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCG
// SIG // MFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39
// SIG // IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+A
// SIG // utuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDy
// SIG // t0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDq
// SIG // hFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrX
// SIG // Y28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH
// SIG // 29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLE
// SIG // hReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3
// SIG // PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQF
// SIG // AgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8
// SIG // RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJl
// SIG // pxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30B
// SIG // ATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jv
// SIG // c29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5o
// SIG // dG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGC
// SIG // NxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8G
// SIG // A1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/o
// SIG // olxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZF
// SIG // aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
// SIG // cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu
// SIG // Y3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+
// SIG // aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0
// SIG // cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJ
// SIG // KoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5y
// SIG // S/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1
// SIG // OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2Lpyp
// SIG // glYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM
// SIG // 9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9Ak
// SIG // vUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6L
// SIG // GYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmR
// SIG // sqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2
// SIG // zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyx
// SIG // TkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGO
// SIG // WhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJ
// SIG // Xk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FB
// SIG // SX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+
// SIG // 57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq
// SIG // 8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cir
// SIG // Ooo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGby
// SIG // oYIDTTCCAjUCAQEwgfmhgdGkgc4wgcsxCzAJBgNVBAYT
// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
// SIG // cG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVy
// SIG // aWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQg
// SIG // VFNTIEVTTjpBOTM1LTAzRTAtRDk0NzElMCMGA1UEAxMc
// SIG // TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEB
// SIG // MAcGBSsOAwIaAxUAIx86rYT8DtBg3JAzAOseeJSIjCqg
// SIG // gYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
// SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
// SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD
// SIG // VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx
// SIG // MDANBgkqhkiG9w0BAQsFAAIFAO3TBHIwIhgPMjAyNjA2
// SIG // MDkyMTMwMjZaGA8yMDI2MDYxMDIxMzAyNlowdDA6Bgor
// SIG // BgEEAYRZCgQBMSwwKjAKAgUA7dMEcgIBADAHAgEAAgIM
// SIG // 6DAHAgEAAgIS+TAKAgUA7dRV8gIBADA2BgorBgEEAYRZ
// SIG // CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6Eg
// SIG // oQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQAs
// SIG // hox9NOyQV62CLGACQBIznVmHT9pFUf58abB5SgxjwzPM
// SIG // z9zZJBCnnAJwSf6XDFagmxIXZ4PkQf24s9VJZGJ7mzkH
// SIG // Bv/vhtXKDyOForD4mFe7JlOGSVHpe9BVYAA1CkZ+mEp6
// SIG // QH8FoGLrD1wT/0aWb/Q5PuiM9lWCVFrcuyrYK8r8UNsn
// SIG // 95sLWP81/ASruF6ZhznDuIgwJB5baIomEiK0Ab9GYeji
// SIG // Q6wpuEAMJ+3Kvxd4H3psCRiYRSXw/G3RX8nESs6tJMkF
// SIG // 3PhZXQrIVA29+hGNKaCe7yXhIgSBQ6arTJHVsx4tH2PK
// SIG // 2Ez3uC92QQqahEiVgZFlan98mLc9f08IMYIEDTCCBAkC
// SIG // AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC
// SIG // EzMAAAIn1cCDw7EuVy0AAQAAAicwDQYJYIZIAWUDBAIB
// SIG // BQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB
// SIG // BDAvBgkqhkiG9w0BCQQxIgQgC7jS9b7k8TVJ6U45hNGJ
// SIG // XB97BAxeV3rafOht4R8MuvAwgfoGCyqGSIb3DQEJEAIv
// SIG // MYHqMIHnMIHkMIG9BCDl5wEaNaFSHDiySg6pRNGnav42
// SIG // fU13ZZ11kXFxk4QRcjCBmDCBgKR+MHwxCzAJBgNVBAYT
// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
// SIG // cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
// SIG // LVN0YW1wIFBDQSAyMDEwAhMzAAACJ9XAg8OxLlctAAEA
// SIG // AAInMCIEINC278M1dshe1nQn0ZLJXG0Zdq7UHIxiOH3v
// SIG // epd37noEMA0GCSqGSIb3DQEBCwUABIICANlk1Qpw4KO8
// SIG // DJPKNSHybU6hmwpXXtaMg6gVatvb/UOklH7YhNWAof+x
// SIG // vJ4NAWrdKYo6hUzw50HIxyAr5IJfjDg/N504fR7Oa7ee
// SIG // IjpuYUTRn+mUvunfRE5MdKwwXnpm5Y1RksCN0dYCJzwh
// SIG // BXZUy57igpFj9qbiA//VBYA3BoBBXJKuBy4yaElTYmSI
// SIG // NRa2Te2Lxry0CC0mJ6aCa3je2gwM9mZVL3tPoLI3A+8o
// SIG // KWLoyJnH57zAIb7YpePSNcj9TKdx53p3NJC4XBrjfdPh
// SIG // EgWCLmmDfO5pY5O+TBVsjPM2PDf1gWqpq8lf0Zd5br3K
// SIG // DvHlOqjD112gagodPjpDgoWK71ZQpPXMgWz3Bi7xfgSU
// SIG // U/Rv5z8ysplRBKDVE2CpubceBSs4hPYByUM6nb7cMBXq
// SIG // SXyyGMf5qkMhJ1kFw4l2imaL/WS++1lPexqi1uhHnPCz
// SIG // mamWySVTpA1f9I2WKs3fgQ9tu+0aitZkxitoyeVrdaZ5
// SIG // ME7sepl0FWc1xacL46FWRpGDVIIRvfspczDmtOefZL4+
// SIG // tK82G+qV+/Rr08geN22ZBqmnR4nf4sfoSjxziTN55X4Q
// SIG // 8m5tOwlHbm6xakV/oj7tu9EsbahjjusYuM2w2VTSSalC
// SIG // 80+R2kV+wBY8JFAdEL0/LaPquUsUYKxrn2SisDkgu1aX
// SIG // LIGunt0TjG7b
// SIG // End signature block
@@ -0,0 +1 @@
{"version":3,"file":"SettingsInfoContent.js","sourceRoot":"","sources":["../src/SettingsInfoContent.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;;;;GAKG;AACU,QAAA,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsIlC,CAAC"}
@@ -0,0 +1,5 @@
import * as vscode from 'vscode';
import { IExtensionContext } from 'vscode-dotnet-runtime-library';
export declare function activate(vsCodeContext: vscode.ExtensionContext, extensionContext?: IExtensionContext): void;
export declare function ReEnableActivationForManualActivation(): void;
export declare function deactivate(): Promise<void>;
@@ -0,0 +1,328 @@
/*! For license information please see extension.js.LICENSE.txt */
(()=>{var e={5606(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ASPNetRuntimeInstallationDirectoryProvider=void 0;const i=n(6928),r=n(8516);class o extends r.IInstallationDirectoryProvider{getInstallDir(e){return i.join(this.getStoragePath(),e)}}t.ASPNetRuntimeInstallationDirectoryProvider=o},7740(e,t,n){"use strict";var i=this&&this.__awaiter||function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((i=i.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:!0}),t.AcquisitionInvoker=void 0;const r=n(5317),o=n(857),s=n(6928),a=n(85),c=n(4603),l=n(357),u=n(147),d=n(4027),p=n(3410),h=n(7532),f=n(6892),m=n(2631),v=n(152),g=n(8365),x=n(5267);class y extends x.IAcquisitionInvoker{constructor(e,t,n){var i;super(e.eventStream),this.workerContext=e,this.utilityContext=t,this.commandExecutor=n,this.noPowershellError="powershell is not discoverable on your system. Is PowerShell added to your PATH and correctly installed? Please visit: https://aka.ms/install-powershell\n\nYou will need to restart VS Code after these changes. If PowerShell is still not discoverable, try setting a custom existingDotnetPath following our instructions here: https://github.com/dotnet/vscode-dotnet-runtime/blob/main/Documentation/troubleshooting-runtime.md.",this.scriptWorker=new p.InstallScriptAcquisitionWorker(e),this.fileUtilities=new d.FileUtilities,null!==(i=this.commandExecutor)&&void 0!==i||(this.commandExecutor=new l.CommandExecutor(this.workerContext,this.utilityContext))}installDotnet(e){return i(this,void 0,void 0,function*(){const t=this.workerContext.installDirectoryProvider.getInstallDir(e.installId),n="win32"===o.platform(),l=yield this.getInstallCommand(this.workerContext.acquisitionContext.version,t,this.workerContext.acquisitionContext.mode,this.workerContext.acquisitionContext.architecture),d=s.join(t,(0,f.getDotnetExecutable)());return new Promise((o,s)=>i(this,void 0,void 0,function*(){try{let p="powershell.exe",f=`${p} -NoProfile -NonInteractive -NoLogo -ExecutionPolicy bypass -Command "& { [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12; & ${l} }"`;if(n&&(p=yield this.verifyPowershellCanRun(e),f=f.replace("powershell.exe",p)),yield this.fileUtilities.exists(t)){if(yield this.fileUtilities.exists(d)){h.LocalMemoryCacheSingleton.getInstance().invalidateEntriesContaining(t);const n=new v.DotnetConditionValidator(this.workerContext,this.utilityContext);if(yield n.dotnetMeetsRequirement(d,{acquireContext:this.workerContext.acquisitionContext,versionSpecRequirement:"equal"}))return this.eventStream.post(new a.DotnetAcquisitionCompleted(e,d,this.workerContext.acquisitionContext.version)),o()}try{yield this.fileUtilities.wipeDirectory(t,this.eventStream,void 0,!0)}catch(e){this.eventStream.post(new a.SuppressedAcquisitionError(e,`${t} could not be not removed, and it has a corrupted install. Please remove it manually.`))}}const g={cwd:process.cwd(),maxBuffer:512e3,timeout:1e3*this.workerContext.timeoutSeconds,killSignal:"SIGKILL"},x=(t,l,p)=>{r.exec(t,g,(r,h,f)=>i(this,void 0,void 0,function*(){if(h&&this.eventStream.post(new a.DotnetAcquisitionScriptOutput(e,c.TelemetryUtilities.HashAllPaths(h))),f&&this.eventStream.post(new a.DotnetAcquisitionScriptOutput(e,`STDERR: ${c.TelemetryUtilities.HashAllPaths(f)}`)),this.looksLikeBadExecutionPolicyError(f)){const t=new a.EventBasedError("PowershellBadExecutionPolicy","Your powershell execution policy does not allow script execution, so we can't automate the installation.\nPlease read more at https://go.microsoft.com/fwlink/?LinkID=135170");this.eventStream.post(new a.PowershellBadExecutionPolicy(t,e)),s(t)}if((this.looksLikeBadLanguageModeError(f)||1===(null==r?void 0:r.code))&&(yield this.badLanguageModeSet(l))){const t=new a.EventBasedError("PowershellBadLanguageMode","Your Language Mode disables PowerShell language features needed to install .NET. Read more at: https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_language_modes.\nIf you cannot change this flag, try setting a custom existingDotnetPath via the instructions here: https://github.com/dotnet/vscode-dotnet-runtime/blob/main/Documentation/troubleshooting-runtime.md.");this.eventStream.post(new a.PowershellBadLanguageMode(t,e)),s(t)}if(r){if(!p&&n&&this.mightBePowershellNotFound(f,r))return void this.findWorkingPowershellViaProbing(e).then(e=>{const n=t.replace(l,e);x(n,e,!0)}).catch(e=>s(e));if(yield m.WebRequestWorkerSingleton.getInstance().isOnline(this.workerContext.timeoutSeconds,this.eventStream))if("SIGKILL"===r.signal){const t=new a.EventBasedError("DotnetAcquisitionTimeoutError",`${u.timeoutConstants.timeoutMessage}, MESSAGE: ${r.message}, CODE: ${r.code}, KILLED: Line truncated
//# sourceMappingURL=extension.js.map
// SIG // Begin signature block
// SIG // MIIpkwYJKoZIhvcNAQcCoIIphDCCKYACAQExDzANBglg
// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
// SIG // hGWCU4XwDl+Gyj++B2eHKunKtZtm/ba9imWmPLs6Gs2g
// SIG // gg3lMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
// SIG // AAAAHDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMC
// SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
// SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
// SIG // b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg
// SIG // Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjQw
// SIG // ODA4MjEzNjIzWhcNMzUwNjIzMjIwNDAxWjBfMQswCQYD
// SIG // VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
// SIG // cmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQgV2luZG93
// SIG // cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwggIiMA0GCSqG
// SIG // SIb3DQEBAQUAA4ICDwAwggIKAoICAQCafWt9J8F2Ki6u
// SIG // 49U0/8wrbe78VPggo/uwZIn0vwdoFyhlOzlfUl0SRj9c
// SIG // hbOaeo6bGIuHGMxeegFdABJphI1fME9pbz1OQYTd8Fd9
// SIG // B6mDyGBI+T91l39JFw/X741H9RgLVxK4ifMOwCzWlRJv
// SIG // UbOHjwNGbGB2gm1OZAVCUA17++oWnznEIHRQgNyN82LX
// SIG // 819rzsMfO7gzmgrsijkWYofXN803/kywuUGC8oVTAZw1
// SIG // xBwzq72sPdg0siKqXYEVqbn86gxctXoFY5KF2YW/vaWf
// SIG // YXlMzV014TqF83sYemMwC+H5QVpvgXNYUMhEnpxLwSc5
// SIG // 1ftubt4e+444DFGOOPll0OLvanXQ3v1OUngGikb74m5o
// SIG // uM+0EaS72bJWtAj4jlBs9NA6ObH5AtBMJbEs3zN/vAPa
// SIG // 7MhVToFg1T87ffDiT9hKGhDqvBhPRgqDdou/+AthQsH3
// SIG // 9QUgkyVmTtVnK9jLXiROlMRlfooQPJzedWDyg9nWBqHs
// SIG // K170cwv9R6FHkr5WX9Jn/RhxLb75GyVUUaOjwX9Jnebf
// SIG // O1W9ZjP3yKdXsqcmsZl5IKXAcLspbDqtpElTiecAT6Gh
// SIG // LLCZHjHCpxLrrvvlCnQx5UtA7bGIzdEJzrnL03UrHb4c
// SIG // yjkoyRd11aq/X9gveOS10+a8SiB1CBAwXDWFOgSgwx+q
// SIG // 36SjjgkopQIDAQABo4IBRjCCAUIwDgYDVR0PAQH/BAQD
// SIG // AgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQe
// SIG // gt8O14yz1wI0gw7aq61lua+47DAZBgkrBgEEAYI3FAIE
// SIG // DB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8G
// SIG // A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
// SIG // A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
// SIG // b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
// SIG // ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
// SIG // MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
// SIG // b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
// SIG // MTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBD
// SIG // X/jfP7vplIw7XPW7aAOdkQXNF1Q0gTEATKsbueoVxwcL
// SIG // nLVFrNVwagwzCBQh7vXOmP1BfkzfBCII57owKSmJhz+H
// SIG // +BDNwEUppc66ReaMzicdAQORVL9Y5qXX/9mW6qbwsZcb
// SIG // /xtUeCo60ppqjx87OooMN2+0U24+wcSEvHziJMGFkIQd
// SIG // ny45YPtx0qwxjxSIaSCVlWpjCEe2u9jhqJ43X+Oa7KcK
// SIG // iB7sp2VOGr8va7gf0YYW8JvnzG/ATHnCGk5pKIcfxGWe
// SIG // RjVnDeqE2FtxtgTNwd2M51pJfbeLIT+tHzLnvtpLHRxl
// SIG // khPBFU3UphlHY9I61HOOpRlRSSEhd/zMXMZ5TXj9Socq
// SIG // /mc0+BLbPyO5rn6Wi5y2pczEdsyLoRjgFlrMHrG47Rc5
// SIG // FVBYA0dklvdNyNFypWzxAOqvHqRxifa6MYfOZ7BCnATV
// SIG // MOEnKevCgqkqRQWiosldbJHfpfFOdFjXjzG/Qc89DnwE
// SIG // mpfL+bEBvg1tNZDfiPkSlCGzOSOdMCY4h8pkBTQ7G6Gx
// SIG // cfSPeZghBD1O31Gd1U/xzlFW5Jl+5bSAv3kALuRjvH7v
// SIG // nHhEzMm726MVDOHWDQvj86KFMX5gtA7ikcAdtW1/fmnL
// SIG // iAZMSJuBHdztfcNVS6AO1DTlLie8+jUNlv/qu3J3zj5d
// SIG // kFS+KpYAm5VE9r5kKZZVdzCCByAwggUIoAMCAQICEzMA
// SIG // AAEibAYzo9FStt0AAAAAASIwDQYJKoZIhvcNAQEMBQAw
// SIG // XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
// SIG // dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
// SIG // IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
// SIG // DTI2MDMwNTE5NTgyNFoXDTI3MDMwMzE5NTgyNFowdDEL
// SIG // MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
// SIG // EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
// SIG // c29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9z
// SIG // b2Z0IENvcnBvcmF0aW9uMIICIjANBgkqhkiG9w0BAQEF
// SIG // AAOCAg8AMIICCgKCAgEAnhZbtyCbTJtA3AlBeRCh1Cof
// SIG // y9OmtScr8V9mlWmqcgAccAyDcMZkktDEeTm6r1+EyoWF
// SIG // 9iHO/hzYTY8WYO1CVEzGpkQ3Jp0t0B2DnqKrIL3i9Zhk
// SIG // LLwalkThItrQXvD68Ca2HeLXn5XfNZGkNXJ287lLqLt3
// SIG // 7gBzbnSZwAluUqj5mRxeeuSI+48DHiT8VOSR7DwLP2Nd
// SIG // Wlj8SPOZFRFHnI3zjKSMeaE15zYvVJ8OwUr/0kq135Mg
// SIG // MhcqrvjzfcpiFi5jgD2gJyfkMRkWfQ+4ycuH2StEcTtR
// SIG // pT02o4fcYG8+0g0ngu9M/EaPJoDtyJqwg7+CnSc7U+XZ
// SIG // wonlVyzEsQqlopHys55qAmgKhubJHcpS+QhYvE0FSgEm
// SIG // 9kEdDI0tX6l9BaTpIIm7u/pthD846d+kpIGdU11XwDt4
// SIG // +QY0WU/1V2lktGZPnjZ/P0kH/FPy0UaZ7iV4ZDllQTSB
// SIG // quXsOhLCiEJuQ7Xq+TU0iifIFJaosAymdR7mkxFp9T5o
// SIG // DdGGBfWr/Hw03lWxD0HtOMr+O6PJWKZXRTNAfZFjnJCH
// SIG // NFPoVzQv/qZw1VIdn4zfibTGiyk0znIlzNhdLbdwm3Sj
// SIG // vnAppQs0roTfWnkNphhJ0GN791d1tebmlKWBC02Dk3k8
// SIG // A1ZGCVwmSv8zUV8VN/K0Pi8MSznkVTbxGIdibNJ7l9EC
// SIG // AwEAAaOCAb4wggG6MA4GA1UdDwEB/wQEAwIHgDAfBgNV
// SIG // HSUEGDAWBgorBgEEAYI3PQYBBggrBgEFBQcDAzAMBgNV
// SIG // HRMBAf8EAjAAMB0GA1UdDgQWBBSfMrW3QLbYu4n2imys
// SIG // bT8G75SYkjBUBgNVHREETTBLpEkwRzEtMCsGA1UECxMk
// SIG // TWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1p
// SIG // dGVkMRYwFAYDVQQFEw0yMzA4NjUrNTA2OTY1MB8GA1Ud
// SIG // IwQYMBaAFB6C3w7XjLPXAjSDDtqrrWW5r7jsMGoGA1Ud
// SIG // HwRjMGEwX6BdoFuGWWh0dHA6Ly93d3cubWljcm9zb2Z0
// SIG // LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFdpbmRv
// SIG // d3MlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjQu
// SIG // Y3JsMHcGCCsGAQUFBwEBBGswaTBnBggrBgEFBQcwAoZb
// SIG // aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j
// SIG // ZXJ0cy9NaWNyb3NvZnQlMjBXaW5kb3dzJTIwQ29kZSUy
// SIG // MFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNydDANBgkqhkiG
// SIG // 9w0BAQwFAAOCAgEAmFhSMo035OTrzq8QPKAEto20uvz9
// SIG // Awyy4qmbMsunWPb34nfj9rmsLsoHqFcJLxqjDtFA1rrq
// SIG // bMvFUP+RcPhl38e5/QH76FYN9Kx5vPN7IlkPfxmmsgod
// SIG // tfZW3mq5Uc4sqk2aM+0obwNt30aCrNyPS5V1ljh9XeQn
// SIG // hbbsl9A+KEQVNaUEvoow0r/OPGYi8Ko4oEO1wWmIjzVU
// SIG // CPMTJJFXiHOgee+a1bMaixea0BTLl2YcFPgVxG1WuLZl
// SIG // QM2PYHj913Tj/i/zsFkFfN2eqaE/0VukDKpDaYH+z3N6
// SIG // Ehihk6a99gMByLrcJlmhGo/GrMg1IxQAcyQRugB/KboE
// SIG // 3+ONK+tbjZcOpg16aXzmVcrh7h/d7jc2iDb7lv2P8hGE
// SIG // g3U78ukp+RsFqxyjQNt1EdfAG7uwdrjng4Yk6uvaHj5i
// SIG // hAD44xzE0Aa2VF/lQcL/r+zCQa/ANLOM4PwGPgPy5jeb
// SIG // 3kKXAI04/R/tpihEKG0U1BygQ1tU9X12EG9SXVkFwyvS
// SIG // J+i8fBGljhMWJLQHHhn88QvTaAo8QVG/G2ukDkFzWqq8
// SIG // 0JQ8xsKsS7IgpTfh+oefKQXxRdjqEmi5YKYodFkX6e7E
// SIG // xnXbKemo2wAF+1UiP1t9qNhuymgyHNY4qJOuAZwUaHsL
// SIG // SpzZtzctLpZieiICGQOQzgMU/bT7RLTYcB5obIcxghsG
// SIG // MIIbAgIBATB2MF8xCzAJBgNVBAYTAlVTMR4wHAYDVQQK
// SIG // ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xMDAuBgNVBAMT
// SIG // J01pY3Jvc29mdCBXaW5kb3dzIENvZGUgU2lnbmluZyBQ
// SIG // Q0EgMjAyNAITMwAAASJsBjOj0VK23QAAAAABIjANBglg
// SIG // hkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYB
// SIG // BAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGC
// SIG // NwIBFTAvBgkqhkiG9w0BCQQxIgQg/3uQHsonzrrGx5D4
// SIG // zuSD3Sftw63BlaJPg9qf//WC/2QwQgYKKwYBBAGCNwIB
// SIG // DDE0MDKgFIASAE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0
// SIG // dHA6Ly93d3cubWljcm9zb2Z0LmNvbTANBgkqhkiG9w0B
// SIG // AQEFAASCAgAdZoNud8wCx0Jq0GgiqkrhaTmhKMajSDsf
// SIG // uz4+fybF38rHuv7X2hz2JLH+mQD5r/+Mwk6qMCBQqeAx
// SIG // SK+hCpvLWCdf08ASsZfeYHQjluwIdUSHt8jaBvgjvct1
// SIG // EyWJo4lzlH6IuAeVQHiVSLkFdcFx894/zm+7eT1SW8Il
// SIG // SUvHk+Z7V7GekoBV9QztZ9b2sFZt7W1yOQszZHRjHLyL
// SIG // LAOImv/llTTvTqRqD1oRAim5mxul7Lv7pvfeCVzdO68q
// SIG // lr3CzTeRYPUJz3WFQLJwQULCL0bJXgEEKq3ESbfsYQcY
// SIG // 8zt6rk4pDLePN+azat90g9yf+e8XNIykZoG2UBDkcAiJ
// SIG // wnZ3TiaVg0oqSOuLXhkV0eItkK3RoE6t4o3q1egnVjnH
// SIG // Usz5aaWUhww6Z5J7GIJNbgLwt8TXJTyj82Mq6ol0ljqj
// SIG // wVeDN6I123Bktewc24OdIKw7ETj4Cb7ckiQmUD3dp1Fa
// SIG // 3c7cA4hyycdV/EkExwqeK/S3AJImkBW3v2ahNqqjTdEu
// SIG // kZhrVu/2VlXnqUc4FXz/FASnIbrfyPMd4/MGzQ6IrZ1q
// SIG // pCtd2qSsDBSF1IgGl0g9X27Wes6iiJa0TzY8uBhj/xWb
// SIG // uhMNagLZVc/qB7U1HLE9Y2d5G75BTMY8BZKjv7SPrSmH
// SIG // 3Jae8tSBREkjFmVn0Dw7eEEti4RiPm3MPaGCF7Awghes
// SIG // BgorBgEEAYI3AwMBMYIXnDCCF5gGCSqGSIb3DQEHAqCC
// SIG // F4kwgheFAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsq
// SIG // hkiG9w0BCRABBKCCAUkEggFFMIIBQQIBAQYKKwYBBAGE
// SIG // WQoDATAxMA0GCWCGSAFlAwQCAQUABCBrIMfiKs9jFk2P
// SIG // pMpDxNwspgc9uepL+vD9oHFcjHtW3AIGahCo93y7GBMy
// SIG // MDI2MDYxMDAwMDUxNi41OTZaMASAAgH0oIHZpIHWMIHT
// SIG // MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
// SIG // bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
// SIG // cm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNy
// SIG // b3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQx
// SIG // JzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjoyQTFBLTA1
// SIG // RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUt
// SIG // U3RhbXAgU2VydmljZaCCEf4wggcoMIIFEKADAgECAhMz
// SIG // AAACEKvN5BYY7zmwAAEAAAIQMA0GCSqGSIb3DQEBCwUA
// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1
// SIG // MDgxNDE4NDgxMloXDTI2MTExMzE4NDgxMlowgdMxCzAJ
// SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
// SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
// SIG // ZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29m
// SIG // dCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG
// SIG // A1UECxMeblNoaWVsZCBUU1MgRVNOOjJBMUEtMDVFMC1E
// SIG // OTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
// SIG // cCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
// SIG // MIICCgKCAgEAjcc4q057ZwIgpKu4pTXWLejvYEduRf+1
// SIG // mIpbiJEMFWWmU2xpip+zK7xFxKGB1CclUXBU0/ZQZ6LG
// SIG // 8H0gI7yvosrsPEI1DPB/XccGCvswKbAKckngOuGTEPGk
// SIG // 7K/vEZa9h0Xt02b7m2n9MdIjkLrFl0pDriKyz0QHGpdh
// SIG // 93X6+NApfE1TL24Vo0xkeoFGpL3rX9gXhIOF59EMnTd2
// SIG // o45FW/oxMgY9q0y0jGO0HrCLTCZr50e7TZRSNYAy2lyK
// SIG // bvKI2MKlN1wLzJvZbbc//L3s1q3J6KhS0KC2VNEImYdF
// SIG // gVkJej4zZqHfScTbx9hjFgFpVkJl4xH5VJ8tyJdXE9+v
// SIG // U0k9AaT2QP1Zm3WQmXedSoLjjI7LWznuHwnoGIXLiJMQ
// SIG // zPqKqRIFL3wzcrDrZeWgtAdBPbipglZ5CQns6Baj5Mb6
// SIG // a/EZC9G3faJYK5QVHeE6eLoSEwp1dz5WurLXNPsp0VWp
// SIG // lpl/FJb8jrRT/jOoHu85qRcdYpgByU9W7IWPdrthmyfq
// SIG // eAw0omVWN5JxcogYbLo2pANJHlsMdWnxIpN5YwHbGEPC
// SIG // uosBHPk2Xd9+E/pZPQUR6v+D85eEN5A/ZM/xiPpxa8dJ
// SIG // Z87BpTvui7/2uflUMJf2Yc9ZLPgEdhQQo0LwMDSTDT48
// SIG // y3sV7Pdo+g5q+MqnJztN/6qt1cgUTe9u+ykCAwEAAaOC
// SIG // AUkwggFFMB0GA1UdDgQWBBSe42+FrpdF2avbUhlk86BL
// SIG // SH5kejAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtT
// SIG // NRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3
// SIG // Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3Nv
// SIG // ZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5j
// SIG // cmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBo
// SIG // dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Nl
// SIG // cnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0El
// SIG // MjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1Ud
// SIG // JQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIH
// SIG // gDANBgkqhkiG9w0BAQsFAAOCAgEAvs4rO3oo8czOrxPq
// SIG // nnSEkUVq718QzlrIiy7/EW7JmQXsJoFxHWUF0Ux0PDyK
// SIG // FDRXPJVv29F7kpJkBJJmcQg5HQV7blUXIMWQ1qX0KdtF
// SIG // QXI/MRL77Z+pK5x1jX+tbRkA7a5Ft7vWuRoAEi02HpFH
// SIG // 5m/Akh/dfsbx8wOpecJbYvuHuy4aG0/tGzOWFCxMMNhG
// SIG // AIJ4qdV87JnY/uMBmiodlm+Gz357XWW5tg3HrtNZXuQ0
// SIG // tWUv26ud4nGKJo/oLZHP75p4Rpt7dMdYKUF9AuVFBwxY
// SIG // ZYpvgk12tfK+/yOwq84/fjXVCdM83Qnawtbenbk/lnbc
// SIG // 9KsZom+GnvA4itAMUpSXFWrcRkqdUQLN+JrG6fPBoV8+
// SIG // D8U2Q2F4XkiCR6EU9JzYKwTuvL6t3nFuxnkLdNjbTg2/
// SIG // yv2j3WaDuCK5lSPgsndIiH6Bku2Ui3A0aUo6D9z9v+XE
// SIG // uBs9ioVJaOjf/z+Urqg7ESnxG0/T1dKci7vLQ2XNgWFY
// SIG // O+/OlDjtGoma1ijX4m14N9qgrXTuWEGwgC7hhBgp3id/
// SIG // LAOf9BSTWA5lBrilsEoexXBrOn/1wM3rjG0hIsxvF5/Y
// SIG // OK78mVRGY6Y7zYJ+uXt4OTOFBwadPv8MklreQZLPnQPt
// SIG // iwop4rlLUYaPCiD4YUqRNbLp8Sgyo9g0iAcZYznTuc+8
// SIG // Q8ZIrgwwggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZ
// SIG // AAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQG
// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
// SIG // cnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9v
// SIG // dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0y
// SIG // MTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJ
// SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
// SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
// SIG // ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
// SIG // dCBUaW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG
// SIG // 9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL
// SIG // 1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4X
// SIG // YDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY
// SIG // 6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhu
// SIG // je3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7
// SIG // M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928
// SIG // jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPgyY9+
// SIG // tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCG
// SIG // MFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39
// SIG // IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2ci/bfV+A
// SIG // utuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDy
// SIG // t0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDq
// SIG // hFFG4tG9ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrX
// SIG // Y28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH
// SIG // 29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLE
// SIG // hReTwDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3
// SIG // PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQF
// SIG // AgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8
// SIG // RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJl
// SIG // pxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30B
// SIG // ATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jv
// SIG // c29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5o
// SIG // dG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGC
// SIG // NxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8G
// SIG // A1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/o
// SIG // olxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZF
// SIG // aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
// SIG // cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu
// SIG // Y3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+
// SIG // aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0
// SIG // cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJ
// SIG // KoZIhvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5y
// SIG // S/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1
// SIG // OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2Lpyp
// SIG // glYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM
// SIG // 9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9Ak
// SIG // vUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6L
// SIG // GYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmR
// SIG // sqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2kQH2
// SIG // zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyx
// SIG // TkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGO
// SIG // WhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJ
// SIG // Xk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FB
// SIG // SX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+
// SIG // 57XQKBqJC4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq
// SIG // 8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cir
// SIG // Ooo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGby
// SIG // oYIDWTCCAkECAQEwggEBoYHZpIHWMIHTMQswCQYDVQQG
// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
// SIG // cnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJl
// SIG // bGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsT
// SIG // Hm5TaGllbGQgVFNTIEVTTjoyQTFBLTA1RTAtRDk0NzEl
// SIG // MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy
// SIG // dmljZaIjCgEBMAcGBSsOAwIaAxUAOsyf2b6riPKnnXlI
// SIG // gIL2f53PUsKggYMwgYCkfjB8MQswCQYDVQQGEwJVUzET
// SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
// SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
// SIG // aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt
// SIG // cCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAO3S4N4w
// SIG // IhgPMjAyNjA2MDkxODU4MzhaGA8yMDI2MDYxMDE4NTgz
// SIG // OFowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA7dLg3gIB
// SIG // ADAKAgEAAgIYrwIB/zAHAgEAAgITiDAKAgUA7dQyXgIB
// SIG // ADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMC
// SIG // oAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3
// SIG // DQEBCwUAA4IBAQAyqwqN9PdZlA4h+Dqtf1TdiC2Bp3ik
// SIG // Yn2tUtfrkqVBWVn5t0kMw3zk9DwaIWy7lDqOCq37QJ7h
// SIG // YCfi8+La4ohv/yeQoKSQ8E2wxN3/Hj1P1pI/FsXFlJSl
// SIG // Q3ES+bUC+JR3EosJu73txiyhv74oZDrmiwMNVg7V6EmH
// SIG // ezfZg+Y6nArfwUu+p5yWGx9hDGZX3UvbcU21DWiH0w1t
// SIG // 1Hr+WI2mu1j2bKa3+Taj6bFboWSFEwbLEF/I/CsO3oY+
// SIG // 7bHNUvPsVJ6YBNjIsbqWShnQYg8XS2gbkmrE3bnHNABA
// SIG // ctnNJo5EJqZ8io/4C4Cw4i1NTfYv8ZobZhzWGPXZQNbh
// SIG // lxEEMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMx
// SIG // EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
// SIG // ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3Rh
// SIG // bXAgUENBIDIwMTACEzMAAAIQq83kFhjvObAAAQAAAhAw
// SIG // DQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzEN
// SIG // BgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgaukr
// SIG // PW0m989smmGM1fZ27/wnxXU9+fo90CJ7igxWk/QwgfoG
// SIG // CyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCDD1SHufsjz
// SIG // Y59S1iHUQY9hnsKSrJPg5a9Mc4YnGmPHxjCBmDCBgKR+
// SIG // MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
// SIG // dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
// SIG // aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
// SIG // Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAC
// SIG // EKvN5BYY7zmwAAEAAAIQMCIEIH1MAgCiUNvw/aCckFok
// SIG // vc8O+FMQXNWfx302v6OEI0bqMA0GCSqGSIb3DQEBCwUA
// SIG // BIICABOe/LUA5OTVGV6qSt0DUEJGvVMipNyzhsX+tTZf
// SIG // ixqt1v5R6BR1oOhmkRV+sKXb6xD8SD7inte8p8Lv3NYj
// SIG // bo2FSYQ7g7CIALdVbJ6PYWAGlfNoDEFOdv7pd3OTPpSQ
// SIG // Ebb2oTAxEOxJdMYTD25HekFDZC8gt4It69cLFPRKx0SC
// SIG // K60DFiOf/sHxmywrhIFECrL/lX3ezaZOPMeWNaKI6ot0
// SIG // kEVEmibaGp2yw+h+3ojsa82M/l9PXcC24Y8EqGyeWaIg
// SIG // 4WnQgPgZyZ4i/I93YGPnR9946Xcuxa+j/7lTePCm4JpK
// SIG // PKfM9pPyRnbpL5LhldsntATMeqNaAzpzQy9ljvU92XyH
// SIG // 0eITpXzuRjuhvnYVsRGel8jS9e23IQiKGLn8l85WRUlE
// SIG // Bgrs2R6j4usF0sHEPnZLOvlqRX2HnxXyLetzOK0GhzJD
// SIG // w0wEGMBwwQKy6zthWiEwRaTzgUg8TYyrMUSDbidpsN1W
// SIG // 3gmAHbt7ArEeiBWYlWCZTdYluHSXR4lH3Ltzbh3dZxRt
// SIG // FC3oFzMh05GauN6x1oXSjuuvgKcQHx8KKtnKTBox1459
// SIG // iBNFw4gw4hddtBnWsWW3m3eIKrN7FrOplFhXhwyWQ+hK
// SIG // NFTPcAEaipxN3Y0294lUEQc9XnBjwbZWAO7hE6trdY4a
// SIG // DyFEDiRJIc24xSjHJzJU1d+HFUpe
// SIG // End signature block
@@ -0,0 +1 @@
{"version":3,"file":"extension.js","mappings":"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 truncated
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
#
# Copyright © Microsoft Corporation
# All rights reserved.
#
# Licensed under the MIT License. See LICENSE-CODE in the project root for details.
#
# Exit codes:
# 0 - Success
# 4 - Distribution not supported by script
#
set H+
#openSUSE - Has to be first since apt-get is available but package names different
if type zypper > /dev/null 2>&1; then
echo "SUSE"
exit 0
# Debian / Ubuntu
elif type apt-get > /dev/null 2>&1; then
echo "Debian"
exit 0
#RHL/Fedora/CentOS
elif type yum > /dev/null 2>&1; then
echo "RedHat"
exit 0
#ArchLinux
elif type pacman > /dev/null 2>&1; then
echo "ArchLinux"
exit 0
#Solus
elif type eopkg > /dev/null 2>&1; then
echo "Solus"
exit 0
#Alpine Linux
elif type apk > /dev/null 2>&1; then
echo "Alpine"
exit 0
# Distro not supported
else
echo "UNKNOWN"
exit 4
fi
@@ -0,0 +1,237 @@
#!/usr/bin/env bash
#
# Copyright © Microsoft Corporation
# All rights reserved.
#
# Licensed under the MIT License. See LICENSE-CODE in the project root for details.
#
# Exit codes:
# 0 - Success
# 1 - Unexpected failure
# 3 - Do not have permissions to run command
# 4 - Distribution not supported by script
#
# $1 - Distro to install
# $2 - String of additional dependencies to install
# $3 - Set to true to skip .NET Core dependency install entirely.
# Useful for secondary libraries and non-.NET Core scenarios.
# $4 - More info URL
DISTRO=$1
ADDITIONAL_DEPS=$2
if [ "$3" = "true" ]; then SKIPDOTNETCORE=1; else SKIPDOTNETCORE=0; fi
MORE_INFO=$4
BASEDIR=$(dirname "$0")
# Utility function for exiting
exitScript()
{
echo -e "\nPress enter to dismiss this message"
read
exit $1
}
# Wrapper function to only use sudo if not already root
sudoIf()
{
if [ "$(id -u)" -ne 0 ]; then
sudo $1 $2
else
$1 $2
fi
}
# Utility function that waits for any existing installation operations to complete
# on Debian/Ubuntu based distributions and then calls apt-get
aptSudoIf()
{
while sudoIf fuser /var/lib/dpkg/lock >/dev/null 2>&1; do
echo -ne "(*) Waiting for other package operations to complete.\r"
sleep 0.2
echo -ne "(*) Waiting for other package operations to complete..\r"
sleep 0.2
echo -ne "(*) Waiting for other package operations to complete...\r"
sleep 0.2
echo -ne "\r\033[K"
done
sudoIf apt-get "$1"
}
checkNetCoreDeps(){
if [ $SKIPDOTNETCORE -eq 0 ]; then
# Install .NET Core dependencies
if ! "$1" "$2"; then
echo "(!) .NET Core dependency install failed!"
exitScript 1
fi
fi
}
checkAdditionalDeps(){
if [ "$ADDITIONAL_DEPS" -ne "" ]; then
# Install additional dependencies
if ! "$1" "$2 $ADDITIONAL_DEPS"; then
echo "(!) Failed to install additional dependencies!"
exitScript 1
fi
fi
}
cat << EOF
Linux Dependency Installer
One or more extensions installed requires a number of prerequisites that this script
will attempt to install for you. This process requires admin / root access.
EOF
# Disable history substitution given use of "!" or errors occur in certain distros
set H+
# Determine the distro if not passed in
if [ "$DISTRO" = "" ]; then
DISTRO=$(bash ${BASEDIR}/determine-linux-distro.sh || sh ${BASEDIR}/determine-linux-distro.sh)
fi
# If not already root, validate user has sudo access and error if not.
if [ "$(id -u)" -ne 0 ]; then
# Can't indent or text will be indented
cat << EOF
To begin the installation process, your OS will now ask you to enter your
admin / root (sudo) password.
EOF
# Validate user actually can use sudo
if ! sudo -v > /dev/null 2>&1; then
# Can't indent or text will be indented
cat << EOF
(!) Dependency installation failed! You do not have the needed admin / root
access to install Live Share's dependencies. Contact your system admin
and ask them to install the required libraries described here:
EOF
echo $3
exitScript 3
else
echo ""
fi
fi
#openSUSE - Has to be first since apt-get is available but package names different
if [ "$DISTRO" = "SUSE" ]; then
echo "(*) Detected SUSE (unoffically/community supported)"
installAdditionalDeps sudoIf "zypper -n in"
checkNetCoreDeps sudoIf "zypper -n in libopenssl1_0_0 libicu krb5 libz1"
# Debian / Ubuntu
elif [ "$DISTRO" = "Debian" ]; then
echo "(*) Detected Debian / Ubuntu"
# Get latest package data
echo -e "\n(*) Updating package lists..."
if ! aptSudoIf "update"; then
echo "(!) Failed to update list of available packages!"
exitScript 1
fi
installAdditionalDeps aptSudoIf "install -yq"
checkNetCoreDeps aptSudoIf "install -yq libicu[0-9][0-9] libkrb5-3 zlib1g $ADDITIONAL_DEPS"
if [ $SKIPDOTNETCORE -eq 0 ]; then
# Determine which version of libssl to install
# dpkg-query can return "1" in some distros if the package is not found. "2" is an unexpected error
LIBSSL=$(dpkg-query -f '${db:Status-Abbrev}\t${binary:Package}\n' -W 'libssl1\.0\.?' 2>&1)
if [ $? -eq 2 ]; then
echo "(!) Failed see if libssl already installed!"
exitScript 1
fi
if [ "$(echo "$LIBSSL" | grep -o 'libssl1\.0\.[0-9]:' | uniq | sort | wc -l)" -eq 0 ]; then
# No libssl install 1.0.2 for Debian, 1.0.0 for Ubuntu
if [[ ! -z $(apt-cache --names-only search ^libssl1.0.2$) ]]; then
if ! aptSudoIf "install -yq libssl1.0.2"; then
echo "(!) libssl1.0.2 installation failed!"
exitScript 1
fi
else
if ! aptSudoIf "install -yq libssl1.0.0"; then
echo "(!) libssl1.0.0 installation failed!"
exitScript 1
fi
fi
else
echo "(*) libssl1.0.x already installed."
fi
fi
#RHL/Fedora/CentOS
elif [ "$DISTRO" = "RedHat" ]; then
echo "(*) Detected RHL / Fedora / CentOS"
# Update package repo indexes - returns 0 if no pacakges to upgrade,
# 100 if there are packages to upgrade, and 1 on error
echo -e "\n(*) Updating package lists..."
sudoIf "yum check-update" >/dev/null 2>&1
if [ $? -eq 1 ]; then
echo "(!) Failed to update package list!"
exitScript 1
fi
installAdditionalDeps sudoIf "yum -y install"
checkNetCoreDeps sudoIf "yum -y install openssl-libs krb5-libs libicu zlib"
# Install openssl-compat10 for Fedora 29. Does not exist in
# CentOS, so validate package exists first.
if [ $SKIPDOTNETCORE -eq 0 ]; then
if ! sudoIf "yum -q list compat-openssl10" >/dev/null 2>&1; then
echo "(*) compat-openssl10 not required."
else
if ! sudoIf "yum -y install compat-openssl10"; then
echo "(!) compat-openssl10 install failed"
exitScript 1
fi
fi
fi
#ArchLinux
elif [ "$DISTRO" = "ArchLinux" ]; then
echo "(*) Detected Arch Linux (unoffically/community supported)"
installAdditionalDeps sudoIf "pacman -Sq --noconfirm --needed"
checkNetCoreDeps sudoIf "pacman -Sq --noconfirm --needed gcr liburcu openssl-1.0 krb5 icu zlib"
#Solus
elif [ "$DISTRO" = "Solus" ]; then
echo "(*) Detected Solus (unoffically/community supported)"
installAdditionalDeps sudoIf "eopkg -y it"
checkNetCoreDeps sudoIf "eopkg -y it libicu openssl zlib kerberos"
#Alpine Linux
elif [ "$DISTRO" = "Alpine" ]; then
echo "(*) Detected Alpine Linux"
# Update package repo indexes
echo -e "\n(*) Updating and upgrading..."
if ! sudoIf "apk update --wait 30"; then
echo "(!) Failed to update package lists."
exitScript 1
fi
# Upgrade to avoid package dependency conflicts
if ! sudoIf "apk upgrade"; then
echo "(!) Failed to upgrade."
exitScript 1
fi
installAdditionalDeps sudoIf "apk add --no-cache"
sudoIf "apk add --no-cache libssl1.0 icu krb5 zlib"
# Unknown distro
else
echo -e "(!) We are unable to install dependencies for this version of Linux.\nSee $MORE_INFO for info on requirements."
exit 4
# Don't pause on exit here - we'll handle this in the extension
fi
echo -e "\n(*) Success!\n"
# Don't pause on exit here - we'll handle this in the extension
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
EXECFOLDER=$1 # First argument is the working folder as this is launched with cwd of /root
TIMEOUT_SEC=$2
OKSIGNALFILE="$EXECFOLDER/ok.txt"
COMMANDTORUNFILE="$EXECFOLDER/command.txt"
EXITFILE="$EXECFOLDER/exit.txt"
#OUTPUTFILE="/home/test_output_.txt"
end=$((SECONDS+3600))
function finish {
rm -f "$COMMANDTORUNFILE"
rm -f "$OKSIGNALFILE"
}
trap finish EXIT
export DEBIAN_FRONTEND=noninteractive
while true
do
stop=false
while [ $SECONDS -lt $end ];
do
if test -f "$COMMANDTORUNFILE"; then
# echo "COMMAND FILE FOUND" >> "$OUTPUTFILE" # Leave this here as an example of debugging
COMMAND="$(cat "$COMMANDTORUNFILE" | awk '{$1=$1;print}')"
for validCmd in "${@:3}"
do
if [ "$COMMAND" == "$validCmd" ]; then
# Eventually we should split the cmd file to be line by line instead of space separated,
# but it works for now because the commands are running under sudo
IFS=' ' read -ra COMMANDARGS <<< "$COMMAND"
fi
done
if [ -z "$COMMANDARGS" ]; then
rm "$COMMANDTORUNFILE"
exit 111777 # Special exit code - arbitrarily picked for when the command is not expected
fi
sudo "${COMMANDARGS[@]}" 2> "$EXECFOLDER/stderr.txt" 1> "$EXECFOLDER/stdout.txt"
STATUSCODE=$?
echo $STATUSCODE > "$EXECFOLDER/status.txt"
rm "$COMMANDTORUNFILE"
touch "$EXECFOLDER/output.txt"
fi
if test -f "$OKSIGNALFILE"; then
rm "$OKSIGNALFILE"
fi
if test -f "$EXITFILE"; then
rm "$EXITFILE"
exit 0
fi
sleep 5
done
done
@@ -0,0 +1,403 @@
{
"name": "vscode-dotnet-runtime",
"repository": {
"type": "git",
"url": "https://github.com/dotnet/vscode-dotnet-runtime.git"
},
"bugs": {
"url": "https://github.com/dotnet/vscode-dotnet-runtime/issues"
},
"license": "MIT",
"author": "Microsoft Corporation",
"displayName": ".NET Install Tool",
"description": "This extension installs and manages different versions of the .NET SDK and Runtime.",
"connectionString": "InstrumentationKey=02dc18e0-7494-43b2-b2a3-18ada5fcb522;IngestionEndpoint=https://westus2-0.in.applicationinsights.azure.com/;LiveEndpoint=https://westus2.livediagnostics.monitor.azure.com/;ApplicationId=e8e56970-a18a-4101-b7d1-1c5dd7c29eeb",
"icon": "images/dotnetIcon.png",
"version": "3.1.0",
"publisher": "ms-dotnettools",
"engines": {
"vscode": "^1.101.0"
},
"categories": [
"Other"
],
"keywords": [
".NET",
".NET Core",
"dotnet",
"Extension Authoring",
"runtime"
],
"capabilities": {
"untrustedWorkspaces": {
"supported": true
},
"virtualWorkspaces": true
},
"activationEvents": [
"onStartupFinished"
],
"main": "./dist/extension.js",
"types": "./dist/extension.d.ts",
"contributes": {
"languageModelTools": [
{
"name": "install_dotnet_sdk",
"when": "config.dotnetAcquisitionExtension.enableLanguageModelTools",
"displayName": "Install .NET SDK",
"toolReferenceName": "installDotNetSdk",
"canBeReferencedInPrompt": true,
"icon": "$(tools)",
"userDescription": "Installs a .NET SDK system-wide for building and running .NET projects",
"modelDescription": "Installs .NET SDK system-wide (requires admin). Use when user wants to install, set up, or add .NET. Supports Windows, macOS, Ubuntu, Debian, RHEL; returns manual instructions for unsupported platforms or versions. Install exactly what user requests, even EOL/preview. Version resolution when not specified by user: (1) TargetFramework in .csproj (net8.0→'8'), (2) global.json, (3) call recommendedDotNetSdkVersion. Formats: '6', '6.0', '6.0.1xx'.",
"inputSchema": {
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The .NET SDK version. Examples: '6', '6.0', '6.0.1xx'. Install exactly what user requests, even if EOL."
},
"architecture": {
"type": "string",
"enum": [
"x64",
"x86",
"arm64"
],
"description": "CPU architecture. Do NOT provide unless the user explicitly requests a specific architecture. Default: current system architecture. Cross-architecture installs are not supported."
}
},
"required": [
"version"
]
}
},
{
"name": "list_available_dotnet_versions_to_install",
"when": "config.dotnetAcquisitionExtension.enableLanguageModelTools",
"displayName": "List Available .NET Versions",
"toolReferenceName": "listDotNetVersions",
"canBeReferencedInPrompt": true,
"icon": "$(list-unordered)",
"userDescription": "Lists available .NET SDK and Runtime versions that can be installed",
"modelDescription": "Lists .NET SDK or Runtime versions available from Microsoft with support phase (active/maintenance/eol). Use when user asks what versions exist. To pick a version to install, prefer recommendedDotNetSdkVersion (Linux-aware). Results are NOT filtered by what the current machine can actually install or update to. Default: SDKs. Set listRuntimes=true for runtimes.",
"inputSchema": {
"type": "object",
"properties": {
"listRuntimes": {
"type": "boolean",
"description": "If true, lists runtime versions. Default: SDK versions."
}
}
}
},
{
"name": "recommended_dotnet_sdk_version",
"when": "config.dotnetAcquisitionExtension.enableLanguageModelTools",
"displayName": "Recommended .NET SDK Version",
"toolReferenceName": "recommendedDotNetSdkVersion",
"canBeReferencedInPrompt": true,
"icon": "$(star)",
"userDescription": "Returns the recommended .NET SDK version to install for this machine (Linux-aware: returns the feature band the distro actually packages).",
"modelDescription": "Returns the recommended .NET SDK version for the current machine. On Linux this returns the feature band the distro packages (e.g. '10.0.1xx'), not necessarily the newest patch on dotnet.microsoft.com.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "find_dotnet_executable_path",
"when": "config.dotnetAcquisitionExtension.enableLanguageModelTools",
"displayName": "Find .NET Path",
"toolReferenceName": "findDotNetPath",
"canBeReferencedInPrompt": true,
"icon": "$(search)",
"userDescription": "Finds the path to a .NET installation that meets specified requirements",
"modelDescription": "Checks if .NET is already installed before suggesting installation. Use when user asks 'is .NET installed?', 'where is dotnet?', or before calling installDotNetSdk. Searches: existingDotnetPath → PATH → DOTNET_ROOT → extension-managed installs. Extension-managed local installs are NOT on PATH.",
"inputSchema": {
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "Minimum .NET version required (e.g., '8.0')"
},
"mode": {
"type": "string",
"enum": [
"sdk",
"runtime",
"aspnetcore"
],
"description": "SDK or runtime. Default: 'runtime'."
},
"architecture": {
"type": "string",
"enum": [
"x64",
"x86",
"arm64"
],
"description": "CPU architecture. Default: current system architecture."
}
},
"required": [
"version"
]
}
},
{
"name": "uninstall_system_dotnet_sdk",
"when": "config.dotnetAcquisitionExtension.enableLanguageModelTools",
"displayName": "Uninstall System .NET SDK",
"toolReferenceName": "uninstallSystemDotNetSdk",
"canBeReferencedInPrompt": true,
"icon": "$(trash)",
"userDescription": "Uninstalls a system-wide (machine) .NET SDK version",
"modelDescription": "Uninstalls a SYSTEM-WIDE (machine) .NET SDK only. Use ONLY for SDKs installed in system locations such as Windows 'C:\\Program Files\\dotnet', macOS '/usr/local/share/dotnet', or Linux '/usr/lib/dotnet', '/usr/share/dotnet', '/usr/lib64/dotnet'. Do NOT use for runtimes, and do NOT use for VS Code-managed (local) installs under a user directory or an extension '.dotnet' folder — those are not system SDKs. Call listInstalledDotNetVersions first to get the exact version. System-wide uninstalls require admin/root. Supports Windows, macOS, Ubuntu, Debian, RHEL; returns manual instructions for unsupported platforms.",
"inputSchema": {
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The system .NET SDK version to uninstall. Call listInstalledDotNetVersions first."
},
"architecture": {
"type": "string",
"enum": [
"x64",
"x86",
"arm64"
],
"description": "CPU architecture. Do NOT provide unless the user explicitly requests a specific architecture. Default: current system architecture. Cross-architecture uninstalls are not supported."
}
},
"required": [
"version"
]
}
},
{
"name": "uninstall_vscode_owned_dotnet_runtime",
"when": "config.dotnetAcquisitionExtension.enableLanguageModelTools",
"displayName": "Uninstall VS Code .NET Runtime",
"toolReferenceName": "uninstallVSCodeDotNetRuntime",
"canBeReferencedInPrompt": true,
"icon": "$(trash)",
"userDescription": "Uninstalls a VS Code-managed (local) .NET runtime version",
"modelDescription": "Uninstalls a VS Code-managed (local) .NET runtime or ASP.NET Core runtime only. Use when the user wants to remove a runtime that this extension installed locally (under the extension's '.dotnet' folder). Do NOT use for SDKs. Do NOT use for system-wide runtimes — those must be removed via the OS package manager or the installer they came from. Call listInstalledDotNetVersions first to get the exact version and mode.",
"inputSchema": {
"type": "object",
"properties": {
"version": {
"type": "string",
"description": "The VS Code-managed runtime version to uninstall. Call listInstalledDotNetVersions first."
},
"mode": {
"type": "string",
"enum": [
"runtime",
"aspnetcore"
],
"description": "runtime (.NET runtime) or aspnetcore (ASP.NET Core runtime). Default: 'runtime'."
}
},
"required": [
"version"
]
}
},
{
"name": "get_settings_info_for_dotnet_installation_management",
"when": "config.dotnetAcquisitionExtension.enableLanguageModelTools",
"displayName": "Get .NET Install Tool Guide",
"toolReferenceName": "getDotNetSettingsInfo",
"canBeReferencedInPrompt": true,
"icon": "$(info)",
"userDescription": "Get information about .NET Install Tool settings, installation types, and troubleshooting",
"modelDescription": "Returns .NET Install Tool settings guide and current config. Use when user asks about .NET settings, troubleshooting, existingDotnetPath, 'C# extension can't find .NET', or extension configuration. Covers: existingDotnetPath (extension runtime only — NOT project SDK, use global.json), local vs global installs, common fixes.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "list_installed_dotnet_versions",
"when": "config.dotnetAcquisitionExtension.enableLanguageModelTools",
"displayName": "List Installed .NET Versions",
"toolReferenceName": "listInstalledDotNetVersions",
"canBeReferencedInPrompt": true,
"icon": "$(list-tree)",
"userDescription": "Lists .NET SDK or Runtime versions that are currently installed on the system",
"modelDescription": "Lists .NET SDKs and runtimes currently installed on the system. Use when user asks 'what .NET do I have?', 'which versions are installed?', or before uninstall. Default: queries PATH. Pass dotnetPath for a specific executable. Windows Desktop Runtime not tracked — use 'dotnet --list-runtimes' in terminal if needed for that.",
"inputSchema": {
"type": "object",
"properties": {
"dotnetPath": {
"type": "string",
"description": "Path to a dotnet executable to query. Default: PATH lookup."
},
"mode": {
"type": "string",
"enum": [
"sdk",
"runtime",
"aspnetcore"
],
"description": "Omit for both SDKs and Runtimes. Set to filter."
}
}
}
}
],
"commands": [
{
"command": "dotnet.reportIssue",
"title": "Report an issue with the .NET Install Tool.",
"category": ".NET Install Tool"
},
{
"command": "dotnet.acquireGlobalSDKPublic",
"title": "Install the .NET SDK System-Wide.",
"category": ".NET Install Tool"
},
{
"command": "dotnet.uninstallPublic",
"title": "Uninstall .NET.",
"category": ".NET Install Tool"
},
{
"command": "dotnet.resetData",
"title": "Reset Extension Data (Uninstalls All Installations, Which May Cause Other Extensions To Fail. Uninstall Dependent Extensions First)",
"category": ".NET Install Tool",
"enablement": "config.dotnetAcquisitionExtension.showResetDataCommand"
}
],
"configuration": {
"title": ".NET Install Tool",
"properties": {
"dotnetAcquisitionExtension.enableLanguageModelTools": {
"type": "boolean",
"default": true,
"description": "Enable AI-powered language model tools for .NET management (install, uninstall, list versions, etc.) in GitHub Copilot and agent mode. Set to false to hide all .NET tools from the LLM. Restart VS Code to apply changes."
},
"dotnetAcquisitionExtension.enableTelemetry": {
"type": "boolean",
"default": true,
"description": "Enable Telemetry for the .NET Install Tool. Restart VS Code to apply changes."
},
"dotnetAcquisitionExtension.enablePreviewFeatures": {
"type": "boolean",
"default": false,
"description": "Enable Preview Features for the Extension. Restart VS Code to apply changes."
},
"dotnetAcquisitionExtension.installTimeoutValue": {
"type": "number",
"default": 600,
"description": "Timeout for installing .NET in seconds."
},
"dotnetAcquisitionExtension.existingDotnetPath": {
"type": "array",
"markdownDescription": "The path to an existing .NET host executable for an extension's code to run under, not for your project to run under.\nRestart VS Code to apply changes.\n\n⚠️ This is NOT the .NET Runtime that your project will use to run. Extensions such as `C#`, `C# DevKit`, and more have components written in .NET. This .NET PATH is the `dotnet.exe` that these extensions will use to run their code, not your code.\n\nUsing a path value in which .NET does not meet the requirements of a specific extension will cause that extension to fail.\n\n🚀 The version of .NET that is used for your project is determined by the .NET host, or dotnet.exe. The .NET host picks a runtime based on your project. To use a specific version of .NET for your project, install the .NET SDK using the `.NET Install Tool - Install SDK System-Wide` command, install .NET manually using [our instructions](https://dotnet.microsoft.com/download), or edit your PATH environment variable to point to a `dotnet.exe` that has an `/sdk/` folder with only one SDK.",
"description": "The path to an existing .NET host executable for an extension's code to run under, not for your project to run under.\nRestart VS Code to apply changes.\n\n⚠️ This is NOT the .NET Runtime that your project will use to run. Extensions such as 'C#', 'C# DevKit', and more have components written in .NET. This .NET PATH is the 'dotnet.exe' that these extensions will use to run their code, not your code.\n\nUsing a path value in which .NET does not meet the requirements of a specific extension will cause that extension to fail.\n\n🚀 The version of .NET that is used for your project is determined by the .NET host, or dotnet.exe. The .NET host picks a runtime based on your project. To use a specific version of .NET for your project, install the .NET SDK using the '.NET Install Tool - Install SDK System-Wide' command, use the instructions at https://dotnet.microsoft.com/download to manually install the .NET SDK, or edit your PATH environment variable to point to a 'dotnet.exe' that has an '/sdk/' folder with only one SDK.",
"examples": [
"C:\\Program Files\\dotnet\\dotnet.exe",
"/usr/local/share/dotnet/dotnet",
"/usr/lib/dotnet/dotnet"
]
},
"dotnetAcquisitionExtension.sharedExistingDotnetPath": {
"type": "string",
"description": "The path of a preexisting .NET Runtime for ALL VS Code extensions to use for their internal components. This does NOT control the SDK or runtime used by your projects. Restart VS Code to apply changes.",
"examples": [
"C:\\Program Files\\dotnet\\dotnet.exe",
"/usr/local/share/dotnet/dotnet",
"/usr/lib/dotnet/dotnet"
]
},
"dotnetAcquisitionExtension.proxyUrl": {
"type": "string",
"description": "URL to a proxy if you use one, such as: https://proxy:port"
},
"dotnetAcquisitionExtension.allowInvalidPaths": {
"type": "boolean",
"description": "If you'd like to continue using a .NET path that is not meant to be used for an extension and may cause instability (please read above about the existingDotnetPath setting) then set this to true and restart."
},
"dotnetAcquisitionExtension.cacheTimeToLiveMultiplier": {
"type": "number",
"default": 1,
"description": "To improve performance, the results of checking .NET Installations may be cached. If you're facing issues with an install not being detected, try setting this to 0.5, or 0; or increasing the number to improve performance. Restart to change."
},
"dotnetAcquisitionExtension.showResetDataCommand": {
"type": "boolean",
"default": false,
"description": "Show the command to reset extension data in the command palette. Restart VS Code and remove dependent extensions first."
},
"dotnetAcquisitionExtension.suppressOutput": {
"type": "boolean",
"default": false,
"description": "Hide all messages in the output window from our extension. Error pop-ups from APIs that other extensions request we display will still appear."
},
"dotnetAcquisitionExtension.highVerbosity": {
"type": "boolean",
"default": false,
"description": "Enable this to show more detailed output from our extension."
},
"dotnetAcquisitionExtension.runtimeUpdateDelaySeconds": {
"type": "number",
"default": 300,
"description": "The amount of seconds to wait before trying to update the .NET Runtime for the day."
}
}
}
},
"scripts": {
"vscode:prepublish": "npm run compile-all && npm install && webpack --mode production && dotnet build ../msbuild/signJs --property jsOutputPath=..\\..\\vscode-dotnet-runtime-extension\\dist -bl -v:normal",
"compile": "npm run clean && tsc -p ./",
"watch": "npm run compile && tsc -watch -p ./",
"test": "npm run compile --silent && node ./dist/test/functional/runTest.js",
"test:lm-tools": "npm run compile --silent && node ./dist/test/functional/runLmToolsTest.js",
"clean": "npx rimraf dist",
"compile-all": "cd ../vscode-dotnet-runtime-library && npm install && npm run compile && cd ../vscode-dotnet-runtime-extension && npm install && npm run compile",
"lint": "eslint -c .eslintrc.js --ext=.ts vscode-dotnet-runtime-library/src/**/*.ts vscode-dotnet-runtime-extension/src/**/*.ts --ignore-pattern \"**/test/\" --fix",
"webpack": "webpack --mode development"
},
"dependencies": {
"axios": "^1.13.6",
"axios-cache-interceptor": "^1.11.4",
"axios-retry": "^3.9.1",
"https-proxy-agent": "^7.0.2",
"open": "^8.4.0",
"shelljs": "^0.8.5",
"vscode-dotnet-runtime-library": "file:../vscode-dotnet-runtime-library"
},
"devDependencies": {
"@types/chai": "^4.3.5",
"@types/chai-as-promised": "^7.1.8",
"@types/glob": "^7.2.0",
"@types/mocha": "^9.0.0",
"@types/node": "^22.19.9",
"@types/source-map-support": "^0.5.10",
"@types/vscode": "^1.101.0",
"@vscode/test-electron": "^2.3.9",
"@vscode/vsce": "^3.7.1",
"chai": "4.3.4",
"copy-webpack-plugin": "^14.0.0",
"glob": "^7.2.0",
"mocha": "^11.7.5",
"rimraf": "^6.1.3",
"ts-loader": "^9.5.1",
"typescript": "^5.5.4",
"webpack": "^5.88.2",
"webpack-cli": "^4.9.1",
"webpack-permissions-plugin": "^1.0.9"
},
"__metadata": {
"id": "1aab81a1-b3d9-4aef-976b-577d5d90fe3f",
"publisherDisplayName": "Microsoft",
"publisherId": "d05e23de-3974-4ff0-8d47-23ee77830092",
"isPreReleaseVersion": false,
"installedTimestamp": 1786455737885,
"targetPlatform": "undefined",
"size": 6017547
}
}