@microsoft/teamsfx-core 2.0.9-rc-hotfix.2 → 2.0.10-alpha.288b4cdfa.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/teamsDevPortalClient.d.ts +127 -0
- package/build/client/teamsDevPortalClient.d.ts.map +1 -0
- package/build/client/teamsDevPortalClient.js +934 -0
- package/build/client/teamsDevPortalClient.js.map +1 -0
- package/build/common/azureUtils.d.ts +3 -0
- package/build/common/azureUtils.d.ts.map +1 -0
- package/build/common/azureUtils.js +50 -0
- package/build/common/azureUtils.js.map +1 -0
- package/build/common/constants.d.ts +11 -1
- package/build/common/constants.d.ts.map +1 -1
- package/build/common/constants.js +44 -3
- package/build/common/constants.js.map +1 -1
- package/build/common/featureFlags.d.ts +4 -5
- package/build/common/featureFlags.d.ts.map +1 -1
- package/build/common/featureFlags.js +2 -10
- package/build/common/featureFlags.js.map +1 -1
- package/build/common/globalState.js +3 -3
- package/build/{core → common}/globalVars.d.ts +2 -1
- package/build/common/globalVars.d.ts.map +1 -0
- package/build/{core → common}/globalVars.js +11 -1
- package/build/common/globalVars.js.map +1 -0
- package/build/common/localizeUtils.js +1 -1
- package/build/common/localizeUtils.js.map +1 -1
- package/build/common/projectSettingsHelper.d.ts +5 -0
- package/build/common/projectSettingsHelper.d.ts.map +1 -1
- package/build/common/projectSettingsHelper.js +31 -1
- package/build/common/projectSettingsHelper.js.map +1 -1
- package/build/common/requestUtils.d.ts +4 -0
- package/build/common/requestUtils.d.ts.map +1 -0
- package/build/common/requestUtils.js +52 -0
- package/build/common/requestUtils.js.map +1 -0
- package/build/common/samples.d.ts +6 -1
- package/build/common/samples.d.ts.map +1 -1
- package/build/common/samples.js +4 -4
- package/build/common/samples.js.map +1 -1
- package/build/common/stringUtils.d.ts +8 -0
- package/build/common/stringUtils.d.ts.map +1 -1
- package/build/common/stringUtils.js +63 -1
- package/build/common/stringUtils.js.map +1 -1
- package/build/common/telemetry.d.ts +30 -11
- package/build/common/telemetry.d.ts.map +1 -1
- package/build/common/telemetry.js +79 -74
- package/build/common/telemetry.js.map +1 -1
- package/build/common/templates-config.json +2 -2
- package/build/common/tools.d.ts +1 -31
- package/build/common/tools.d.ts.map +1 -1
- package/build/common/tools.js +6 -245
- package/build/common/tools.js.map +1 -1
- package/build/common/utils.d.ts +1 -3
- package/build/common/utils.d.ts.map +1 -1
- package/build/common/utils.js +5 -14
- package/build/common/utils.js.map +1 -1
- package/build/common/wrappedAxiosClient.js +5 -5
- package/build/common/wrappedAxiosClient.js.map +1 -1
- package/build/component/configManager/lifecycle.js +1 -1
- package/build/component/configManager/lifecycle.js.map +1 -1
- package/build/component/configManager/parser.js +1 -1
- package/build/component/configManager/parser.js.map +1 -1
- package/build/component/configManager/validator.js +1 -1
- package/build/component/configManager/validator.js.map +1 -1
- package/build/component/constants.d.ts +3 -223
- package/build/component/constants.d.ts.map +1 -1
- package/build/component/constants.js +4 -247
- package/build/component/constants.js.map +1 -1
- package/build/component/coordinator/index.d.ts.map +1 -1
- package/build/component/coordinator/index.js +74 -72
- package/build/component/coordinator/index.js.map +1 -1
- package/build/component/deps-checker/checkerFactory.d.ts.map +1 -0
- package/build/component/deps-checker/checkerFactory.js.map +1 -0
- package/build/{common → component}/deps-checker/constant/helpLink.d.ts +0 -3
- package/build/component/deps-checker/constant/helpLink.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/constant/helpLink.js +1 -6
- package/build/component/deps-checker/constant/helpLink.js.map +1 -0
- package/build/component/deps-checker/constant/index.d.ts.map +1 -0
- package/build/component/deps-checker/constant/index.js.map +1 -0
- package/build/component/deps-checker/constant/message.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/constant/message.js +1 -1
- package/build/component/deps-checker/constant/message.js.map +1 -0
- package/build/component/deps-checker/constant/telemetry.d.ts.map +1 -0
- package/build/component/deps-checker/constant/telemetry.js.map +1 -0
- package/build/component/deps-checker/coreDepsLoggerAdapter.d.ts.map +1 -0
- package/build/component/deps-checker/coreDepsLoggerAdapter.js.map +1 -0
- package/build/component/deps-checker/coreDepsTelemetryAdapter.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/coreDepsTelemetryAdapter.js +4 -4
- package/build/component/deps-checker/coreDepsTelemetryAdapter.js.map +1 -0
- package/build/component/deps-checker/depsChecker.d.ts.map +1 -0
- package/build/component/deps-checker/depsChecker.js.map +1 -0
- package/build/component/deps-checker/depsError.d.ts.map +1 -0
- package/build/component/deps-checker/depsError.js.map +1 -0
- package/build/component/deps-checker/depsLogger.d.ts.map +1 -0
- package/build/component/deps-checker/depsLogger.js.map +1 -0
- package/build/component/deps-checker/depsManager.d.ts.map +1 -0
- package/build/component/deps-checker/depsManager.js.map +1 -0
- package/build/component/deps-checker/depsTelemetry.d.ts.map +1 -0
- package/build/component/deps-checker/depsTelemetry.js.map +1 -0
- package/build/component/deps-checker/index.d.ts.map +1 -0
- package/build/component/deps-checker/index.js.map +1 -0
- package/build/component/deps-checker/internal/dotnetChecker.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/internal/dotnetChecker.js +1 -1
- package/build/component/deps-checker/internal/dotnetChecker.js.map +1 -0
- package/build/component/deps-checker/internal/funcToolChecker.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/internal/funcToolChecker.js +4 -4
- package/build/component/deps-checker/internal/funcToolChecker.js.map +1 -0
- package/build/component/deps-checker/internal/nodeChecker.d.ts.map +1 -0
- package/build/component/deps-checker/internal/nodeChecker.js.map +1 -0
- package/build/component/deps-checker/internal/testToolChecker.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/internal/testToolChecker.js +1 -1
- package/build/component/deps-checker/internal/testToolChecker.js.map +1 -0
- package/build/component/deps-checker/internal/vxTestAppChecker.d.ts.map +1 -0
- package/build/{common → component}/deps-checker/internal/vxTestAppChecker.js +9 -3
- package/build/component/deps-checker/internal/vxTestAppChecker.js.map +1 -0
- package/build/component/deps-checker/util/cpUtils.d.ts.map +1 -0
- package/build/component/deps-checker/util/cpUtils.js.map +1 -0
- package/build/component/deps-checker/util/downloadHelper.d.ts.map +1 -0
- package/build/component/deps-checker/util/downloadHelper.js.map +1 -0
- package/build/component/deps-checker/util/fileHelper.d.ts.map +1 -0
- package/build/component/deps-checker/util/fileHelper.js.map +1 -0
- package/build/component/deps-checker/util/index.d.ts.map +1 -0
- package/build/component/deps-checker/util/index.js.map +1 -0
- package/build/component/deps-checker/util/progressIndicator.d.ts.map +1 -0
- package/build/component/deps-checker/util/progressIndicator.js.map +1 -0
- package/build/component/deps-checker/util/system.d.ts.map +1 -0
- package/build/component/deps-checker/util/system.js.map +1 -0
- package/build/component/developerPortalScaffoldUtils.d.ts +1 -5
- package/build/component/developerPortalScaffoldUtils.d.ts.map +1 -1
- package/build/component/developerPortalScaffoldUtils.js +71 -87
- package/build/component/developerPortalScaffoldUtils.js.map +1 -1
- package/build/component/driver/aad/create.d.ts.map +1 -1
- package/build/component/driver/aad/create.js +17 -18
- package/build/component/driver/aad/create.js.map +1 -1
- package/build/component/driver/aad/utility/aadAppClient.d.ts.map +1 -1
- package/build/component/driver/aad/utility/aadAppClient.js +10 -10
- package/build/component/driver/aad/utility/aadAppClient.js.map +1 -1
- package/build/component/driver/aad/utility/buildAadManifest.d.ts +1 -1
- package/build/component/driver/aad/utility/buildAadManifest.d.ts.map +1 -1
- package/build/component/driver/aad/utility/buildAadManifest.js +11 -11
- package/build/component/driver/aad/utility/buildAadManifest.js.map +1 -1
- package/build/component/driver/add/addWebPart.d.ts +2 -2
- package/build/component/driver/add/addWebPart.d.ts.map +1 -1
- package/build/component/driver/add/addWebPart.js +29 -29
- package/build/component/driver/add/addWebPart.js.map +1 -1
- package/build/component/driver/apiKey/create.d.ts.map +1 -1
- package/build/component/driver/apiKey/create.js +16 -16
- package/build/component/driver/apiKey/create.js.map +1 -1
- package/build/component/driver/apiKey/update.d.ts +1 -1
- package/build/component/driver/apiKey/update.d.ts.map +1 -1
- package/build/component/driver/apiKey/update.js +15 -15
- package/build/component/driver/apiKey/update.js.map +1 -1
- package/build/component/driver/arm/deployImpl.js +1 -1
- package/build/component/driver/arm/deployImpl.js.map +1 -1
- package/build/component/driver/arm/util/bicepChecker.d.ts.map +1 -1
- package/build/component/driver/arm/util/bicepChecker.js +25 -5
- package/build/component/driver/arm/util/bicepChecker.js.map +1 -1
- package/build/component/driver/arm/util/handleError.js +2 -2
- package/build/component/driver/arm/util/handleError.js.map +1 -1
- package/build/component/driver/deploy/azure/azureStorageDeployDriver.js +1 -1
- package/build/component/driver/deploy/azure/azureStorageDeployDriver.js.map +1 -1
- package/build/component/driver/deploy/azure/azureStorageStaticWebsiteConfigDriver.js +1 -1
- package/build/component/driver/deploy/azure/azureStorageStaticWebsiteConfigDriver.js.map +1 -1
- package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js +1 -1
- package/build/component/driver/deploy/azure/impl/AzureZipDeployImpl.js.map +1 -1
- package/build/component/driver/deploy/azure/impl/azureDeployImpl.d.ts +4 -4
- package/build/component/driver/deploy/azure/impl/azureDeployImpl.d.ts.map +1 -1
- package/build/component/driver/deploy/azure/impl/azureDeployImpl.js +13 -13
- package/build/component/driver/deploy/azure/impl/azureDeployImpl.js.map +1 -1
- package/build/component/driver/deploy/spfx/deployDriver.d.ts +1 -1
- package/build/component/driver/deploy/spfx/deployDriver.d.ts.map +1 -1
- package/build/component/driver/deploy/spfx/deployDriver.js +19 -18
- package/build/component/driver/deploy/spfx/deployDriver.js.map +1 -1
- package/build/component/driver/devTool/error/dotnetInstallationUserError.js +1 -1
- package/build/component/driver/devTool/error/dotnetInstallationUserError.js.map +1 -1
- package/build/component/driver/devTool/error/funcInstallationUserError.js +1 -1
- package/build/component/driver/devTool/error/funcInstallationUserError.js.map +1 -1
- package/build/component/driver/devTool/error/testToolInstallationUserError.js +1 -1
- package/build/component/driver/devTool/error/testToolInstallationUserError.js.map +1 -1
- package/build/component/driver/devTool/installDriver.d.ts +1 -1
- package/build/component/driver/devTool/installDriver.d.ts.map +1 -1
- package/build/component/driver/devTool/installDriver.js +6 -6
- package/build/component/driver/devTool/installDriver.js.map +1 -1
- package/build/component/driver/m365/acquire.js +4 -4
- package/build/component/driver/m365/acquire.js.map +1 -1
- package/build/component/driver/middleware/addSWADeployTelemetry.js +5 -5
- package/build/component/driver/middleware/addSWADeployTelemetry.js.map +1 -1
- package/build/component/driver/middleware/addStartAndEndTelemetry.d.ts.map +1 -1
- package/build/component/driver/middleware/addStartAndEndTelemetry.js +3 -3
- package/build/component/driver/middleware/addStartAndEndTelemetry.js.map +1 -1
- package/build/component/driver/oauth/create.d.ts +1 -1
- package/build/component/driver/oauth/create.d.ts.map +1 -1
- package/build/component/driver/oauth/create.js +23 -24
- package/build/component/driver/oauth/create.js.map +1 -1
- package/build/component/driver/oauth/update.d.ts +1 -1
- package/build/component/driver/oauth/update.d.ts.map +1 -1
- package/build/component/driver/oauth/update.js +15 -15
- package/build/component/driver/oauth/update.js.map +1 -1
- package/build/component/driver/oauth/utility/utility.js +2 -2
- package/build/component/driver/oauth/utility/utility.js.map +1 -1
- package/build/component/driver/script/scriptDriver.js +1 -1
- package/build/component/driver/script/scriptDriver.js.map +1 -1
- package/build/component/driver/teamsApp/appStudio.d.ts +1 -1
- package/build/component/driver/teamsApp/appStudio.d.ts.map +1 -1
- package/build/component/driver/teamsApp/appStudio.js +25 -25
- package/build/component/driver/teamsApp/appStudio.js.map +1 -1
- package/build/component/driver/teamsApp/clients/appStudioClient.d.ts +7 -4
- package/build/component/driver/teamsApp/clients/appStudioClient.d.ts.map +1 -1
- package/build/component/driver/teamsApp/clients/appStudioClient.js +60 -60
- package/build/component/driver/teamsApp/clients/appStudioClient.js.map +1 -1
- package/build/component/driver/teamsApp/configure.d.ts +1 -1
- package/build/component/driver/teamsApp/configure.d.ts.map +1 -1
- package/build/component/driver/teamsApp/configure.js +16 -16
- package/build/component/driver/teamsApp/configure.js.map +1 -1
- package/build/component/driver/teamsApp/constants.d.ts +0 -2
- package/build/component/driver/teamsApp/constants.d.ts.map +1 -1
- package/build/component/driver/teamsApp/constants.js +14 -24
- package/build/component/driver/teamsApp/constants.js.map +1 -1
- package/build/component/driver/teamsApp/create.d.ts +2 -2
- package/build/component/driver/teamsApp/create.d.ts.map +1 -1
- package/build/component/driver/teamsApp/create.js +19 -19
- package/build/component/driver/teamsApp/create.js.map +1 -1
- package/build/component/driver/teamsApp/createAppPackage.js +1 -1
- package/build/component/driver/teamsApp/createAppPackage.js.map +1 -1
- package/build/component/driver/teamsApp/publishAppPackage.d.ts +1 -1
- package/build/component/driver/teamsApp/publishAppPackage.d.ts.map +1 -1
- package/build/component/driver/teamsApp/publishAppPackage.js +21 -21
- package/build/component/driver/teamsApp/publishAppPackage.js.map +1 -1
- package/build/component/driver/teamsApp/teamsappMgr.js +8 -8
- package/build/component/driver/teamsApp/teamsappMgr.js.map +1 -1
- package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.d.ts.map +1 -1
- package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js +29 -22
- package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js.map +1 -1
- package/build/component/driver/teamsApp/utils/ManifestUtils.d.ts.map +1 -1
- package/build/component/driver/teamsApp/utils/ManifestUtils.js +34 -34
- package/build/component/driver/teamsApp/utils/ManifestUtils.js.map +1 -1
- package/build/component/driver/teamsApp/utils/telemetry.d.ts +0 -9
- package/build/component/driver/teamsApp/utils/telemetry.d.ts.map +1 -1
- package/build/component/driver/teamsApp/utils/telemetry.js +0 -9
- package/build/component/driver/teamsApp/utils/telemetry.js.map +1 -1
- package/build/component/driver/teamsApp/utils/utils.d.ts +1 -1
- package/build/component/driver/teamsApp/utils/utils.d.ts.map +1 -1
- package/build/component/driver/teamsApp/utils/utils.js +1 -1
- package/build/component/driver/teamsApp/utils/utils.js.map +1 -1
- package/build/component/driver/teamsApp/validateAppPackage.d.ts +2 -5
- package/build/component/driver/teamsApp/validateAppPackage.d.ts.map +1 -1
- package/build/component/driver/teamsApp/validateAppPackage.js +18 -18
- package/build/component/driver/teamsApp/validateAppPackage.js.map +1 -1
- package/build/component/driver/teamsApp/validateTestCases.d.ts +3 -3
- package/build/component/driver/teamsApp/validateTestCases.d.ts.map +1 -1
- package/build/component/driver/teamsApp/validateTestCases.js +20 -19
- package/build/component/driver/teamsApp/validateTestCases.js.map +1 -1
- package/build/component/driver/util/utils.d.ts +3 -0
- package/build/component/driver/util/utils.d.ts.map +1 -1
- package/build/component/driver/util/utils.js +16 -1
- package/build/component/driver/util/utils.js.map +1 -1
- package/build/component/driver/util/wrapUtil.d.ts.map +1 -1
- package/build/component/driver/util/wrapUtil.js +8 -5
- package/build/component/driver/util/wrapUtil.js.map +1 -1
- package/build/component/feature/collaboration.d.ts.map +1 -1
- package/build/component/feature/collaboration.js +25 -24
- package/build/component/feature/collaboration.js.map +1 -1
- package/build/component/feature/sso.js +4 -3
- package/build/component/feature/sso.js.map +1 -1
- package/build/component/generator/copilotPlugin/generator.d.ts +10 -2
- package/build/component/generator/copilotPlugin/generator.d.ts.map +1 -1
- package/build/component/generator/copilotPlugin/generator.js +222 -98
- package/build/component/generator/copilotPlugin/generator.js.map +1 -1
- package/build/component/generator/copilotPlugin/helper.d.ts +5 -14
- package/build/component/generator/copilotPlugin/helper.d.ts.map +1 -1
- package/build/component/generator/copilotPlugin/helper.js +60 -110
- package/build/component/generator/copilotPlugin/helper.js.map +1 -1
- package/build/component/generator/generator.d.ts.map +1 -1
- package/build/component/generator/generator.js +7 -7
- package/build/component/generator/generator.js.map +1 -1
- package/build/component/generator/generatorAction.d.ts +1 -1
- package/build/component/generator/generatorAction.d.ts.map +1 -1
- package/build/component/generator/generatorAction.js +8 -16
- package/build/component/generator/generatorAction.js.map +1 -1
- package/build/component/generator/generatorProvider.d.ts.map +1 -1
- package/build/component/generator/generatorProvider.js +6 -2
- package/build/component/generator/generatorProvider.js.map +1 -1
- package/build/component/generator/officeAddin/generator.d.ts +2 -2
- package/build/component/generator/officeAddin/generator.d.ts.map +1 -1
- package/build/component/generator/officeAddin/generator.js +37 -36
- package/build/component/generator/officeAddin/generator.js.map +1 -1
- package/build/component/generator/officeAddin/helperMethods.d.ts +5 -0
- package/build/component/generator/officeAddin/helperMethods.d.ts.map +1 -1
- package/build/component/generator/officeAddin/helperMethods.js +37 -0
- package/build/component/generator/officeAddin/helperMethods.js.map +1 -1
- package/build/component/generator/officeXMLAddin/generator.d.ts +9 -1
- package/build/component/generator/officeXMLAddin/generator.d.ts.map +1 -1
- package/build/component/generator/officeXMLAddin/generator.js +74 -11
- package/build/component/generator/officeXMLAddin/generator.js.map +1 -1
- package/build/component/generator/officeXMLAddin/projectConfig.d.ts +2 -4
- package/build/component/generator/officeXMLAddin/projectConfig.d.ts.map +1 -1
- package/build/component/generator/officeXMLAddin/projectConfig.js +1 -11
- package/build/component/generator/officeXMLAddin/projectConfig.js.map +1 -1
- package/build/component/generator/spfx/depsChecker/generatorChecker.d.ts.map +1 -1
- package/build/component/generator/spfx/depsChecker/generatorChecker.js +8 -7
- package/build/component/generator/spfx/depsChecker/generatorChecker.js.map +1 -1
- package/build/component/generator/spfx/depsChecker/yoChecker.d.ts.map +1 -1
- package/build/component/generator/spfx/depsChecker/yoChecker.js +3 -2
- package/build/component/generator/spfx/depsChecker/yoChecker.js.map +1 -1
- package/build/component/generator/spfx/error.d.ts +0 -1
- package/build/component/generator/spfx/error.d.ts.map +1 -1
- package/build/component/generator/spfx/error.js +1 -5
- package/build/component/generator/spfx/error.js.map +1 -1
- package/build/component/generator/spfx/spfxGenerator.d.ts +2 -2
- package/build/component/generator/spfx/spfxGenerator.d.ts.map +1 -1
- package/build/component/generator/spfx/spfxGenerator.js +27 -29
- package/build/component/generator/spfx/spfxGenerator.js.map +1 -1
- package/build/component/generator/spfx/utils/constants.d.ts +0 -13
- package/build/component/generator/spfx/utils/constants.d.ts.map +1 -1
- package/build/component/generator/spfx/utils/constants.js +1 -16
- package/build/component/generator/spfx/utils/constants.js.map +1 -1
- package/build/component/generator/spfx/utils/telemetry-helper.d.ts.map +1 -1
- package/build/component/generator/spfx/utils/telemetry-helper.js +11 -9
- package/build/component/generator/spfx/utils/telemetry-helper.js.map +1 -1
- package/build/component/generator/spfx/utils/utils.d.ts +1 -1
- package/build/component/generator/spfx/utils/utils.d.ts.map +1 -1
- package/build/component/generator/spfx/utils/utils.js +1 -1
- package/build/component/generator/spfx/utils/utils.js.map +1 -1
- package/build/component/generator/templates/ssrTabGenerator.d.ts.map +1 -1
- package/build/component/generator/templates/ssrTabGenerator.js +5 -5
- package/build/component/generator/templates/ssrTabGenerator.js.map +1 -1
- package/build/component/generator/templates/templateGenerator.d.ts +3 -3
- package/build/component/generator/templates/templateGenerator.d.ts.map +1 -1
- package/build/component/generator/templates/templateGenerator.js +4 -6
- package/build/component/generator/templates/templateGenerator.js.map +1 -1
- package/build/component/generator/templates/templateNames.d.ts +2 -0
- package/build/component/generator/templates/templateNames.d.ts.map +1 -1
- package/build/component/generator/templates/templateNames.js +112 -109
- package/build/component/generator/templates/templateNames.js.map +1 -1
- package/build/component/generator/templates/templateReplaceMap.js +9 -9
- package/build/component/generator/templates/templateReplaceMap.js.map +1 -1
- package/build/component/generator/utils.d.ts +4 -12
- package/build/component/generator/utils.d.ts.map +1 -1
- package/build/component/generator/utils.js +48 -79
- package/build/component/generator/utils.js.map +1 -1
- package/build/{common → component}/local/constants.d.ts +1 -0
- package/build/component/local/constants.d.ts.map +1 -0
- package/build/{common → component}/local/constants.js +1 -0
- package/build/component/local/constants.js.map +1 -0
- package/build/component/local/index.d.ts.map +1 -0
- package/build/component/local/index.js.map +1 -0
- package/build/component/local/localCertificateManager.d.ts.map +1 -0
- package/build/{common → component}/local/localCertificateManager.js +2 -2
- package/build/component/local/localCertificateManager.js.map +1 -0
- package/build/component/local/localEnvManager.d.ts.map +1 -0
- package/build/component/local/localEnvManager.js.map +1 -0
- package/build/component/local/localTelemetryReporter.d.ts.map +1 -0
- package/build/{common → component}/local/localTelemetryReporter.js +1 -1
- package/build/component/local/localTelemetryReporter.js.map +1 -0
- package/build/component/local/npmLogHelper.d.ts.map +1 -0
- package/build/component/local/npmLogHelper.js.map +1 -0
- package/build/component/local/packageJsonHelper.d.ts.map +1 -0
- package/build/component/local/packageJsonHelper.js.map +1 -0
- package/build/component/local/portChecker.d.ts.map +1 -0
- package/build/{common → component}/local/portChecker.js +2 -2
- package/build/component/local/portChecker.js.map +1 -0
- package/build/component/local/process.d.ts.map +1 -0
- package/build/component/local/process.js.map +1 -0
- package/build/component/local/taskDefinition.d.ts.map +1 -0
- package/build/{common → component}/local/taskDefinition.js +3 -3
- package/build/component/local/taskDefinition.js.map +1 -0
- package/build/component/m365/constants.d.ts.map +1 -0
- package/build/component/m365/constants.js.map +1 -0
- package/build/component/m365/errors.d.ts.map +1 -0
- package/build/{common → component}/m365/errors.js +1 -1
- package/build/component/m365/errors.js.map +1 -0
- package/build/{common → component}/m365/launchHelper.d.ts +1 -1
- package/build/component/m365/launchHelper.d.ts.map +1 -0
- package/build/{common → component}/m365/launchHelper.js +13 -13
- package/build/component/m365/launchHelper.js.map +1 -0
- package/build/component/m365/packageService.d.ts.map +1 -0
- package/build/{common → component}/m365/packageService.js +12 -12
- package/build/component/m365/packageService.js.map +1 -0
- package/build/component/m365/serviceConstant.d.ts +3 -0
- package/build/component/m365/serviceConstant.d.ts.map +1 -0
- package/build/component/m365/serviceConstant.js +8 -0
- package/build/component/m365/serviceConstant.js.map +1 -0
- package/build/component/middleware/actionExecutionMW.d.ts +1 -1
- package/build/component/middleware/actionExecutionMW.d.ts.map +1 -1
- package/build/component/middleware/actionExecutionMW.js +9 -9
- package/build/component/middleware/actionExecutionMW.js.map +1 -1
- package/build/component/middleware/envMW.js +4 -4
- package/build/component/middleware/envMW.js.map +1 -1
- package/build/component/middleware/questionMW.js +1 -1
- package/build/component/middleware/questionMW.js.map +1 -1
- package/build/component/migrate.d.ts +32 -0
- package/build/component/migrate.d.ts.map +1 -1
- package/build/component/migrate.js +109 -32
- package/build/component/migrate.js.map +1 -1
- package/build/component/provisionUtils.d.ts.map +1 -1
- package/build/component/provisionUtils.js +5 -6
- package/build/component/provisionUtils.js.map +1 -1
- package/build/component/resource/botService/appStudio/appStudioClient.d.ts.map +1 -1
- package/build/component/resource/botService/appStudio/appStudioClient.js +12 -11
- package/build/component/resource/botService/appStudio/appStudioClient.js.map +1 -1
- package/build/component/resource/botService/botRegistration/botFrameworkRegistration.d.ts +1 -1
- package/build/component/resource/botService/botRegistration/botFrameworkRegistration.d.ts.map +1 -1
- package/build/component/resource/botService/botRegistration/botFrameworkRegistration.js +9 -6
- package/build/component/resource/botService/botRegistration/botFrameworkRegistration.js.map +1 -1
- package/build/component/resource/botService/constants.d.ts +0 -13
- package/build/component/resource/botService/constants.d.ts.map +1 -1
- package/build/component/resource/botService/constants.js +1 -15
- package/build/component/resource/botService/constants.js.map +1 -1
- package/build/component/telemetry.d.ts.map +1 -1
- package/build/component/telemetry.js +6 -7
- package/build/component/telemetry.js.map +1 -1
- package/build/component/utils/ResourceGroupHelper.d.ts +10 -2
- package/build/component/utils/ResourceGroupHelper.d.ts.map +1 -1
- package/build/component/utils/ResourceGroupHelper.js +135 -42
- package/build/component/utils/ResourceGroupHelper.js.map +1 -1
- package/build/component/utils/charsetUtils.d.ts +1 -1
- package/build/component/utils/charsetUtils.d.ts.map +1 -1
- package/build/component/utils/charsetUtils.js +3 -1
- package/build/component/utils/charsetUtils.js.map +1 -1
- package/build/component/utils/depsChecker/common.d.ts +1 -3
- package/build/component/utils/depsChecker/common.d.ts.map +1 -1
- package/build/component/utils/depsChecker/common.js +0 -2
- package/build/component/utils/depsChecker/common.js.map +1 -1
- package/build/component/utils/envUtil.js +2 -2
- package/build/component/utils/envUtil.js.map +1 -1
- package/build/component/utils/metadataUtil.js +1 -1
- package/build/component/utils/metadataUtil.js.map +1 -1
- package/build/component/utils/pathUtils.d.ts.map +1 -1
- package/build/component/utils/pathUtils.js +9 -11
- package/build/component/utils/pathUtils.js.map +1 -1
- package/build/component/utils/settingsUtil.js +1 -1
- package/build/component/utils/settingsUtil.js.map +1 -1
- package/build/component/utils/teamsFxTelemetryReporter.d.ts.map +1 -1
- package/build/component/utils/teamsFxTelemetryReporter.js +6 -9
- package/build/component/utils/teamsFxTelemetryReporter.js.map +1 -1
- package/build/core/FxCore.d.ts +3 -4
- package/build/core/FxCore.d.ts.map +1 -1
- package/build/core/FxCore.js +74 -103
- package/build/core/FxCore.js.map +1 -1
- package/build/core/callback.d.ts +2 -2
- package/build/core/callback.d.ts.map +1 -1
- package/build/core/callback.js.map +1 -1
- package/build/core/collaborator.d.ts.map +1 -1
- package/build/core/collaborator.js +9 -11
- package/build/core/collaborator.js.map +1 -1
- package/build/core/crypto.d.ts.map +1 -1
- package/build/core/crypto.js +1 -2
- package/build/core/crypto.js.map +1 -1
- package/build/core/environmentName.d.ts +0 -1
- package/build/core/environmentName.d.ts.map +1 -1
- package/build/core/environmentName.js +0 -2
- package/build/core/environmentName.js.map +1 -1
- package/build/core/middleware/concurrentLocker.d.ts.map +1 -1
- package/build/core/middleware/concurrentLocker.js +11 -12
- package/build/core/middleware/concurrentLocker.js.map +1 -1
- package/build/core/middleware/errorHandler.js +1 -1
- package/build/core/middleware/errorHandler.js.map +1 -1
- package/build/core/middleware/projectMigratorV3.d.ts +5 -1
- package/build/core/middleware/projectMigratorV3.d.ts.map +1 -1
- package/build/core/middleware/projectMigratorV3.js +32 -28
- package/build/core/middleware/projectMigratorV3.js.map +1 -1
- package/build/core/middleware/projectSettingsLoader.js +1 -1
- package/build/core/middleware/projectSettingsLoader.js.map +1 -1
- package/build/core/middleware/projectVersionChecker.js +5 -5
- package/build/core/middleware/projectVersionChecker.js.map +1 -1
- package/build/core/middleware/utils/MigrationUtils.js +1 -1
- package/build/core/middleware/utils/MigrationUtils.js.map +1 -1
- package/build/core/middleware/utils/appYmlGenerator.d.ts +1 -0
- package/build/core/middleware/utils/appYmlGenerator.d.ts.map +1 -1
- package/build/core/middleware/utils/appYmlGenerator.js +12 -6
- package/build/core/middleware/utils/appYmlGenerator.js.map +1 -1
- package/build/core/middleware/utils/debug/taskMigrator.js +2 -2
- package/build/core/middleware/utils/debug/taskMigrator.js.map +1 -1
- package/build/core/middleware/utils/v3MigrationUtils.js +4 -4
- package/build/core/middleware/utils/v3MigrationUtils.js.map +1 -1
- package/build/core/middleware/videoFilterAppBlocker.d.ts +2 -0
- package/build/core/middleware/videoFilterAppBlocker.d.ts.map +1 -1
- package/build/core/middleware/videoFilterAppBlocker.js +21 -5
- package/build/core/middleware/videoFilterAppBlocker.js.map +1 -1
- package/build/core/telemetry.d.ts +0 -5
- package/build/core/telemetry.d.ts.map +1 -1
- package/build/core/telemetry.js +9 -17
- package/build/core/telemetry.js.map +1 -1
- package/build/error/common.d.ts +32 -0
- package/build/error/common.d.ts.map +1 -1
- package/build/error/common.js +101 -2
- package/build/error/common.js.map +1 -1
- package/build/error/teamsApp.d.ts +3 -0
- package/build/error/teamsApp.d.ts.map +1 -1
- package/build/error/teamsApp.js +12 -1
- package/build/error/teamsApp.js.map +1 -1
- package/build/error/yml.js +1 -1
- package/build/error/yml.js.map +1 -1
- package/build/index.d.ts +56 -36
- package/build/index.d.ts.map +1 -1
- package/build/index.js +125 -52
- package/build/index.js.map +1 -1
- package/build/question/constants.d.ts +249 -1
- package/build/question/constants.d.ts.map +1 -1
- package/build/question/constants.js +1091 -11
- package/build/question/constants.js.map +1 -1
- package/build/question/create.d.ts +10 -150
- package/build/question/create.d.ts.map +1 -1
- package/build/question/create.js +277 -1239
- package/build/question/create.js.map +1 -1
- package/build/question/index.d.ts +1 -3
- package/build/question/index.d.ts.map +1 -1
- package/build/question/index.js +2 -6
- package/build/question/index.js.map +1 -1
- package/build/question/inputs/CreateProjectInputs.d.ts +4 -4
- package/build/question/inputs/CreateProjectInputs.d.ts.map +1 -1
- package/build/question/options/CreateProjectOptions.js +14 -14
- package/build/question/options/CreateProjectOptions.js.map +1 -1
- package/build/question/other.d.ts +2 -28
- package/build/question/other.d.ts.map +1 -1
- package/build/question/other.js +66 -272
- package/build/question/other.js.map +1 -1
- package/package.json +11 -9
- package/resource/deps-checker/dotnet-install.ps1 +912 -423
- package/resource/deps-checker/dotnet-install.sh +876 -238
- package/resource/package.nls.json +7 -22
- package/resource/yaml-schema/v1.6/yaml.schema.json +1829 -0
- package/resource/yaml-schema/yaml.schema.json +46 -1
- package/templates/core/v3Migration/js.ts.app.local.yml +3 -3
- package/templates/fallback/common.zip +0 -0
- package/templates/fallback/csharp.zip +0 -0
- package/templates/fallback/js.zip +0 -0
- package/templates/fallback/python.zip +0 -0
- package/templates/fallback/ts.zip +0 -0
- package/templates/plugins/resource/aad/auth/V3/aad.manifest.template.json +6 -0
- package/templates/plugins/resource/aad/manifest/aad.template.json +6 -0
- package/templates/plugins/resource/aad/manifest/bot/aad.manifest.template.json +6 -0
- package/templates/plugins/resource/aad/manifest/tab/aad.manifest.template.json +6 -0
- package/build/common/deps-checker/checkerFactory.d.ts.map +0 -1
- package/build/common/deps-checker/checkerFactory.js.map +0 -1
- package/build/common/deps-checker/constant/helpLink.d.ts.map +0 -1
- package/build/common/deps-checker/constant/helpLink.js.map +0 -1
- package/build/common/deps-checker/constant/index.d.ts.map +0 -1
- package/build/common/deps-checker/constant/index.js.map +0 -1
- package/build/common/deps-checker/constant/message.d.ts.map +0 -1
- package/build/common/deps-checker/constant/message.js.map +0 -1
- package/build/common/deps-checker/constant/telemetry.d.ts.map +0 -1
- package/build/common/deps-checker/constant/telemetry.js.map +0 -1
- package/build/common/deps-checker/coreDepsLoggerAdapter.d.ts.map +0 -1
- package/build/common/deps-checker/coreDepsLoggerAdapter.js.map +0 -1
- package/build/common/deps-checker/coreDepsTelemetryAdapter.d.ts.map +0 -1
- package/build/common/deps-checker/coreDepsTelemetryAdapter.js.map +0 -1
- package/build/common/deps-checker/depsChecker.d.ts.map +0 -1
- package/build/common/deps-checker/depsChecker.js.map +0 -1
- package/build/common/deps-checker/depsError.d.ts.map +0 -1
- package/build/common/deps-checker/depsError.js.map +0 -1
- package/build/common/deps-checker/depsLogger.d.ts.map +0 -1
- package/build/common/deps-checker/depsLogger.js.map +0 -1
- package/build/common/deps-checker/depsManager.d.ts.map +0 -1
- package/build/common/deps-checker/depsManager.js.map +0 -1
- package/build/common/deps-checker/depsTelemetry.d.ts.map +0 -1
- package/build/common/deps-checker/depsTelemetry.js.map +0 -1
- package/build/common/deps-checker/index.d.ts.map +0 -1
- package/build/common/deps-checker/index.js.map +0 -1
- package/build/common/deps-checker/internal/dotnetChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/dotnetChecker.js.map +0 -1
- package/build/common/deps-checker/internal/funcToolChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/funcToolChecker.js.map +0 -1
- package/build/common/deps-checker/internal/nodeChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/nodeChecker.js.map +0 -1
- package/build/common/deps-checker/internal/testToolChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/testToolChecker.js.map +0 -1
- package/build/common/deps-checker/internal/vxTestAppChecker.d.ts.map +0 -1
- package/build/common/deps-checker/internal/vxTestAppChecker.js.map +0 -1
- package/build/common/deps-checker/util/cpUtils.d.ts.map +0 -1
- package/build/common/deps-checker/util/cpUtils.js.map +0 -1
- package/build/common/deps-checker/util/downloadHelper.d.ts.map +0 -1
- package/build/common/deps-checker/util/downloadHelper.js.map +0 -1
- package/build/common/deps-checker/util/fileHelper.d.ts.map +0 -1
- package/build/common/deps-checker/util/fileHelper.js.map +0 -1
- package/build/common/deps-checker/util/index.d.ts.map +0 -1
- package/build/common/deps-checker/util/index.js.map +0 -1
- package/build/common/deps-checker/util/progressIndicator.d.ts.map +0 -1
- package/build/common/deps-checker/util/progressIndicator.js.map +0 -1
- package/build/common/deps-checker/util/system.d.ts.map +0 -1
- package/build/common/deps-checker/util/system.js.map +0 -1
- package/build/common/local/constants.d.ts.map +0 -1
- package/build/common/local/constants.js.map +0 -1
- package/build/common/local/index.d.ts.map +0 -1
- package/build/common/local/index.js.map +0 -1
- package/build/common/local/localCertificateManager.d.ts.map +0 -1
- package/build/common/local/localCertificateManager.js.map +0 -1
- package/build/common/local/localEnvManager.d.ts.map +0 -1
- package/build/common/local/localEnvManager.js.map +0 -1
- package/build/common/local/localTelemetryReporter.d.ts.map +0 -1
- package/build/common/local/localTelemetryReporter.js.map +0 -1
- package/build/common/local/npmLogHelper.d.ts.map +0 -1
- package/build/common/local/npmLogHelper.js.map +0 -1
- package/build/common/local/packageJsonHelper.d.ts.map +0 -1
- package/build/common/local/packageJsonHelper.js.map +0 -1
- package/build/common/local/portChecker.d.ts.map +0 -1
- package/build/common/local/portChecker.js.map +0 -1
- package/build/common/local/process.d.ts.map +0 -1
- package/build/common/local/process.js.map +0 -1
- package/build/common/local/taskDefinition.d.ts.map +0 -1
- package/build/common/local/taskDefinition.js.map +0 -1
- package/build/common/m365/constants.d.ts.map +0 -1
- package/build/common/m365/constants.js.map +0 -1
- package/build/common/m365/errors.d.ts.map +0 -1
- package/build/common/m365/errors.js.map +0 -1
- package/build/common/m365/launchHelper.d.ts.map +0 -1
- package/build/common/m365/launchHelper.js.map +0 -1
- package/build/common/m365/packageService.d.ts.map +0 -1
- package/build/common/m365/packageService.js.map +0 -1
- package/build/common/m365/serviceConstant.d.ts +0 -3
- package/build/common/m365/serviceConstant.d.ts.map +0 -1
- package/build/common/m365/serviceConstant.js +0 -8
- package/build/common/m365/serviceConstant.js.map +0 -1
- package/build/common/projectSettingsHelperV3.d.ts +0 -2
- package/build/common/projectSettingsHelperV3.d.ts.map +0 -1
- package/build/common/projectSettingsHelperV3.js +0 -15
- package/build/common/projectSettingsHelperV3.js.map +0 -1
- package/build/component/utils.d.ts +0 -12
- package/build/component/utils.d.ts.map +0 -1
- package/build/component/utils.js +0 -136
- package/build/component/utils.js.map +0 -1
- package/build/component/workflow.d.ts +0 -4
- package/build/component/workflow.d.ts.map +0 -1
- package/build/component/workflow.js +0 -18
- package/build/component/workflow.js.map +0 -1
- package/build/core/error.d.ts +0 -32
- package/build/core/error.d.ts.map +0 -1
- package/build/core/error.js +0 -122
- package/build/core/error.js.map +0 -1
- package/build/core/globalVars.d.ts.map +0 -1
- package/build/core/globalVars.js.map +0 -1
- package/build/failpoint/index.d.ts +0 -3
- package/build/failpoint/index.d.ts.map +0 -1
- package/build/failpoint/index.js +0 -11
- package/build/failpoint/index.js.map +0 -1
- package/build/failpoint/marker.d.ts +0 -13
- package/build/failpoint/marker.d.ts.map +0 -1
- package/build/failpoint/marker.js +0 -8
- package/build/failpoint/marker.js.map +0 -1
- package/build/failpoint/runtime.d.ts +0 -12
- package/build/failpoint/runtime.d.ts.map +0 -1
- package/build/failpoint/runtime.js +0 -67
- package/build/failpoint/runtime.js.map +0 -1
- package/build/question/questionNames.d.ts +0 -78
- package/build/question/questionNames.d.ts.map +0 -1
- package/build/question/questionNames.js +0 -85
- package/build/question/questionNames.js.map +0 -1
- package/build/question/util.d.ts +0 -2
- package/build/question/util.d.ts.map +0 -1
- package/build/question/util.js +0 -18
- package/build/question/util.js.map +0 -1
- /package/build/{common → component}/deps-checker/checkerFactory.d.ts +0 -0
- /package/build/{common → component}/deps-checker/checkerFactory.js +0 -0
- /package/build/{common → component}/deps-checker/constant/index.d.ts +0 -0
- /package/build/{common → component}/deps-checker/constant/index.js +0 -0
- /package/build/{common → component}/deps-checker/constant/message.d.ts +0 -0
- /package/build/{common → component}/deps-checker/constant/telemetry.d.ts +0 -0
- /package/build/{common → component}/deps-checker/constant/telemetry.js +0 -0
- /package/build/{common → component}/deps-checker/coreDepsLoggerAdapter.d.ts +0 -0
- /package/build/{common → component}/deps-checker/coreDepsLoggerAdapter.js +0 -0
- /package/build/{common → component}/deps-checker/coreDepsTelemetryAdapter.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsChecker.js +0 -0
- /package/build/{common → component}/deps-checker/depsError.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsError.js +0 -0
- /package/build/{common → component}/deps-checker/depsLogger.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsLogger.js +0 -0
- /package/build/{common → component}/deps-checker/depsManager.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsManager.js +0 -0
- /package/build/{common → component}/deps-checker/depsTelemetry.d.ts +0 -0
- /package/build/{common → component}/deps-checker/depsTelemetry.js +0 -0
- /package/build/{common → component}/deps-checker/index.d.ts +0 -0
- /package/build/{common → component}/deps-checker/index.js +0 -0
- /package/build/{common → component}/deps-checker/internal/dotnetChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/internal/funcToolChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/internal/nodeChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/internal/nodeChecker.js +0 -0
- /package/build/{common → component}/deps-checker/internal/testToolChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/internal/vxTestAppChecker.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/cpUtils.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/cpUtils.js +0 -0
- /package/build/{common → component}/deps-checker/util/downloadHelper.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/downloadHelper.js +0 -0
- /package/build/{common → component}/deps-checker/util/fileHelper.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/fileHelper.js +0 -0
- /package/build/{common → component}/deps-checker/util/index.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/index.js +0 -0
- /package/build/{common → component}/deps-checker/util/progressIndicator.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/progressIndicator.js +0 -0
- /package/build/{common → component}/deps-checker/util/system.d.ts +0 -0
- /package/build/{common → component}/deps-checker/util/system.js +0 -0
- /package/build/{common → component}/local/index.d.ts +0 -0
- /package/build/{common → component}/local/index.js +0 -0
- /package/build/{common → component}/local/localCertificateManager.d.ts +0 -0
- /package/build/{common → component}/local/localEnvManager.d.ts +0 -0
- /package/build/{common → component}/local/localEnvManager.js +0 -0
- /package/build/{common → component}/local/localTelemetryReporter.d.ts +0 -0
- /package/build/{common → component}/local/npmLogHelper.d.ts +0 -0
- /package/build/{common → component}/local/npmLogHelper.js +0 -0
- /package/build/{common → component}/local/packageJsonHelper.d.ts +0 -0
- /package/build/{common → component}/local/packageJsonHelper.js +0 -0
- /package/build/{common → component}/local/portChecker.d.ts +0 -0
- /package/build/{common → component}/local/process.d.ts +0 -0
- /package/build/{common → component}/local/process.js +0 -0
- /package/build/{common → component}/local/taskDefinition.d.ts +0 -0
- /package/build/{common → component}/m365/constants.d.ts +0 -0
- /package/build/{common → component}/m365/constants.js +0 -0
- /package/build/{common → component}/m365/errors.d.ts +0 -0
- /package/build/{common → component}/m365/packageService.d.ts +0 -0
|
@@ -9,22 +9,41 @@
|
|
|
9
9
|
.DESCRIPTION
|
|
10
10
|
Installs dotnet cli. If dotnet installation already exists in the given directory
|
|
11
11
|
it will update it only if the requested version differs from the one already installed.
|
|
12
|
+
|
|
13
|
+
Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:
|
|
14
|
+
- The SDK needs to be installed without user interaction and without admin rights.
|
|
15
|
+
- The SDK installation doesn't need to persist across multiple CI runs.
|
|
16
|
+
To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.
|
|
17
|
+
|
|
12
18
|
.PARAMETER Channel
|
|
13
19
|
Default: LTS
|
|
14
20
|
Download from the Channel specified. Possible values:
|
|
15
|
-
-
|
|
16
|
-
- LTS - most
|
|
21
|
+
- STS - the most recent Standard Term Support release
|
|
22
|
+
- LTS - the most recent Long Term Support release
|
|
17
23
|
- 2-part version in a format A.B - represents a specific release
|
|
18
24
|
examples: 2.0, 1.0
|
|
19
|
-
-
|
|
20
|
-
examples:
|
|
21
|
-
|
|
25
|
+
- 3-part version in a format A.B.Cxx - represents a specific SDK release
|
|
26
|
+
examples: 5.0.1xx, 5.0.2xx
|
|
27
|
+
Supported since 5.0 release
|
|
28
|
+
Warning: Value "Current" is deprecated for the Channel parameter. Use "STS" instead.
|
|
29
|
+
Note: The version parameter overrides the channel parameter when any version other than 'latest' is used.
|
|
30
|
+
.PARAMETER Quality
|
|
31
|
+
Download the latest build of specified quality in the channel. The possible values are: daily, signed, validated, preview, GA.
|
|
32
|
+
Works only in combination with channel. Not applicable for STS and LTS channels and will be ignored if those channels are used.
|
|
33
|
+
For SDK use channel in A.B.Cxx format: using quality together with channel in A.B format is not supported.
|
|
34
|
+
Supported since 5.0 release.
|
|
35
|
+
Note: The version parameter overrides the channel parameter when any version other than 'latest' is used, and therefore overrides the quality.
|
|
22
36
|
.PARAMETER Version
|
|
23
37
|
Default: latest
|
|
24
38
|
Represents a build version on specific channel. Possible values:
|
|
25
|
-
- latest -
|
|
39
|
+
- latest - the latest build on specific channel
|
|
26
40
|
- 3-part version in a format A.B.C - represents specific version of build
|
|
27
41
|
examples: 2.0.0-preview2-006120, 1.1.0
|
|
42
|
+
.PARAMETER Internal
|
|
43
|
+
Download internal builds. Requires providing credentials via -FeedCredential parameter.
|
|
44
|
+
.PARAMETER FeedCredential
|
|
45
|
+
Token to access Azure feed. Used as a query string to append to the Azure feed.
|
|
46
|
+
This parameter typically is not specified.
|
|
28
47
|
.PARAMETER InstallDir
|
|
29
48
|
Default: %LocalAppData%\Microsoft\dotnet
|
|
30
49
|
Path to where to install dotnet. Note that binaries will be placed directly in a given directory.
|
|
@@ -54,14 +73,13 @@
|
|
|
54
73
|
Displays diagnostics information.
|
|
55
74
|
.PARAMETER AzureFeed
|
|
56
75
|
Default: https://dotnetcli.azureedge.net/dotnet
|
|
57
|
-
|
|
58
|
-
|
|
76
|
+
For internal use only.
|
|
77
|
+
Allows using a different storage to download SDK archives from.
|
|
78
|
+
This parameter is only used if $NoCdn is false.
|
|
59
79
|
.PARAMETER UncachedFeed
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
.
|
|
63
|
-
Used as a query string to append to the Azure feed.
|
|
64
|
-
It allows changing the URL to use non-public blob storage accounts.
|
|
80
|
+
For internal use only.
|
|
81
|
+
Allows using a different storage to download SDK archives from.
|
|
82
|
+
This parameter is only used if $NoCdn is true.
|
|
65
83
|
.PARAMETER ProxyAddress
|
|
66
84
|
If set, the installer will use the proxy when making web requests
|
|
67
85
|
.PARAMETER ProxyUseDefaultCredentials
|
|
@@ -77,48 +95,52 @@
|
|
|
77
95
|
.PARAMETER JSonFile
|
|
78
96
|
Determines the SDK version from a user specified global.json file
|
|
79
97
|
Note: global.json must have a value for 'SDK:Version'
|
|
98
|
+
.PARAMETER DownloadTimeout
|
|
99
|
+
Determines timeout duration in seconds for dowloading of the SDK file
|
|
100
|
+
Default: 1200 seconds (20 minutes)
|
|
101
|
+
.PARAMETER KeepZip
|
|
102
|
+
If set, downloaded file is kept
|
|
103
|
+
.PARAMETER ZipPath
|
|
104
|
+
Use that path to store installer, generated by default
|
|
105
|
+
.EXAMPLE
|
|
106
|
+
dotnet-install.ps1 -Version 7.0.401
|
|
107
|
+
Installs the .NET SDK version 7.0.401
|
|
108
|
+
.EXAMPLE
|
|
109
|
+
dotnet-install.ps1 -Channel 8.0 -Quality GA
|
|
110
|
+
Installs the latest GA (general availability) version of the .NET 8.0 SDK
|
|
80
111
|
#>
|
|
81
112
|
[cmdletbinding()]
|
|
82
113
|
param(
|
|
83
114
|
[string]$Channel="LTS",
|
|
115
|
+
[string]$Quality,
|
|
84
116
|
[string]$Version="Latest",
|
|
117
|
+
[switch]$Internal,
|
|
85
118
|
[string]$JSonFile,
|
|
86
|
-
[string]$InstallDir="<auto>",
|
|
119
|
+
[Alias('i')][string]$InstallDir="<auto>",
|
|
87
120
|
[string]$Architecture="<auto>",
|
|
88
|
-
[ValidateSet("dotnet", "aspnetcore", "windowsdesktop", IgnoreCase = $false)]
|
|
89
121
|
[string]$Runtime,
|
|
90
122
|
[Obsolete("This parameter may be removed in a future version of this script. The recommended alternative is '-Runtime dotnet'.")]
|
|
91
123
|
[switch]$SharedRuntime,
|
|
92
124
|
[switch]$DryRun,
|
|
93
125
|
[switch]$NoPath,
|
|
94
|
-
[string]$AzureFeed
|
|
95
|
-
[string]$UncachedFeed
|
|
126
|
+
[string]$AzureFeed,
|
|
127
|
+
[string]$UncachedFeed,
|
|
96
128
|
[string]$FeedCredential,
|
|
97
129
|
[string]$ProxyAddress,
|
|
98
130
|
[switch]$ProxyUseDefaultCredentials,
|
|
99
131
|
[string[]]$ProxyBypassList=@(),
|
|
100
132
|
[switch]$SkipNonVersionedFiles,
|
|
101
|
-
[switch]$NoCdn
|
|
133
|
+
[switch]$NoCdn,
|
|
134
|
+
[int]$DownloadTimeout=1200,
|
|
135
|
+
[switch]$KeepZip,
|
|
136
|
+
[string]$ZipPath=[System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName()),
|
|
137
|
+
[switch]$Help
|
|
102
138
|
)
|
|
103
139
|
|
|
104
140
|
Set-StrictMode -Version Latest
|
|
105
141
|
$ErrorActionPreference="Stop"
|
|
106
142
|
$ProgressPreference="SilentlyContinue"
|
|
107
143
|
|
|
108
|
-
if ($NoCdn) {
|
|
109
|
-
$AzureFeed = $UncachedFeed
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
$BinFolderRelativePath=""
|
|
113
|
-
|
|
114
|
-
if ($SharedRuntime -and (-not $Runtime)) {
|
|
115
|
-
$Runtime = "dotnet"
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
# example path with regex: shared/1.0.0-beta-12345/somepath
|
|
119
|
-
$VersionRegEx="/\d+\.\d+[^/]+/"
|
|
120
|
-
$OverrideNonVersionedFiles = !$SkipNonVersionedFiles
|
|
121
|
-
|
|
122
144
|
function Say($str) {
|
|
123
145
|
try {
|
|
124
146
|
Write-Host "dotnet-install: $str"
|
|
@@ -161,14 +183,38 @@ function Say-Verbose($str) {
|
|
|
161
183
|
}
|
|
162
184
|
}
|
|
163
185
|
|
|
186
|
+
function Measure-Action($name, $block) {
|
|
187
|
+
$time = Measure-Command $block
|
|
188
|
+
$totalSeconds = $time.TotalSeconds
|
|
189
|
+
Say-Verbose "⏱ Action '$name' took $totalSeconds seconds"
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function Get-Remote-File-Size($zipUri) {
|
|
193
|
+
try {
|
|
194
|
+
$response = Invoke-WebRequest -Uri $zipUri -Method Head
|
|
195
|
+
$fileSize = $response.Headers["Content-Length"]
|
|
196
|
+
if ((![string]::IsNullOrEmpty($fileSize))) {
|
|
197
|
+
Say "Remote file $zipUri size is $fileSize bytes."
|
|
198
|
+
|
|
199
|
+
return $fileSize
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
Say-Verbose "Content-Length header was not extracted for $zipUri."
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return $null
|
|
207
|
+
}
|
|
208
|
+
|
|
164
209
|
function Say-Invocation($Invocation) {
|
|
165
210
|
$command = $Invocation.MyCommand;
|
|
166
211
|
$args = (($Invocation.BoundParameters.Keys | foreach { "-$_ `"$($Invocation.BoundParameters[$_])`"" }) -join " ")
|
|
167
212
|
Say-Verbose "$command $args"
|
|
168
213
|
}
|
|
169
214
|
|
|
170
|
-
function Invoke-With-Retry([ScriptBlock]$ScriptBlock, [int]$MaxAttempts = 3, [int]$SecondsBetweenAttempts = 1) {
|
|
215
|
+
function Invoke-With-Retry([ScriptBlock]$ScriptBlock, [System.Threading.CancellationToken]$cancellationToken = [System.Threading.CancellationToken]::None, [int]$MaxAttempts = 3, [int]$SecondsBetweenAttempts = 1) {
|
|
171
216
|
$Attempts = 0
|
|
217
|
+
$local:startTime = $(get-date)
|
|
172
218
|
|
|
173
219
|
while ($true) {
|
|
174
220
|
try {
|
|
@@ -176,11 +222,15 @@ function Invoke-With-Retry([ScriptBlock]$ScriptBlock, [int]$MaxAttempts = 3, [in
|
|
|
176
222
|
}
|
|
177
223
|
catch {
|
|
178
224
|
$Attempts++
|
|
179
|
-
if ($Attempts -lt $MaxAttempts) {
|
|
225
|
+
if (($Attempts -lt $MaxAttempts) -and -not $cancellationToken.IsCancellationRequested) {
|
|
180
226
|
Start-Sleep $SecondsBetweenAttempts
|
|
181
227
|
}
|
|
182
228
|
else {
|
|
183
|
-
|
|
229
|
+
$local:elapsedTime = $(get-date) - $local:startTime
|
|
230
|
+
if (($local:elapsedTime.TotalSeconds - $DownloadTimeout) -gt 0 -and -not $cancellationToken.IsCancellationRequested) {
|
|
231
|
+
throw New-Object System.TimeoutException("Failed to reach the server: connection timeout: default timeout is $DownloadTimeout second(s)");
|
|
232
|
+
}
|
|
233
|
+
throw;
|
|
184
234
|
}
|
|
185
235
|
}
|
|
186
236
|
}
|
|
@@ -193,20 +243,34 @@ function Get-Machine-Architecture() {
|
|
|
193
243
|
# To get the correct architecture, we need to use PROCESSOR_ARCHITEW6432.
|
|
194
244
|
# PS x64 doesn't define this, so we fall back to PROCESSOR_ARCHITECTURE.
|
|
195
245
|
# Possible values: amd64, x64, x86, arm64, arm
|
|
196
|
-
|
|
197
|
-
if( $ENV:PROCESSOR_ARCHITEW6432 -ne $null )
|
|
198
|
-
{
|
|
246
|
+
if( $ENV:PROCESSOR_ARCHITEW6432 -ne $null ) {
|
|
199
247
|
return $ENV:PROCESSOR_ARCHITEW6432
|
|
200
248
|
}
|
|
201
249
|
|
|
250
|
+
try {
|
|
251
|
+
if( ((Get-CimInstance -ClassName CIM_OperatingSystem).OSArchitecture) -like "ARM*") {
|
|
252
|
+
if( [Environment]::Is64BitOperatingSystem )
|
|
253
|
+
{
|
|
254
|
+
return "arm64"
|
|
255
|
+
}
|
|
256
|
+
return "arm"
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
# Machine doesn't support Get-CimInstance
|
|
261
|
+
}
|
|
262
|
+
|
|
202
263
|
return $ENV:PROCESSOR_ARCHITECTURE
|
|
203
264
|
}
|
|
204
265
|
|
|
205
266
|
function Get-CLIArchitecture-From-Architecture([string]$Architecture) {
|
|
206
267
|
Say-Invocation $MyInvocation
|
|
207
268
|
|
|
208
|
-
|
|
209
|
-
|
|
269
|
+
if ($Architecture -eq "<auto>") {
|
|
270
|
+
$Architecture = Get-Machine-Architecture
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
switch ($Architecture.ToLowerInvariant()) {
|
|
210
274
|
{ ($_ -eq "amd64") -or ($_ -eq "x64") } { return "x64" }
|
|
211
275
|
{ $_ -eq "x86" } { return "x86" }
|
|
212
276
|
{ $_ -eq "arm" } { return "arm" }
|
|
@@ -215,13 +279,83 @@ function Get-CLIArchitecture-From-Architecture([string]$Architecture) {
|
|
|
215
279
|
}
|
|
216
280
|
}
|
|
217
281
|
|
|
282
|
+
function ValidateFeedCredential([string] $FeedCredential)
|
|
283
|
+
{
|
|
284
|
+
if ($Internal -and [string]::IsNullOrWhitespace($FeedCredential)) {
|
|
285
|
+
$message = "Provide credentials via -FeedCredential parameter."
|
|
286
|
+
if ($DryRun) {
|
|
287
|
+
Say-Warning "$message"
|
|
288
|
+
} else {
|
|
289
|
+
throw "$message"
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
#FeedCredential should start with "?", for it to be added to the end of the link.
|
|
294
|
+
#adding "?" at the beginning of the FeedCredential if needed.
|
|
295
|
+
if ((![string]::IsNullOrWhitespace($FeedCredential)) -and ($FeedCredential[0] -ne '?')) {
|
|
296
|
+
$FeedCredential = "?" + $FeedCredential
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return $FeedCredential
|
|
300
|
+
}
|
|
301
|
+
function Get-NormalizedQuality([string]$Quality) {
|
|
302
|
+
Say-Invocation $MyInvocation
|
|
303
|
+
|
|
304
|
+
if ([string]::IsNullOrEmpty($Quality)) {
|
|
305
|
+
return ""
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
switch ($Quality) {
|
|
309
|
+
{ @("daily", "signed", "validated", "preview") -contains $_ } { return $Quality.ToLowerInvariant() }
|
|
310
|
+
#ga quality is available without specifying quality, so normalizing it to empty
|
|
311
|
+
{ $_ -eq "ga" } { return "" }
|
|
312
|
+
default { throw "'$Quality' is not a supported value for -Quality option. Supported values are: daily, signed, validated, preview, ga. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues." }
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function Get-NormalizedChannel([string]$Channel) {
|
|
317
|
+
Say-Invocation $MyInvocation
|
|
318
|
+
|
|
319
|
+
if ([string]::IsNullOrEmpty($Channel)) {
|
|
320
|
+
return ""
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if ($Channel.Contains("Current")) {
|
|
324
|
+
Say-Warning 'Value "Current" is deprecated for -Channel option. Use "STS" instead.'
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if ($Channel.StartsWith('release/')) {
|
|
328
|
+
Say-Warning 'Using branch name with -Channel option is no longer supported with newer releases. Use -Quality option with a channel in X.Y format instead, such as "-Channel 5.0 -Quality Daily."'
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
switch ($Channel) {
|
|
332
|
+
{ $_ -eq "lts" } { return "LTS" }
|
|
333
|
+
{ $_ -eq "sts" } { return "STS" }
|
|
334
|
+
{ $_ -eq "current" } { return "STS" }
|
|
335
|
+
default { return $Channel.ToLowerInvariant() }
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
function Get-NormalizedProduct([string]$Runtime) {
|
|
340
|
+
Say-Invocation $MyInvocation
|
|
341
|
+
|
|
342
|
+
switch ($Runtime) {
|
|
343
|
+
{ $_ -eq "dotnet" } { return "dotnet-runtime" }
|
|
344
|
+
{ $_ -eq "aspnetcore" } { return "aspnetcore-runtime" }
|
|
345
|
+
{ $_ -eq "windowsdesktop" } { return "windowsdesktop-runtime" }
|
|
346
|
+
{ [string]::IsNullOrEmpty($_) } { return "dotnet-sdk" }
|
|
347
|
+
default { throw "'$Runtime' is not a supported value for -Runtime option, supported values are: dotnet, aspnetcore, windowsdesktop. If you think this is a bug, report it at https://github.com/dotnet/install-scripts/issues." }
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
|
|
218
352
|
# The version text returned from the feeds is a 1-line or 2-line string:
|
|
219
353
|
# For the SDK and the dotnet runtime (2 lines):
|
|
220
354
|
# Line 1: # commit_hash
|
|
221
355
|
# Line 2: # 4-part version
|
|
222
356
|
# For the aspnetcore runtime (1 line):
|
|
223
357
|
# Line 1: # 4-part version
|
|
224
|
-
function Get-Version-
|
|
358
|
+
function Get-Version-From-LatestVersion-File-Content([string]$VersionText) {
|
|
225
359
|
Say-Invocation $MyInvocation
|
|
226
360
|
|
|
227
361
|
$Data = -split $VersionText
|
|
@@ -243,10 +377,11 @@ function Load-Assembly([string] $Assembly) {
|
|
|
243
377
|
}
|
|
244
378
|
}
|
|
245
379
|
|
|
246
|
-
function GetHTTPResponse([Uri] $Uri)
|
|
380
|
+
function GetHTTPResponse([Uri] $Uri, [bool]$HeaderOnly, [bool]$DisableRedirect, [bool]$DisableFeedCredential)
|
|
247
381
|
{
|
|
248
|
-
|
|
249
|
-
|
|
382
|
+
$cts = New-Object System.Threading.CancellationTokenSource
|
|
383
|
+
|
|
384
|
+
$downloadScript = {
|
|
250
385
|
|
|
251
386
|
$HttpClient = $null
|
|
252
387
|
|
|
@@ -259,7 +394,11 @@ function GetHTTPResponse([Uri] $Uri)
|
|
|
259
394
|
# Despite no proxy being explicitly specified, we may still be behind a default proxy
|
|
260
395
|
$DefaultProxy = [System.Net.WebRequest]::DefaultWebProxy;
|
|
261
396
|
if($DefaultProxy -and (-not $DefaultProxy.IsBypassed($Uri))) {
|
|
262
|
-
$
|
|
397
|
+
if ($null -ne $DefaultProxy.GetProxy($Uri)) {
|
|
398
|
+
$ProxyAddress = $DefaultProxy.GetProxy($Uri).OriginalString
|
|
399
|
+
} else {
|
|
400
|
+
$ProxyAddress = $null
|
|
401
|
+
}
|
|
263
402
|
$ProxyUseDefaultCredentials = $true
|
|
264
403
|
}
|
|
265
404
|
} catch {
|
|
@@ -270,32 +409,53 @@ function GetHTTPResponse([Uri] $Uri)
|
|
|
270
409
|
}
|
|
271
410
|
}
|
|
272
411
|
|
|
412
|
+
$HttpClientHandler = New-Object System.Net.Http.HttpClientHandler
|
|
273
413
|
if($ProxyAddress) {
|
|
274
|
-
$HttpClientHandler = New-Object System.Net.Http.HttpClientHandler
|
|
275
414
|
$HttpClientHandler.Proxy = New-Object System.Net.WebProxy -Property @{
|
|
276
415
|
Address=$ProxyAddress;
|
|
277
416
|
UseDefaultCredentials=$ProxyUseDefaultCredentials;
|
|
278
417
|
BypassList = $ProxyBypassList;
|
|
279
418
|
}
|
|
280
|
-
|
|
419
|
+
}
|
|
420
|
+
if ($DisableRedirect)
|
|
421
|
+
{
|
|
422
|
+
$HttpClientHandler.AllowAutoRedirect = $false
|
|
423
|
+
}
|
|
424
|
+
$HttpClient = New-Object System.Net.Http.HttpClient -ArgumentList $HttpClientHandler
|
|
425
|
+
|
|
426
|
+
# Default timeout for HttpClient is 100s. For a 50 MB download this assumes 500 KB/s average, any less will time out
|
|
427
|
+
# Defaulting to 20 minutes allows it to work over much slower connections.
|
|
428
|
+
$HttpClient.Timeout = New-TimeSpan -Seconds $DownloadTimeout
|
|
429
|
+
|
|
430
|
+
if ($HeaderOnly){
|
|
431
|
+
$completionOption = [System.Net.Http.HttpCompletionOption]::ResponseHeadersRead
|
|
281
432
|
}
|
|
282
433
|
else {
|
|
434
|
+
$completionOption = [System.Net.Http.HttpCompletionOption]::ResponseContentRead
|
|
435
|
+
}
|
|
283
436
|
|
|
284
|
-
|
|
437
|
+
if ($DisableFeedCredential) {
|
|
438
|
+
$UriWithCredential = $Uri
|
|
285
439
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
440
|
+
else {
|
|
441
|
+
$UriWithCredential = "${Uri}${FeedCredential}"
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
$Task = $HttpClient.GetAsync("$UriWithCredential", $completionOption).ConfigureAwait("false");
|
|
290
445
|
$Response = $Task.GetAwaiter().GetResult();
|
|
291
446
|
|
|
292
|
-
if (($null -eq $Response) -or (-not ($Response.IsSuccessStatusCode))) {
|
|
447
|
+
if (($null -eq $Response) -or ((-not $HeaderOnly) -and (-not ($Response.IsSuccessStatusCode)))) {
|
|
293
448
|
# The feed credential is potentially sensitive info. Do not log FeedCredential to console output.
|
|
294
449
|
$DownloadException = [System.Exception] "Unable to download $Uri."
|
|
295
450
|
|
|
296
451
|
if ($null -ne $Response) {
|
|
297
452
|
$DownloadException.Data["StatusCode"] = [int] $Response.StatusCode
|
|
298
453
|
$DownloadException.Data["ErrorMessage"] = "Unable to download $Uri. Returned HTTP status code: " + $DownloadException.Data["StatusCode"]
|
|
454
|
+
|
|
455
|
+
if (404 -eq [int] $Response.StatusCode)
|
|
456
|
+
{
|
|
457
|
+
$cts.Cancel()
|
|
458
|
+
}
|
|
299
459
|
}
|
|
300
460
|
|
|
301
461
|
throw $DownloadException
|
|
@@ -323,37 +483,51 @@ function GetHTTPResponse([Uri] $Uri)
|
|
|
323
483
|
throw $DownloadException
|
|
324
484
|
}
|
|
325
485
|
finally {
|
|
326
|
-
if ($
|
|
486
|
+
if ($null -ne $HttpClient) {
|
|
327
487
|
$HttpClient.Dispose()
|
|
328
488
|
}
|
|
329
489
|
}
|
|
330
|
-
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
try {
|
|
493
|
+
return Invoke-With-Retry $downloadScript $cts.Token
|
|
494
|
+
}
|
|
495
|
+
finally
|
|
496
|
+
{
|
|
497
|
+
if ($null -ne $cts)
|
|
498
|
+
{
|
|
499
|
+
$cts.Dispose()
|
|
500
|
+
}
|
|
501
|
+
}
|
|
331
502
|
}
|
|
332
503
|
|
|
333
|
-
function Get-
|
|
504
|
+
function Get-Version-From-LatestVersion-File([string]$AzureFeed, [string]$Channel) {
|
|
334
505
|
Say-Invocation $MyInvocation
|
|
335
506
|
|
|
336
507
|
$VersionFileUrl = $null
|
|
337
508
|
if ($Runtime -eq "dotnet") {
|
|
338
|
-
$VersionFileUrl = "$
|
|
509
|
+
$VersionFileUrl = "$AzureFeed/Runtime/$Channel/latest.version"
|
|
339
510
|
}
|
|
340
511
|
elseif ($Runtime -eq "aspnetcore") {
|
|
341
|
-
$VersionFileUrl = "$
|
|
512
|
+
$VersionFileUrl = "$AzureFeed/aspnetcore/Runtime/$Channel/latest.version"
|
|
342
513
|
}
|
|
343
514
|
elseif ($Runtime -eq "windowsdesktop") {
|
|
344
|
-
$VersionFileUrl = "$
|
|
515
|
+
$VersionFileUrl = "$AzureFeed/WindowsDesktop/$Channel/latest.version"
|
|
345
516
|
}
|
|
346
517
|
elseif (-not $Runtime) {
|
|
347
|
-
$VersionFileUrl = "$
|
|
518
|
+
$VersionFileUrl = "$AzureFeed/Sdk/$Channel/latest.version"
|
|
348
519
|
}
|
|
349
520
|
else {
|
|
350
521
|
throw "Invalid value for `$Runtime"
|
|
351
522
|
}
|
|
523
|
+
|
|
524
|
+
Say-Verbose "Constructed latest.version URL: $VersionFileUrl"
|
|
525
|
+
|
|
352
526
|
try {
|
|
353
527
|
$Response = GetHTTPResponse -Uri $VersionFileUrl
|
|
354
528
|
}
|
|
355
529
|
catch {
|
|
356
|
-
Say-
|
|
530
|
+
Say-Verbose "Failed to download latest.version file."
|
|
357
531
|
throw
|
|
358
532
|
}
|
|
359
533
|
$StringContent = $Response.Content.ReadAsStringAsync().Result
|
|
@@ -365,7 +539,7 @@ function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel) {
|
|
|
365
539
|
default { throw "``$Response.Content.Headers.ContentType`` is an unknown .version file content type." }
|
|
366
540
|
}
|
|
367
541
|
|
|
368
|
-
$VersionInfo = Get-Version-
|
|
542
|
+
$VersionInfo = Get-Version-From-LatestVersion-File-Content $VersionText
|
|
369
543
|
|
|
370
544
|
return $VersionInfo
|
|
371
545
|
}
|
|
@@ -411,8 +585,8 @@ function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$Channel,
|
|
|
411
585
|
Say-Invocation $MyInvocation
|
|
412
586
|
|
|
413
587
|
if (-not $JSonFile) {
|
|
414
|
-
if ($Version.
|
|
415
|
-
$LatestVersionInfo = Get-
|
|
588
|
+
if ($Version.ToLowerInvariant() -eq "latest") {
|
|
589
|
+
$LatestVersionInfo = Get-Version-From-LatestVersion-File -AzureFeed $AzureFeed -Channel $Channel
|
|
416
590
|
return $LatestVersionInfo.Version
|
|
417
591
|
}
|
|
418
592
|
else {
|
|
@@ -478,58 +652,116 @@ function Get-LegacyDownload-Link([string]$AzureFeed, [string]$SpecificVersion, [
|
|
|
478
652
|
return $PayloadURL
|
|
479
653
|
}
|
|
480
654
|
|
|
481
|
-
function Get-Product-Version([string]$AzureFeed, [string]$SpecificVersion) {
|
|
655
|
+
function Get-Product-Version([string]$AzureFeed, [string]$SpecificVersion, [string]$PackageDownloadLink) {
|
|
482
656
|
Say-Invocation $MyInvocation
|
|
483
657
|
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
658
|
+
# Try to get the version number, using the productVersion.txt file located next to the installer file.
|
|
659
|
+
$ProductVersionTxtURLs = (Get-Product-Version-Url $AzureFeed $SpecificVersion $PackageDownloadLink -Flattened $true),
|
|
660
|
+
(Get-Product-Version-Url $AzureFeed $SpecificVersion $PackageDownloadLink -Flattened $false)
|
|
661
|
+
|
|
662
|
+
Foreach ($ProductVersionTxtURL in $ProductVersionTxtURLs) {
|
|
663
|
+
Say-Verbose "Checking for the existence of $ProductVersionTxtURL"
|
|
664
|
+
|
|
665
|
+
try {
|
|
666
|
+
$productVersionResponse = GetHTTPResponse($productVersionTxtUrl)
|
|
667
|
+
|
|
668
|
+
if ($productVersionResponse.StatusCode -eq 200) {
|
|
669
|
+
$productVersion = $productVersionResponse.Content.ReadAsStringAsync().Result.Trim()
|
|
670
|
+
if ($productVersion -ne $SpecificVersion)
|
|
671
|
+
{
|
|
672
|
+
Say "Using alternate version $productVersion found in $ProductVersionTxtURL"
|
|
673
|
+
}
|
|
674
|
+
return $productVersion
|
|
499
675
|
}
|
|
676
|
+
else {
|
|
677
|
+
Say-Verbose "Got StatusCode $($productVersionResponse.StatusCode) when trying to get productVersion.txt at $productVersionTxtUrl."
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
catch {
|
|
681
|
+
Say-Verbose "Could not read productVersion.txt at $productVersionTxtUrl (Exception: '$($_.Exception.Message)'. )"
|
|
500
682
|
}
|
|
501
683
|
}
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
684
|
+
|
|
685
|
+
# Getting the version number with productVersion.txt has failed. Try parsing the download link for a version number.
|
|
686
|
+
if ([string]::IsNullOrEmpty($PackageDownloadLink))
|
|
687
|
+
{
|
|
688
|
+
Say-Verbose "Using the default value '$SpecificVersion' as the product version."
|
|
689
|
+
return $SpecificVersion
|
|
507
690
|
}
|
|
508
691
|
|
|
509
|
-
|
|
692
|
+
$productVersion = Get-ProductVersionFromDownloadLink $PackageDownloadLink $SpecificVersion
|
|
693
|
+
return $productVersion
|
|
694
|
+
}
|
|
510
695
|
|
|
511
|
-
|
|
512
|
-
|
|
696
|
+
function Get-Product-Version-Url([string]$AzureFeed, [string]$SpecificVersion, [string]$PackageDownloadLink, [bool]$Flattened) {
|
|
697
|
+
Say-Invocation $MyInvocation
|
|
513
698
|
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
Say "Using alternate version $productVersion found in $ProductVersionTxtURL"
|
|
519
|
-
}
|
|
699
|
+
$majorVersion=$null
|
|
700
|
+
if ($SpecificVersion -match '^(\d+)\.(.*)') {
|
|
701
|
+
$majorVersion = $Matches[1] -as[int]
|
|
702
|
+
}
|
|
520
703
|
|
|
521
|
-
|
|
704
|
+
$pvFileName='productVersion.txt'
|
|
705
|
+
if($Flattened) {
|
|
706
|
+
if(-not $Runtime) {
|
|
707
|
+
$pvFileName='sdk-productVersion.txt'
|
|
708
|
+
}
|
|
709
|
+
elseif($Runtime -eq "dotnet") {
|
|
710
|
+
$pvFileName='runtime-productVersion.txt'
|
|
522
711
|
}
|
|
523
712
|
else {
|
|
524
|
-
|
|
525
|
-
$productVersion = $SpecificVersion
|
|
713
|
+
$pvFileName="$Runtime-productVersion.txt"
|
|
526
714
|
}
|
|
527
|
-
} catch {
|
|
528
|
-
Say-Verbose "Could not read productVersion.txt at $productVersionTxtUrl, so using default value of $SpecificVersion (Exception: '$($_.Exception.Message)' )"
|
|
529
|
-
$productVersion = $SpecificVersion
|
|
530
715
|
}
|
|
531
716
|
|
|
532
|
-
|
|
717
|
+
if ([string]::IsNullOrEmpty($PackageDownloadLink)) {
|
|
718
|
+
if ($Runtime -eq "dotnet") {
|
|
719
|
+
$ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/$pvFileName"
|
|
720
|
+
}
|
|
721
|
+
elseif ($Runtime -eq "aspnetcore") {
|
|
722
|
+
$ProductVersionTxtURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/$pvFileName"
|
|
723
|
+
}
|
|
724
|
+
elseif ($Runtime -eq "windowsdesktop") {
|
|
725
|
+
# The windows desktop runtime is part of the core runtime layout prior to 5.0
|
|
726
|
+
$ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/$pvFileName"
|
|
727
|
+
if ($majorVersion -ne $null -and $majorVersion -ge 5) {
|
|
728
|
+
$ProductVersionTxtURL = "$AzureFeed/WindowsDesktop/$SpecificVersion/$pvFileName"
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
elseif (-not $Runtime) {
|
|
732
|
+
$ProductVersionTxtURL = "$AzureFeed/Sdk/$SpecificVersion/$pvFileName"
|
|
733
|
+
}
|
|
734
|
+
else {
|
|
735
|
+
throw "Invalid value '$Runtime' specified for `$Runtime"
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
else {
|
|
739
|
+
$ProductVersionTxtURL = $PackageDownloadLink.Substring(0, $PackageDownloadLink.LastIndexOf("/")) + "/$pvFileName"
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
Say-Verbose "Constructed productVersion link: $ProductVersionTxtURL"
|
|
743
|
+
|
|
744
|
+
return $ProductVersionTxtURL
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
function Get-ProductVersionFromDownloadLink([string]$PackageDownloadLink, [string]$SpecificVersion)
|
|
748
|
+
{
|
|
749
|
+
Say-Invocation $MyInvocation
|
|
750
|
+
|
|
751
|
+
#product specific version follows the product name
|
|
752
|
+
#for filename 'dotnet-sdk-3.1.404-win-x64.zip': the product version is 3.1.400
|
|
753
|
+
$filename = $PackageDownloadLink.Substring($PackageDownloadLink.LastIndexOf("/") + 1)
|
|
754
|
+
$filenameParts = $filename.Split('-')
|
|
755
|
+
if ($filenameParts.Length -gt 2)
|
|
756
|
+
{
|
|
757
|
+
$productVersion = $filenameParts[2]
|
|
758
|
+
Say-Verbose "Extracted product version '$productVersion' from download link '$PackageDownloadLink'."
|
|
759
|
+
}
|
|
760
|
+
else {
|
|
761
|
+
Say-Verbose "Using the default value '$SpecificVersion' as the product version."
|
|
762
|
+
$productVersion = $SpecificVersion
|
|
763
|
+
}
|
|
764
|
+
return $productVersion
|
|
533
765
|
}
|
|
534
766
|
|
|
535
767
|
function Get-User-Share-Path() {
|
|
@@ -567,7 +799,8 @@ function Get-Absolute-Path([string]$RelativeOrAbsolutePath) {
|
|
|
567
799
|
}
|
|
568
800
|
|
|
569
801
|
function Get-Path-Prefix-With-Version($path) {
|
|
570
|
-
|
|
802
|
+
# example path with regex: shared/1.0.0-beta-12345/somepath
|
|
803
|
+
$match = [regex]::match($path, "/\d+\.\d+[^/]+/")
|
|
571
804
|
if ($match.Success) {
|
|
572
805
|
return $entry.FullName.Substring(0, $match.Index + $match.Length)
|
|
573
806
|
}
|
|
@@ -581,7 +814,7 @@ function Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package([Sys
|
|
|
581
814
|
$ret = @()
|
|
582
815
|
foreach ($entry in $Zip.Entries) {
|
|
583
816
|
$dir = Get-Path-Prefix-With-Version $entry.FullName
|
|
584
|
-
if ($
|
|
817
|
+
if ($null -ne $dir) {
|
|
585
818
|
$path = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $dir)
|
|
586
819
|
if (-Not (Test-Path $path -PathType Container)) {
|
|
587
820
|
$ret += $dir
|
|
@@ -622,7 +855,7 @@ function Extract-Dotnet-Package([string]$ZipPath, [string]$OutPath) {
|
|
|
622
855
|
|
|
623
856
|
foreach ($entry in $Zip.Entries) {
|
|
624
857
|
$PathWithVersion = Get-Path-Prefix-With-Version $entry.FullName
|
|
625
|
-
if (($
|
|
858
|
+
if (($null -eq $PathWithVersion) -Or ($DirectoriesToUnpack -contains $PathWithVersion)) {
|
|
626
859
|
$DestinationPath = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $entry.FullName)
|
|
627
860
|
$DestinationDir = Split-Path -Parent $DestinationPath
|
|
628
861
|
$OverrideFiles=$OverrideNonVersionedFiles -Or (-Not (Test-Path $DestinationPath))
|
|
@@ -633,8 +866,13 @@ function Extract-Dotnet-Package([string]$ZipPath, [string]$OutPath) {
|
|
|
633
866
|
}
|
|
634
867
|
}
|
|
635
868
|
}
|
|
869
|
+
catch
|
|
870
|
+
{
|
|
871
|
+
Say-Error "Failed to extract package. Exception: $_"
|
|
872
|
+
throw;
|
|
873
|
+
}
|
|
636
874
|
finally {
|
|
637
|
-
if ($
|
|
875
|
+
if ($null -ne $Zip) {
|
|
638
876
|
$Zip.Dispose()
|
|
639
877
|
}
|
|
640
878
|
}
|
|
@@ -654,40 +892,63 @@ function DownloadFile($Source, [string]$OutPath) {
|
|
|
654
892
|
}
|
|
655
893
|
|
|
656
894
|
$Stream = $null
|
|
657
|
-
|
|
895
|
+
|
|
658
896
|
try {
|
|
659
897
|
$Response = GetHTTPResponse -Uri $Source
|
|
660
898
|
$Stream = $Response.Content.ReadAsStreamAsync().Result
|
|
661
899
|
$File = [System.IO.File]::Create($OutPath)
|
|
662
900
|
$Stream.CopyTo($File)
|
|
663
901
|
$File.Close()
|
|
902
|
+
|
|
903
|
+
ValidateRemoteLocalFileSizes -LocalFileOutPath $OutPath -SourceUri $Source
|
|
664
904
|
}
|
|
665
905
|
finally {
|
|
666
|
-
if ($
|
|
906
|
+
if ($null -ne $Stream) {
|
|
667
907
|
$Stream.Dispose()
|
|
668
908
|
}
|
|
669
909
|
}
|
|
670
910
|
}
|
|
671
911
|
|
|
912
|
+
function ValidateRemoteLocalFileSizes([string]$LocalFileOutPath, $SourceUri) {
|
|
913
|
+
try {
|
|
914
|
+
$remoteFileSize = Get-Remote-File-Size -zipUri $SourceUri
|
|
915
|
+
$fileSize = [long](Get-Item $LocalFileOutPath).Length
|
|
916
|
+
Say "Downloaded file $SourceUri size is $fileSize bytes."
|
|
917
|
+
|
|
918
|
+
if ((![string]::IsNullOrEmpty($remoteFileSize)) -and !([string]::IsNullOrEmpty($fileSize)) ) {
|
|
919
|
+
if ($remoteFileSize -ne $fileSize) {
|
|
920
|
+
Say "The remote and local file sizes are not equal. Remote file size is $remoteFileSize bytes and local size is $fileSize bytes. The local package may be corrupted."
|
|
921
|
+
}
|
|
922
|
+
else {
|
|
923
|
+
Say "The remote and local file sizes are equal."
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
else {
|
|
927
|
+
Say "Either downloaded or local package size can not be measured. One of them may be corrupted."
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
catch {
|
|
931
|
+
Say "Either downloaded or local package size can not be measured. One of them may be corrupted."
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
|
|
672
935
|
function SafeRemoveFile($Path) {
|
|
673
936
|
try {
|
|
674
937
|
if (Test-Path $Path) {
|
|
675
938
|
Remove-Item $Path
|
|
676
939
|
Say-Verbose "The temporary file `"$Path`" was removed."
|
|
677
940
|
}
|
|
678
|
-
else
|
|
679
|
-
{
|
|
941
|
+
else {
|
|
680
942
|
Say-Verbose "The temporary file `"$Path`" does not exist, therefore is not removed."
|
|
681
943
|
}
|
|
682
944
|
}
|
|
683
|
-
catch
|
|
684
|
-
{
|
|
945
|
+
catch {
|
|
685
946
|
Say-Warning "Failed to remove the temporary file: `"$Path`", remove it manually."
|
|
686
947
|
}
|
|
687
948
|
}
|
|
688
949
|
|
|
689
|
-
function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot
|
|
690
|
-
$BinPath = Get-Absolute-Path $(Join-Path -Path $InstallRoot -ChildPath
|
|
950
|
+
function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot) {
|
|
951
|
+
$BinPath = Get-Absolute-Path $(Join-Path -Path $InstallRoot -ChildPath "")
|
|
691
952
|
if (-Not $NoPath) {
|
|
692
953
|
$SuffixedBinPath = "$BinPath;"
|
|
693
954
|
if (-Not $env:path.Contains($SuffixedBinPath)) {
|
|
@@ -702,25 +963,12 @@ function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot, [string]$BinFolde
|
|
|
702
963
|
}
|
|
703
964
|
}
|
|
704
965
|
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
Say "- The SDK installation doesn't need to persist across multiple CI runs."
|
|
708
|
-
Say "To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.`r`n"
|
|
709
|
-
|
|
710
|
-
$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
|
|
711
|
-
$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -Channel $Channel -Version $Version -JSonFile $JSonFile
|
|
712
|
-
$DownloadLink, $EffectiveVersion = Get-Download-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
|
713
|
-
$LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
|
714
|
-
|
|
715
|
-
$InstallRoot = Resolve-Installation-Path $InstallDir
|
|
716
|
-
Say-Verbose "InstallRoot: $InstallRoot"
|
|
717
|
-
$ScriptName = $MyInvocation.MyCommand.Name
|
|
718
|
-
|
|
719
|
-
if ($DryRun) {
|
|
966
|
+
function PrintDryRunOutput($Invocation, $DownloadLinks)
|
|
967
|
+
{
|
|
720
968
|
Say "Payload URLs:"
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
Say "
|
|
969
|
+
|
|
970
|
+
for ($linkIndex=0; $linkIndex -lt $DownloadLinks.count; $linkIndex++) {
|
|
971
|
+
Say "URL #$linkIndex - $($DownloadLinks[$linkIndex].type): $($DownloadLinks[$linkIndex].downloadLink)"
|
|
724
972
|
}
|
|
725
973
|
$RepeatableCommand = ".\$ScriptName -Version `"$SpecificVersion`" -InstallDir `"$InstallRoot`" -Architecture `"$CLIArchitecture`""
|
|
726
974
|
if ($Runtime -eq "dotnet") {
|
|
@@ -729,367 +977,608 @@ if ($DryRun) {
|
|
|
729
977
|
elseif ($Runtime -eq "aspnetcore") {
|
|
730
978
|
$RepeatableCommand+=" -Runtime `"aspnetcore`""
|
|
731
979
|
}
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
980
|
+
|
|
981
|
+
foreach ($key in $Invocation.BoundParameters.Keys) {
|
|
982
|
+
if (-not (@("Architecture","Channel","DryRun","InstallDir","Runtime","SharedRuntime","Version","Quality","FeedCredential") -contains $key)) {
|
|
983
|
+
$RepeatableCommand+=" -$key `"$($Invocation.BoundParameters[$key])`""
|
|
735
984
|
}
|
|
736
985
|
}
|
|
986
|
+
if ($Invocation.BoundParameters.Keys -contains "FeedCredential") {
|
|
987
|
+
$RepeatableCommand+=" -FeedCredential `"<feedCredential>`""
|
|
988
|
+
}
|
|
737
989
|
Say "Repeatable invocation: $RepeatableCommand"
|
|
738
990
|
if ($SpecificVersion -ne $EffectiveVersion)
|
|
739
991
|
{
|
|
740
992
|
Say "NOTE: Due to finding a version manifest with this runtime, it would actually install with version '$EffectiveVersion'"
|
|
741
993
|
}
|
|
742
|
-
|
|
743
|
-
return
|
|
744
994
|
}
|
|
745
995
|
|
|
746
|
-
|
|
747
|
-
$
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
}
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
996
|
+
function Get-AkaMSDownloadLink([string]$Channel, [string]$Quality, [bool]$Internal, [string]$Product, [string]$Architecture) {
|
|
997
|
+
Say-Invocation $MyInvocation
|
|
998
|
+
|
|
999
|
+
#quality is not supported for LTS or STS channel
|
|
1000
|
+
if (![string]::IsNullOrEmpty($Quality) -and (@("LTS", "STS") -contains $Channel)) {
|
|
1001
|
+
$Quality = ""
|
|
1002
|
+
Say-Warning "Specifying quality for STS or LTS channel is not supported, the quality will be ignored."
|
|
1003
|
+
}
|
|
1004
|
+
Say-Verbose "Retrieving primary payload URL from aka.ms link for channel: '$Channel', quality: '$Quality' product: '$Product', os: 'win', architecture: '$Architecture'."
|
|
1005
|
+
|
|
1006
|
+
#construct aka.ms link
|
|
1007
|
+
$akaMsLink = "https://aka.ms/dotnet"
|
|
1008
|
+
if ($Internal) {
|
|
1009
|
+
$akaMsLink += "/internal"
|
|
1010
|
+
}
|
|
1011
|
+
$akaMsLink += "/$Channel"
|
|
1012
|
+
if (-not [string]::IsNullOrEmpty($Quality)) {
|
|
1013
|
+
$akaMsLink +="/$Quality"
|
|
1014
|
+
}
|
|
1015
|
+
$akaMsLink +="/$Product-win-$Architecture.zip"
|
|
1016
|
+
Say-Verbose "Constructed aka.ms link: '$akaMsLink'."
|
|
1017
|
+
$akaMsDownloadLink=$null
|
|
1018
|
+
|
|
1019
|
+
for ($maxRedirections = 9; $maxRedirections -ge 0; $maxRedirections--)
|
|
1020
|
+
{
|
|
1021
|
+
#get HTTP response
|
|
1022
|
+
#do not pass credentials as a part of the $akaMsLink and do not apply credentials in the GetHTTPResponse function
|
|
1023
|
+
#otherwise the redirect link would have credentials as well
|
|
1024
|
+
#it would result in applying credentials twice to the resulting link and thus breaking it, and in echoing credentials to the output as a part of redirect link
|
|
1025
|
+
$Response= GetHTTPResponse -Uri $akaMsLink -HeaderOnly $true -DisableRedirect $true -DisableFeedCredential $true
|
|
1026
|
+
Say-Verbose "Received response:`n$Response"
|
|
1027
|
+
|
|
1028
|
+
if ([string]::IsNullOrEmpty($Response)) {
|
|
1029
|
+
Say-Verbose "The link '$akaMsLink' is not valid: failed to get redirect location. The resource is not available."
|
|
1030
|
+
return $null
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
#if HTTP code is 301 (Moved Permanently), the redirect link exists
|
|
1034
|
+
if ($Response.StatusCode -eq 301)
|
|
1035
|
+
{
|
|
1036
|
+
try {
|
|
1037
|
+
$akaMsDownloadLink = $Response.Headers.GetValues("Location")[0]
|
|
1038
|
+
|
|
1039
|
+
if ([string]::IsNullOrEmpty($akaMsDownloadLink)) {
|
|
1040
|
+
Say-Verbose "The link '$akaMsLink' is not valid: server returned 301 (Moved Permanently), but the headers do not contain the redirect location."
|
|
1041
|
+
return $null
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
Say-Verbose "The redirect location retrieved: '$akaMsDownloadLink'."
|
|
1045
|
+
# This may yet be a link to another redirection. Attempt to retrieve the page again.
|
|
1046
|
+
$akaMsLink = $akaMsDownloadLink
|
|
1047
|
+
continue
|
|
1048
|
+
}
|
|
1049
|
+
catch {
|
|
1050
|
+
Say-Verbose "The link '$akaMsLink' is not valid: failed to get redirect location."
|
|
1051
|
+
return $null
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
elseif ((($Response.StatusCode -lt 300) -or ($Response.StatusCode -ge 400)) -and (-not [string]::IsNullOrEmpty($akaMsDownloadLink)))
|
|
1055
|
+
{
|
|
1056
|
+
# Redirections have ended.
|
|
1057
|
+
return $akaMsDownloadLink
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
Say-Verbose "The link '$akaMsLink' is not valid: failed to retrieve the redirection location."
|
|
1061
|
+
return $null
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
Say-Verbose "Aka.ms links have redirected more than the maximum allowed redirections. This may be caused by a cyclic redirection of aka.ms links."
|
|
1065
|
+
return $null
|
|
1066
|
+
|
|
761
1067
|
}
|
|
762
|
-
|
|
763
|
-
|
|
1068
|
+
|
|
1069
|
+
function Get-AkaMsLink-And-Version([string] $NormalizedChannel, [string] $NormalizedQuality, [bool] $Internal, [string] $ProductName, [string] $Architecture) {
|
|
1070
|
+
$AkaMsDownloadLink = Get-AkaMSDownloadLink -Channel $NormalizedChannel -Quality $NormalizedQuality -Internal $Internal -Product $ProductName -Architecture $Architecture
|
|
1071
|
+
|
|
1072
|
+
if ([string]::IsNullOrEmpty($AkaMsDownloadLink)){
|
|
1073
|
+
if (-not [string]::IsNullOrEmpty($NormalizedQuality)) {
|
|
1074
|
+
# if quality is specified - exit with error - there is no fallback approach
|
|
1075
|
+
Say-Error "Failed to locate the latest version in the channel '$NormalizedChannel' with '$NormalizedQuality' quality for '$ProductName', os: 'win', architecture: '$Architecture'."
|
|
1076
|
+
Say-Error "Refer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support."
|
|
1077
|
+
throw "aka.ms link resolution failure"
|
|
1078
|
+
}
|
|
1079
|
+
Say-Verbose "Falling back to latest.version file approach."
|
|
1080
|
+
return ($null, $null, $null)
|
|
1081
|
+
}
|
|
1082
|
+
else {
|
|
1083
|
+
Say-Verbose "Retrieved primary named payload URL from aka.ms link: '$AkaMsDownloadLink'."
|
|
1084
|
+
Say-Verbose "Downloading using legacy url will not be attempted."
|
|
1085
|
+
|
|
1086
|
+
#get version from the path
|
|
1087
|
+
$pathParts = $AkaMsDownloadLink.Split('/')
|
|
1088
|
+
if ($pathParts.Length -ge 2) {
|
|
1089
|
+
$SpecificVersion = $pathParts[$pathParts.Length - 2]
|
|
1090
|
+
Say-Verbose "Version: '$SpecificVersion'."
|
|
1091
|
+
}
|
|
1092
|
+
else {
|
|
1093
|
+
Say-Error "Failed to extract the version from download link '$AkaMsDownloadLink'."
|
|
1094
|
+
return ($null, $null, $null)
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
#retrieve effective (product) version
|
|
1098
|
+
$EffectiveVersion = Get-Product-Version -SpecificVersion $SpecificVersion -PackageDownloadLink $AkaMsDownloadLink
|
|
1099
|
+
Say-Verbose "Product version: '$EffectiveVersion'."
|
|
1100
|
+
|
|
1101
|
+
return ($AkaMsDownloadLink, $SpecificVersion, $EffectiveVersion);
|
|
1102
|
+
}
|
|
764
1103
|
}
|
|
765
1104
|
|
|
766
|
-
|
|
1105
|
+
function Get-Feeds-To-Use()
|
|
767
1106
|
{
|
|
768
|
-
|
|
769
|
-
|
|
1107
|
+
$feeds = @(
|
|
1108
|
+
"https://dotnetcli.azureedge.net/dotnet",
|
|
1109
|
+
"https://dotnetbuilds.azureedge.net/public"
|
|
1110
|
+
)
|
|
1111
|
+
|
|
1112
|
+
if (-not [string]::IsNullOrEmpty($AzureFeed)) {
|
|
1113
|
+
$feeds = @($AzureFeed)
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
if ($NoCdn) {
|
|
1117
|
+
$feeds = @(
|
|
1118
|
+
"https://dotnetcli.blob.core.windows.net/dotnet",
|
|
1119
|
+
"https://dotnetbuilds.blob.core.windows.net/public"
|
|
1120
|
+
)
|
|
1121
|
+
|
|
1122
|
+
if (-not [string]::IsNullOrEmpty($UncachedFeed)) {
|
|
1123
|
+
$feeds = @($UncachedFeed)
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
return $feeds
|
|
770
1128
|
}
|
|
771
1129
|
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
if ($
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
1130
|
+
function Resolve-AssetName-And-RelativePath([string] $Runtime) {
|
|
1131
|
+
|
|
1132
|
+
if ($Runtime -eq "dotnet") {
|
|
1133
|
+
$assetName = ".NET Core Runtime"
|
|
1134
|
+
$dotnetPackageRelativePath = "shared\Microsoft.NETCore.App"
|
|
1135
|
+
}
|
|
1136
|
+
elseif ($Runtime -eq "aspnetcore") {
|
|
1137
|
+
$assetName = "ASP.NET Core Runtime"
|
|
1138
|
+
$dotnetPackageRelativePath = "shared\Microsoft.AspNetCore.App"
|
|
1139
|
+
}
|
|
1140
|
+
elseif ($Runtime -eq "windowsdesktop") {
|
|
1141
|
+
$assetName = ".NET Core Windows Desktop Runtime"
|
|
1142
|
+
$dotnetPackageRelativePath = "shared\Microsoft.WindowsDesktop.App"
|
|
1143
|
+
}
|
|
1144
|
+
elseif (-not $Runtime) {
|
|
1145
|
+
$assetName = ".NET Core SDK"
|
|
1146
|
+
$dotnetPackageRelativePath = "sdk"
|
|
1147
|
+
}
|
|
1148
|
+
else {
|
|
1149
|
+
throw "Invalid value for `$Runtime"
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
return ($assetName, $dotnetPackageRelativePath)
|
|
778
1153
|
}
|
|
779
1154
|
|
|
780
|
-
|
|
1155
|
+
function Prepare-Install-Directory {
|
|
1156
|
+
$diskSpaceWarning = "Failed to check the disk space. Installation will continue, but it may fail if you do not have enough disk space.";
|
|
1157
|
+
|
|
1158
|
+
if ($PSVersionTable.PSVersion.Major -lt 7) {
|
|
1159
|
+
Say-Verbose $diskSpaceWarning
|
|
1160
|
+
return
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
New-Item -ItemType Directory -Force -Path $InstallRoot | Out-Null
|
|
781
1164
|
|
|
782
|
-
$installDrive = $((Get-Item $InstallRoot).PSDrive.Name);
|
|
783
|
-
$diskInfo =
|
|
784
|
-
|
|
785
|
-
|
|
1165
|
+
$installDrive = $((Get-Item $InstallRoot -Force).PSDrive.Name);
|
|
1166
|
+
$diskInfo = $null
|
|
1167
|
+
try {
|
|
1168
|
+
$diskInfo = Get-PSDrive -Name $installDrive
|
|
1169
|
+
}
|
|
1170
|
+
catch {
|
|
1171
|
+
Say-Warning $diskSpaceWarning
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
# The check is relevant for PS version >= 7, the result can be irrelevant for older versions. See https://github.com/PowerShell/PowerShell/issues/12442.
|
|
1175
|
+
if ( ($null -ne $diskInfo) -and ($diskInfo.Free / 1MB -le 100)) {
|
|
1176
|
+
throw "There is not enough disk space on drive ${installDrive}:"
|
|
1177
|
+
}
|
|
786
1178
|
}
|
|
787
1179
|
|
|
788
|
-
|
|
789
|
-
|
|
1180
|
+
if ($Help)
|
|
1181
|
+
{
|
|
1182
|
+
Get-Help $PSCommandPath -Examples
|
|
1183
|
+
exit
|
|
1184
|
+
}
|
|
790
1185
|
|
|
791
|
-
|
|
1186
|
+
Say-Verbose "Note that the intended use of this script is for Continuous Integration (CI) scenarios, where:"
|
|
1187
|
+
Say-Verbose "- The SDK needs to be installed without user interaction and without admin rights."
|
|
1188
|
+
Say-Verbose "- The SDK installation doesn't need to persist across multiple CI runs."
|
|
1189
|
+
Say-Verbose "To set up a development environment or to run apps, use installers rather than this script. Visit https://dotnet.microsoft.com/download to get the installer.`r`n"
|
|
792
1190
|
|
|
793
|
-
$
|
|
794
|
-
$
|
|
1191
|
+
if ($SharedRuntime -and (-not $Runtime)) {
|
|
1192
|
+
$Runtime = "dotnet"
|
|
1193
|
+
}
|
|
795
1194
|
|
|
796
|
-
$
|
|
797
|
-
$LegacyDownloadFailedMsg = ""
|
|
1195
|
+
$OverrideNonVersionedFiles = !$SkipNonVersionedFiles
|
|
798
1196
|
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
1197
|
+
Measure-Action "Product discovery" {
|
|
1198
|
+
$script:CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
|
|
1199
|
+
$script:NormalizedQuality = Get-NormalizedQuality $Quality
|
|
1200
|
+
Say-Verbose "Normalized quality: '$NormalizedQuality'"
|
|
1201
|
+
$script:NormalizedChannel = Get-NormalizedChannel $Channel
|
|
1202
|
+
Say-Verbose "Normalized channel: '$NormalizedChannel'"
|
|
1203
|
+
$script:NormalizedProduct = Get-NormalizedProduct $Runtime
|
|
1204
|
+
Say-Verbose "Normalized product: '$NormalizedProduct'"
|
|
1205
|
+
$script:FeedCredential = ValidateFeedCredential $FeedCredential
|
|
802
1206
|
}
|
|
803
|
-
catch {
|
|
804
|
-
if ($PSItem.Exception.Data.Contains("StatusCode")) {
|
|
805
|
-
$PrimaryDownloadStatusCode = $PSItem.Exception.Data["StatusCode"]
|
|
806
|
-
}
|
|
807
1207
|
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
}
|
|
1208
|
+
$InstallRoot = Resolve-Installation-Path $InstallDir
|
|
1209
|
+
Say-Verbose "InstallRoot: $InstallRoot"
|
|
1210
|
+
$ScriptName = $MyInvocation.MyCommand.Name
|
|
1211
|
+
($assetName, $dotnetPackageRelativePath) = Resolve-AssetName-And-RelativePath -Runtime $Runtime
|
|
813
1212
|
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
} else {
|
|
817
|
-
Say $PSItem.Exception.Message
|
|
818
|
-
}
|
|
1213
|
+
$feeds = Get-Feeds-To-Use
|
|
1214
|
+
$DownloadLinks = @()
|
|
819
1215
|
|
|
820
|
-
|
|
1216
|
+
if ($Version.ToLowerInvariant() -ne "latest" -and -not [string]::IsNullOrEmpty($Quality)) {
|
|
1217
|
+
throw "Quality and Version options are not allowed to be specified simultaneously. See https:// learn.microsoft.com/dotnet/core/tools/dotnet-install-script#options for details."
|
|
1218
|
+
}
|
|
821
1219
|
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
if
|
|
832
|
-
|
|
1220
|
+
# aka.ms links can only be used if the user did not request a specific version via the command line or a global.json file.
|
|
1221
|
+
if ([string]::IsNullOrEmpty($JSonFile) -and ($Version -eq "latest")) {
|
|
1222
|
+
($DownloadLink, $SpecificVersion, $EffectiveVersion) = Get-AkaMsLink-And-Version $NormalizedChannel $NormalizedQuality $Internal $NormalizedProduct $CLIArchitecture
|
|
1223
|
+
|
|
1224
|
+
if ($null -ne $DownloadLink) {
|
|
1225
|
+
$DownloadLinks += New-Object PSObject -Property @{downloadLink="$DownloadLink";specificVersion="$SpecificVersion";effectiveVersion="$EffectiveVersion";type='aka.ms'}
|
|
1226
|
+
Say-Verbose "Generated aka.ms link $DownloadLink with version $EffectiveVersion"
|
|
1227
|
+
|
|
1228
|
+
if (-Not $DryRun) {
|
|
1229
|
+
Say-Verbose "Checking if the version $EffectiveVersion is already installed"
|
|
1230
|
+
if (Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $EffectiveVersion)
|
|
1231
|
+
{
|
|
1232
|
+
Say "$assetName with version '$EffectiveVersion' is already installed."
|
|
1233
|
+
Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot
|
|
1234
|
+
return
|
|
833
1235
|
}
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
834
1239
|
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
1240
|
+
# Primary and legacy links cannot be used if a quality was specified.
|
|
1241
|
+
# If we already have an aka.ms link, no need to search the blob feeds.
|
|
1242
|
+
if ([string]::IsNullOrEmpty($NormalizedQuality) -and 0 -eq $DownloadLinks.count)
|
|
1243
|
+
{
|
|
1244
|
+
foreach ($feed in $feeds) {
|
|
1245
|
+
try {
|
|
1246
|
+
$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $feed -Channel $Channel -Version $Version -JSonFile $JSonFile
|
|
1247
|
+
$DownloadLink, $EffectiveVersion = Get-Download-Link -AzureFeed $feed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
|
1248
|
+
$LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $feed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
|
1249
|
+
|
|
1250
|
+
$DownloadLinks += New-Object PSObject -Property @{downloadLink="$DownloadLink";specificVersion="$SpecificVersion";effectiveVersion="$EffectiveVersion";type='primary'}
|
|
1251
|
+
Say-Verbose "Generated primary link $DownloadLink with version $EffectiveVersion"
|
|
1252
|
+
|
|
1253
|
+
if (-not [string]::IsNullOrEmpty($LegacyDownloadLink)) {
|
|
1254
|
+
$DownloadLinks += New-Object PSObject -Property @{downloadLink="$LegacyDownloadLink";specificVersion="$SpecificVersion";effectiveVersion="$EffectiveVersion";type='legacy'}
|
|
1255
|
+
Say-Verbose "Generated legacy link $LegacyDownloadLink with version $EffectiveVersion"
|
|
839
1256
|
}
|
|
840
|
-
|
|
841
|
-
if (
|
|
842
|
-
Say "
|
|
843
|
-
|
|
844
|
-
|
|
1257
|
+
|
|
1258
|
+
if (-Not $DryRun) {
|
|
1259
|
+
Say-Verbose "Checking if the version $EffectiveVersion is already installed"
|
|
1260
|
+
if (Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $EffectiveVersion)
|
|
1261
|
+
{
|
|
1262
|
+
Say "$assetName with version '$EffectiveVersion' is already installed."
|
|
1263
|
+
Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot
|
|
1264
|
+
return
|
|
1265
|
+
}
|
|
845
1266
|
}
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
1267
|
+
}
|
|
1268
|
+
catch
|
|
1269
|
+
{
|
|
1270
|
+
Say-Verbose "Failed to acquire download links from feed $feed. Exception: $_"
|
|
849
1271
|
}
|
|
850
1272
|
}
|
|
851
|
-
else {
|
|
852
|
-
$DownloadFailed = $true
|
|
853
|
-
}
|
|
854
1273
|
}
|
|
855
1274
|
|
|
856
|
-
if ($
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
1275
|
+
if ($DownloadLinks.count -eq 0) {
|
|
1276
|
+
throw "Failed to resolve the exact version number."
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
if ($DryRun) {
|
|
1280
|
+
PrintDryRunOutput $MyInvocation $DownloadLinks
|
|
1281
|
+
return
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
Measure-Action "Installation directory preparation" { Prepare-Install-Directory }
|
|
1285
|
+
|
|
1286
|
+
Say-Verbose "Zip path: $ZipPath"
|
|
1287
|
+
|
|
1288
|
+
$DownloadSucceeded = $false
|
|
1289
|
+
$DownloadedLink = $null
|
|
1290
|
+
$ErrorMessages = @()
|
|
1291
|
+
|
|
1292
|
+
foreach ($link in $DownloadLinks)
|
|
1293
|
+
{
|
|
1294
|
+
Say-Verbose "Downloading `"$($link.type)`" link $($link.downloadLink)"
|
|
1295
|
+
|
|
1296
|
+
try {
|
|
1297
|
+
Measure-Action "Package download" { DownloadFile -Source $link.downloadLink -OutPath $ZipPath }
|
|
1298
|
+
Say-Verbose "Download succeeded."
|
|
1299
|
+
$DownloadSucceeded = $true
|
|
1300
|
+
$DownloadedLink = $link
|
|
1301
|
+
break
|
|
1302
|
+
}
|
|
1303
|
+
catch {
|
|
1304
|
+
$StatusCode = $null
|
|
1305
|
+
$ErrorMessage = $null
|
|
1306
|
+
|
|
1307
|
+
if ($PSItem.Exception.Data.Contains("StatusCode")) {
|
|
1308
|
+
$StatusCode = $PSItem.Exception.Data["StatusCode"]
|
|
864
1309
|
}
|
|
865
|
-
|
|
866
|
-
|
|
1310
|
+
|
|
1311
|
+
if ($PSItem.Exception.Data.Contains("ErrorMessage")) {
|
|
1312
|
+
$ErrorMessage = $PSItem.Exception.Data["ErrorMessage"]
|
|
1313
|
+
} else {
|
|
1314
|
+
$ErrorMessage = $PSItem.Exception.Message
|
|
867
1315
|
}
|
|
868
|
-
|
|
1316
|
+
|
|
1317
|
+
Say-Verbose "Download failed with status code $StatusCode. Error message: $ErrorMessage"
|
|
1318
|
+
$ErrorMessages += "Downloading from `"$($link.type)`" link has failed with error:`nUri: $($link.downloadLink)`nStatusCode: $StatusCode`nError: $ErrorMessage"
|
|
869
1319
|
}
|
|
1320
|
+
|
|
1321
|
+
# This link failed. Clean up before trying the next one.
|
|
1322
|
+
SafeRemoveFile -Path $ZipPath
|
|
870
1323
|
}
|
|
871
1324
|
|
|
872
|
-
|
|
873
|
-
|
|
1325
|
+
if (-not $DownloadSucceeded) {
|
|
1326
|
+
foreach ($ErrorMessage in $ErrorMessages) {
|
|
1327
|
+
Say-Error $ErrorMessages
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
throw "Could not find `"$assetName`" with version = $($DownloadLinks[0].effectiveVersion)`nRefer to: https://aka.ms/dotnet-os-lifecycle for information on .NET support"
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
Say "Extracting the archive."
|
|
1334
|
+
Measure-Action "Package extraction" { Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot }
|
|
874
1335
|
|
|
875
1336
|
# Check if the SDK version is installed; if not, fail the installation.
|
|
876
1337
|
$isAssetInstalled = $false
|
|
877
1338
|
|
|
878
1339
|
# if the version contains "RTM" or "servicing"; check if a 'release-type' SDK version is installed.
|
|
879
|
-
if ($
|
|
880
|
-
$ReleaseVersion = $
|
|
1340
|
+
if ($DownloadedLink.effectiveVersion -Match "rtm" -or $DownloadedLink.effectiveVersion -Match "servicing") {
|
|
1341
|
+
$ReleaseVersion = $DownloadedLink.effectiveVersion.Split("-")[0]
|
|
881
1342
|
Say-Verbose "Checking installation: version = $ReleaseVersion"
|
|
882
1343
|
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $ReleaseVersion
|
|
883
1344
|
}
|
|
884
1345
|
|
|
885
1346
|
# Check if the SDK version is installed.
|
|
886
1347
|
if (!$isAssetInstalled) {
|
|
887
|
-
Say-Verbose "Checking installation: version = $
|
|
888
|
-
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $
|
|
1348
|
+
Say-Verbose "Checking installation: version = $($DownloadedLink.effectiveVersion)"
|
|
1349
|
+
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $DownloadedLink.effectiveVersion
|
|
889
1350
|
}
|
|
890
1351
|
|
|
891
1352
|
# Version verification failed. More likely something is wrong either with the downloaded content or with the verification algorithm.
|
|
892
1353
|
if (!$isAssetInstalled) {
|
|
893
|
-
Say-Error "Failed to verify the version of installed `"$assetName`".`nInstallation source: $
|
|
894
|
-
throw "`"$assetName`" with version = $
|
|
1354
|
+
Say-Error "Failed to verify the version of installed `"$assetName`".`nInstallation source: $($DownloadedLink.downloadLink).`nInstallation location: $InstallRoot.`nReport the bug at https://github.com/dotnet/install-scripts/issues."
|
|
1355
|
+
throw "`"$assetName`" with version = $($DownloadedLink.effectiveVersion) failed to install with an unknown error."
|
|
895
1356
|
}
|
|
896
1357
|
|
|
897
|
-
|
|
1358
|
+
if (-not $KeepZip) {
|
|
1359
|
+
SafeRemoveFile -Path $ZipPath
|
|
1360
|
+
}
|
|
898
1361
|
|
|
899
|
-
Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot
|
|
1362
|
+
Measure-Action "Setting up shell environment" { Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot }
|
|
900
1363
|
|
|
901
1364
|
Say "Note that the script does not resolve dependencies during installation."
|
|
902
|
-
Say "To check the list of dependencies, go to https://
|
|
1365
|
+
Say "To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install/windows#dependencies"
|
|
1366
|
+
Say "Installed version is $($DownloadedLink.effectiveVersion)"
|
|
903
1367
|
Say "Installation finished"
|
|
904
1368
|
# SIG # Begin signature block
|
|
905
|
-
#
|
|
1369
|
+
# MIIoLAYJKoZIhvcNAQcCoIIoHTCCKBkCAQExDzANBglghkgBZQMEAgEFADB5Bgor
|
|
906
1370
|
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
|
|
907
|
-
#
|
|
908
|
-
#
|
|
909
|
-
#
|
|
1371
|
+
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAcjJpspXTX0Wfr
|
|
1372
|
+
# XrmBKKJAMp5FGvSyRcbMwr8jAJ2D2qCCDXYwggX0MIID3KADAgECAhMzAAADrzBA
|
|
1373
|
+
# DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
|
|
910
1374
|
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
|
|
911
1375
|
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
|
|
912
|
-
#
|
|
1376
|
+
# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw
|
|
913
1377
|
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
|
|
914
1378
|
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
|
|
915
1379
|
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
|
916
|
-
#
|
|
917
|
-
#
|
|
918
|
-
#
|
|
919
|
-
#
|
|
920
|
-
#
|
|
921
|
-
#
|
|
922
|
-
#
|
|
923
|
-
#
|
|
924
|
-
#
|
|
925
|
-
#
|
|
926
|
-
#
|
|
927
|
-
#
|
|
928
|
-
#
|
|
929
|
-
#
|
|
930
|
-
#
|
|
931
|
-
#
|
|
932
|
-
#
|
|
933
|
-
#
|
|
934
|
-
#
|
|
935
|
-
#
|
|
936
|
-
#
|
|
937
|
-
#
|
|
938
|
-
#
|
|
939
|
-
#
|
|
940
|
-
#
|
|
941
|
-
#
|
|
942
|
-
#
|
|
943
|
-
#
|
|
944
|
-
#
|
|
945
|
-
#
|
|
946
|
-
#
|
|
947
|
-
#
|
|
948
|
-
#
|
|
949
|
-
#
|
|
950
|
-
#
|
|
951
|
-
#
|
|
952
|
-
#
|
|
953
|
-
#
|
|
954
|
-
#
|
|
955
|
-
#
|
|
956
|
-
#
|
|
957
|
-
#
|
|
958
|
-
#
|
|
959
|
-
#
|
|
960
|
-
#
|
|
961
|
-
#
|
|
962
|
-
#
|
|
963
|
-
#
|
|
964
|
-
#
|
|
965
|
-
#
|
|
966
|
-
#
|
|
967
|
-
#
|
|
968
|
-
#
|
|
969
|
-
#
|
|
970
|
-
#
|
|
971
|
-
#
|
|
972
|
-
#
|
|
973
|
-
#
|
|
974
|
-
#
|
|
975
|
-
#
|
|
976
|
-
#
|
|
977
|
-
#
|
|
978
|
-
#
|
|
979
|
-
#
|
|
980
|
-
#
|
|
981
|
-
#
|
|
982
|
-
#
|
|
983
|
-
#
|
|
984
|
-
#
|
|
985
|
-
#
|
|
986
|
-
#
|
|
987
|
-
#
|
|
988
|
-
#
|
|
989
|
-
#
|
|
990
|
-
#
|
|
991
|
-
#
|
|
992
|
-
#
|
|
993
|
-
#
|
|
994
|
-
#
|
|
995
|
-
#
|
|
996
|
-
#
|
|
997
|
-
#
|
|
998
|
-
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
|
|
999
|
-
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1p
|
|
1000
|
-
# Y3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMg
|
|
1001
|
-
# VFNTIEVTTjo4OTdBLUUzNTYtMTcwMTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUt
|
|
1002
|
-
# U3RhbXAgU2VydmljZaCCDkEwggT1MIID3aADAgECAhMzAAABLCKvRZd1+RvuAAAA
|
|
1003
|
-
# AAEsMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
|
|
1004
|
-
# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
|
|
1005
|
-
# cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
|
|
1006
|
-
# MB4XDTE5MTIxOTAxMTUwM1oXDTIxMDMxNzAxMTUwM1owgc4xCzAJBgNVBAYTAlVT
|
|
1380
|
+
# AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA
|
|
1381
|
+
# hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG
|
|
1382
|
+
# 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN
|
|
1383
|
+
# xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL
|
|
1384
|
+
# go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB
|
|
1385
|
+
# tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
|
|
1386
|
+
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw
|
|
1387
|
+
# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
|
|
1388
|
+
# MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
|
|
1389
|
+
# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
|
|
1390
|
+
# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
|
|
1391
|
+
# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
|
|
1392
|
+
# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
|
|
1393
|
+
# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd
|
|
1394
|
+
# mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ
|
|
1395
|
+
# 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY
|
|
1396
|
+
# 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp
|
|
1397
|
+
# XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn
|
|
1398
|
+
# TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT
|
|
1399
|
+
# e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG
|
|
1400
|
+
# OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O
|
|
1401
|
+
# PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk
|
|
1402
|
+
# ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx
|
|
1403
|
+
# HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt
|
|
1404
|
+
# CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
|
|
1405
|
+
# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
|
|
1406
|
+
# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
|
|
1407
|
+
# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
|
|
1408
|
+
# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
|
|
1409
|
+
# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
|
|
1410
|
+
# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
|
|
1411
|
+
# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
|
|
1412
|
+
# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
|
|
1413
|
+
# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
|
|
1414
|
+
# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
|
|
1415
|
+
# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
|
|
1416
|
+
# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
|
|
1417
|
+
# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
|
|
1418
|
+
# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
|
|
1419
|
+
# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
|
|
1420
|
+
# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
|
|
1421
|
+
# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
|
|
1422
|
+
# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
|
|
1423
|
+
# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
|
|
1424
|
+
# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
|
|
1425
|
+
# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
|
|
1426
|
+
# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
|
|
1427
|
+
# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
|
|
1428
|
+
# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
|
|
1429
|
+
# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
|
|
1430
|
+
# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
|
|
1431
|
+
# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
|
|
1432
|
+
# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
|
|
1433
|
+
# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
|
|
1434
|
+
# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
|
|
1435
|
+
# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
|
|
1436
|
+
# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
|
|
1437
|
+
# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
|
|
1438
|
+
# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
|
|
1439
|
+
# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
|
|
1440
|
+
# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
|
|
1441
|
+
# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
|
|
1442
|
+
# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
|
|
1443
|
+
# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
|
|
1444
|
+
# /Xmfwb1tbWrJUnMTDXpQzTGCGgwwghoIAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
|
|
1445
|
+
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
|
|
1446
|
+
# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
|
|
1447
|
+
# Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB
|
|
1448
|
+
# BQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
|
|
1449
|
+
# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEILE0f3lJHQgU2RZWXUC1oqZH
|
|
1450
|
+
# SyMVCuT1h5mXGiSSjTDHMEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8A
|
|
1451
|
+
# cwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEB
|
|
1452
|
+
# BQAEggEANxDFgCiCDFasXK4jelzA8ed3cn/ZebTOsL/D/5LQTgwhbjtfp1Dp7awF
|
|
1453
|
+
# 8vESgjYXq22XMBz5vV12f2f14XzxG1kW17bP9OR+D2C3GUlN2xQstIhslXJRKVwi
|
|
1454
|
+
# lpFqHGFKy8o6sssvdrtsatlfrtC+ZChbQ1nyJmYWiCotVTwoi6UMA3EiXfQ/6KGo
|
|
1455
|
+
# o8MykKgtMWaolI63lITY2EWtUowSgg7IToyrZEYOH3p45F3Rb3mfVl5GE9u8BPBZ
|
|
1456
|
+
# WyZ3JZPojeJZPBwoh746RijTpga+MIPTLMT5/pyEFF37XoTfKy+pmIy2g27fGF0f
|
|
1457
|
+
# dUTMVnaeP3Gsz/QoRIYGwRZHxPIn06GCF5YwgheSBgorBgEEAYI3AwMBMYIXgjCC
|
|
1458
|
+
# F34GCSqGSIb3DQEHAqCCF28wghdrAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFRBgsq
|
|
1459
|
+
# hkiG9w0BCRABBKCCAUAEggE8MIIBOAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFl
|
|
1460
|
+
# AwQCAQUABCDsnfXLdwRAAmajQ5qXHFhiKlkumRT841LqpvZZhWG0uwIGZbwTAVg6
|
|
1461
|
+
# GBIyMDI0MDIxNDIxMTUyNS45OVowBIACAfSggdGkgc4wgcsxCzAJBgNVBAYTAlVT
|
|
1007
1462
|
# MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
|
|
1008
|
-
#
|
|
1009
|
-
#
|
|
1010
|
-
#
|
|
1011
|
-
#
|
|
1012
|
-
#
|
|
1013
|
-
#
|
|
1014
|
-
#
|
|
1015
|
-
#
|
|
1016
|
-
#
|
|
1017
|
-
#
|
|
1018
|
-
#
|
|
1019
|
-
#
|
|
1020
|
-
#
|
|
1021
|
-
#
|
|
1022
|
-
#
|
|
1023
|
-
#
|
|
1024
|
-
#
|
|
1025
|
-
#
|
|
1026
|
-
#
|
|
1027
|
-
#
|
|
1028
|
-
#
|
|
1029
|
-
#
|
|
1030
|
-
#
|
|
1031
|
-
#
|
|
1032
|
-
#
|
|
1033
|
-
#
|
|
1034
|
-
#
|
|
1035
|
-
#
|
|
1036
|
-
#
|
|
1037
|
-
#
|
|
1038
|
-
#
|
|
1039
|
-
#
|
|
1040
|
-
#
|
|
1041
|
-
#
|
|
1042
|
-
#
|
|
1043
|
-
#
|
|
1044
|
-
#
|
|
1045
|
-
#
|
|
1046
|
-
#
|
|
1047
|
-
#
|
|
1048
|
-
#
|
|
1049
|
-
#
|
|
1050
|
-
#
|
|
1051
|
-
#
|
|
1052
|
-
#
|
|
1053
|
-
#
|
|
1054
|
-
#
|
|
1055
|
-
#
|
|
1056
|
-
#
|
|
1057
|
-
#
|
|
1058
|
-
#
|
|
1059
|
-
#
|
|
1060
|
-
#
|
|
1061
|
-
#
|
|
1062
|
-
#
|
|
1063
|
-
#
|
|
1064
|
-
#
|
|
1065
|
-
#
|
|
1066
|
-
#
|
|
1067
|
-
#
|
|
1068
|
-
#
|
|
1069
|
-
#
|
|
1070
|
-
#
|
|
1071
|
-
#
|
|
1072
|
-
#
|
|
1073
|
-
#
|
|
1074
|
-
#
|
|
1075
|
-
#
|
|
1076
|
-
#
|
|
1077
|
-
#
|
|
1078
|
-
#
|
|
1079
|
-
#
|
|
1080
|
-
#
|
|
1081
|
-
#
|
|
1082
|
-
#
|
|
1083
|
-
#
|
|
1084
|
-
#
|
|
1085
|
-
#
|
|
1086
|
-
#
|
|
1087
|
-
#
|
|
1088
|
-
#
|
|
1089
|
-
#
|
|
1090
|
-
#
|
|
1091
|
-
#
|
|
1092
|
-
#
|
|
1093
|
-
#
|
|
1094
|
-
#
|
|
1463
|
+
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVy
|
|
1464
|
+
# aWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjozNzAzLTA1
|
|
1465
|
+
# RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCC
|
|
1466
|
+
# Ee0wggcgMIIFCKADAgECAhMzAAAB6pokctVZP2FjAAEAAAHqMA0GCSqGSIb3DQEB
|
|
1467
|
+
# CwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
|
|
1468
|
+
# EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
|
|
1469
|
+
# BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIzMTIwNjE4NDUz
|
|
1470
|
+
# MFoXDTI1MDMwNTE4NDUzMFowgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
|
|
1471
|
+
# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
|
|
1472
|
+
# cG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMx
|
|
1473
|
+
# JzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjozNzAzLTA1RTAtRDk0NzElMCMGA1UE
|
|
1474
|
+
# AxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcNAQEB
|
|
1475
|
+
# BQADggIPADCCAgoCggIBALULX/FIPyAH1fsu52ijatZvaSypoXrlC0mRtCmaxzob
|
|
1476
|
+
# huDkw6/pY/+4nhc4m8pf9zW3R6PihYGp0YPpVuNdfhPQp/KVO6WvMq2DGfFmHurW
|
|
1477
|
+
# 4PQPL/DkbQMkM9vqjFCvPq8xXZnfL1nGN9moGcN+oaif/hUMedmF1qzbay9ILkYf
|
|
1478
|
+
# LCxDYn3Qwzsvh5xjxOcsjzmRddNURJvT23Eva0cxisH4ocLLTx2zfpqfshw4Z9Ga
|
|
1479
|
+
# EdsWg9rmib1galUpLzF5PsQDBbtZtcv+Wjmn0pFEiMCWwEEcPVN0YG5ysYLdNBdJ
|
|
1480
|
+
# On2zsOOS+80W5RrQEqzPpSIIvEkZBJmF3aI4lMR8nV/FiTadjpIIqxX5Wa1XlqI/
|
|
1481
|
+
# Nj+xagVjnjb7POsA+vh6Wu+v24HpyL8pyL/8Q4RFkRRME9cwT+Jr63yOtPbLe6DX
|
|
1482
|
+
# kxIJW6E6w2ua5kXBpEKtEQPTLPhX3CUxMYcglbnmI0zcc9UknX285K+sI/2WwRwT
|
|
1483
|
+
# BZkhDUULI86eQzV+zvzzR1qEBrlSY+oyTlYQrHMM9WnTzVflFDocZVTPpl2BDSNx
|
|
1484
|
+
# Pn0Qb4IoM9EPqbHyi/MilL+v/AQc8q3mQ6FiuPJAddz0ocpNZ9ekBWPVLKq3lfie
|
|
1485
|
+
# v4yl65u/438+NAQ+vSJgkONLMmuoguEGzmnK1vq/JHwdRUyn6YADiteM7Dja+Qd9
|
|
1486
|
+
# AgMBAAGjggFJMIIBRTAdBgNVHQ4EFgQUK4FFJaJR5ukXQFTUxMhyiwVuWV4wHwYD
|
|
1487
|
+
# VR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKgUIZO
|
|
1488
|
+
# aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIw
|
|
1489
|
+
# VGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBc
|
|
1490
|
+
# BggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0
|
|
1491
|
+
# cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcnQwDAYD
|
|
1492
|
+
# VR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMC
|
|
1493
|
+
# B4AwDQYJKoZIhvcNAQELBQADggIBACiDrVZeP37+fFVtfcbfsqC/Kg0Ce67bDceh
|
|
1494
|
+
# ZmPcfRgJ5Ddv0pJlOFVOFbiIVwesqeEUwFtclfi5AjneQ5ZJpYJpXfELOelG3dzj
|
|
1495
|
+
# +BKfd287/UY/cwmSkl+CjnoKBL3Ms6I/fWR+alR0+p6RlviK8xHoug9vkc2WrRZs
|
|
1496
|
+
# GnMVu2xOM2tPJ+qpyoDBzqv30N/ZRBOoNrS/PCkDwLGICDYqVs/IzAE49yv2ElPy
|
|
1497
|
+
# walf9mEsOHXV1lxtQDNcejVEmitJJ+1Vr2EtafPEbMQZp89TAuagROKE4YuohCUK
|
|
1498
|
+
# m+v3geJqTQarTBjqV25RCOT+XFngTMDD9wYx6TwndB2I1Ly726NiHUHs0uvq3ciC
|
|
1499
|
+
# V9JwNXdt1VZ63WK1NSgpVEsiK9EPABPt1EfXcKrfaPYkbkFi79eK1ETxx3NomYNU
|
|
1500
|
+
# HNiGU+X1Be8L7qpHwjo0g3/33XhtOr9LiDoUXh/V2LFTETiqV9Q8yLEavQW3j9LQ
|
|
1501
|
+
# /h/CaGz5YdGfrY8HiPfMIeLEokKxGf0hHcTEFApB0yLlq6KoHrFAEANR/4XuFIpl
|
|
1502
|
+
# 9sDywVIWt4tKqG+P6pRAXzg1zG5rGlslZWmw7XwgvhBu3jkLP9AxrsSYwY2ftrww
|
|
1503
|
+
# ze5NA6VDLS7pz+OrXXWLUmoyNrJNx5Bk0wEwzkQxzkOvmbdPhsOP1ZM0uA/xIV7c
|
|
1504
|
+
# SpNpZUw5MIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG
|
|
1505
|
+
# 9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
|
|
1506
|
+
# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEy
|
|
1507
|
+
# MDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw
|
|
1508
|
+
# MTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJV
|
|
1509
|
+
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
|
|
1510
|
+
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
|
|
1511
|
+
# ZS1TdGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
|
|
1512
|
+
# AOThpkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az
|
|
1513
|
+
# /1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V2
|
|
1514
|
+
# 9YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oa
|
|
1515
|
+
# ezOtgFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkN
|
|
1516
|
+
# yjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7K
|
|
1517
|
+
# MtXAhjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRf
|
|
1518
|
+
# NN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SU
|
|
1519
|
+
# HDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoY
|
|
1520
|
+
# WmEBc8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5
|
|
1521
|
+
# C4lh8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8
|
|
1522
|
+
# FdsaN8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TAS
|
|
1523
|
+
# BgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1
|
|
1524
|
+
# Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUw
|
|
1525
|
+
# UzBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy
|
|
1526
|
+
# b3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoG
|
|
1527
|
+
# CCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIB
|
|
1528
|
+
# hjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fO
|
|
1529
|
+
# mhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w
|
|
1530
|
+
# a2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr
|
|
1531
|
+
# BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
|
|
1532
|
+
# bS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3
|
|
1533
|
+
# DQEBCwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEz
|
|
1534
|
+
# tTnXwnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJW
|
|
1535
|
+
# AAOwBb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G
|
|
1536
|
+
# 82jfZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/Aye
|
|
1537
|
+
# ixmJ5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI9
|
|
1538
|
+
# 5ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1j
|
|
1539
|
+
# dEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZ
|
|
1540
|
+
# KCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xB
|
|
1541
|
+
# Zj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuP
|
|
1542
|
+
# Ntq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvp
|
|
1543
|
+
# e784cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCA1Aw
|
|
1544
|
+
# ggI4AgEBMIH5oYHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
|
|
1545
|
+
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
|
|
1546
|
+
# cmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScw
|
|
1547
|
+
# JQYDVQQLEx5uU2hpZWxkIFRTUyBFU046MzcwMy0wNUUwLUQ5NDcxJTAjBgNVBAMT
|
|
1548
|
+
# HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUrDgMCGgMVAInb
|
|
1549
|
+
# HtxB+OlGyQnxQYhy04KSYSSPoIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNV
|
|
1550
|
+
# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
|
|
1551
|
+
# c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
|
|
1552
|
+
# UENBIDIwMTAwDQYJKoZIhvcNAQELBQACBQDpdwuXMCIYDzIwMjQwMjE0MDk1MTE5
|
|
1553
|
+
# WhgPMjAyNDAyMTUwOTUxMTlaMHcwPQYKKwYBBAGEWQoEATEvMC0wCgIFAOl3C5cC
|
|
1554
|
+
# AQAwCgIBAAICAbgCAf8wBwIBAAICFGEwCgIFAOl4XRcCAQAwNgYKKwYBBAGEWQoE
|
|
1555
|
+
# AjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkq
|
|
1556
|
+
# hkiG9w0BAQsFAAOCAQEAD3oj3Gr5HTA5vQkFXZE9QSfCqxmL4ez3qxPD1t/UMJ9w
|
|
1557
|
+
# 93APM6n5MjApe6tpBjo4Oe83WMnfsWNA5ZRu8B/XJhyJ8531k5XMROCaVX6eTOrO
|
|
1558
|
+
# 70mkxtszD1E2m5iFx2RYJKS2ldkFAnykkFMc4ezXHa+RAijQA3rQp2VNidnVEFkO
|
|
1559
|
+
# jkaZY2FoA2dbG7v9ZjkQsmrycREGNiakPhAgqqmTiUlDPvul5gJx24VGL0z7JZhP
|
|
1560
|
+
# KUsccmv6HF3sgD6FjhENyZtD1+NrRfVQHTrjitjpC/dX9ux2OP8pjPi3WIdPfEsI
|
|
1561
|
+
# 2PhWNWSEof4cWFv/lLlYAUVeHPDcafr+2umlLYb62zGCBA0wggQJAgEBMIGTMHwx
|
|
1562
|
+
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
|
|
1563
|
+
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1p
|
|
1564
|
+
# Y3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAB6pokctVZP2FjAAEAAAHq
|
|
1565
|
+
# MA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQw
|
|
1566
|
+
# LwYJKoZIhvcNAQkEMSIEIL2oG23lx47V7tAc0IyUsnuhSrJEjOACK32L1AXSjdl/
|
|
1567
|
+
# MIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgKY+h1eNkNHiLCDSW0sA1cGHk
|
|
1568
|
+
# bW4qooi+ryyMp6S4ZngwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
|
|
1569
|
+
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
|
|
1570
|
+
# IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
|
|
1571
|
+
# MjAxMAITMwAAAeqaJHLVWT9hYwABAAAB6jAiBCB7j2iMmFJTNAbY6vZ80pGTL0BC
|
|
1572
|
+
# A2VAW00KF9MbtVlx1zANBgkqhkiG9w0BAQsFAASCAgA1ArfmkqTc7BoI6J+6zHkc
|
|
1573
|
+
# TrfkFzsjKWBJpcPWwOPOZOdxfO850UPyrCLJgTclSkgnDBSSDQLqjhV2Q3EeM5tm
|
|
1574
|
+
# iBFU1IO7RIMeF4hTB2jOzGuvX46zRms8/booKtLBlPRscHvYbXgOUqIn9M2ymtZo
|
|
1575
|
+
# aMp08VpWw+PxTbSa6HN6jQiwVVtRg9nsGd4gY/mO6+agIkbSs6hY2oV6HyhDH3CB
|
|
1576
|
+
# DvEL3z7BCJ5Dx52K3XE2BUDR6nLhkGvxOxRaJ1GmJQXMMILDebq6ULx0ULThmpUQ
|
|
1577
|
+
# y6aifjEa3r60cjg29rKd/4PGmbDBaRAnVs7JEaxdSsTR75Ak7OKQymZ4yPI3bTkx
|
|
1578
|
+
# 1t/LCEKtia/oqv3tFMP8KtSUHZEK8PvmvRCJII2JrAUrxTYzrohxf/TL95sZdmGg
|
|
1579
|
+
# QNyQC2T+h816Kl7i+RrtXi5i6kSYqnTlr7uKFU4idVNRVxqiO/oumXhf6REHp1Wi
|
|
1580
|
+
# V60E8w5gawis5jnaJqZMeCiyHSLhm+zvXaCMm1AHUWQ6zK/GWOp1Y0wHiJRr5pnf
|
|
1581
|
+
# 4wIKAt7oKWL/clx2jikqesxYFfGBq0YnfRUyHt3bscb83xfbFMjcbok/UI8fxWQM
|
|
1582
|
+
# vLsaEzFVp+a7wRqLf4KjiYzF4hORFWoGlZbGglkVYiYswX8Emsx5cn2F5M9cznRn
|
|
1583
|
+
# 4d+LeskiXr3Z0pV6Ooki3w==
|
|
1095
1584
|
# SIG # End signature block
|