export async function verifyTargetFramework()

in src/vsCodeConfig/verifyTargetFramework.ts [14:59]


export async function verifyTargetFramework(projectLanguage: ProjectLanguage, folder: vscode.WorkspaceFolder, projectPath: string, context: IActionContext): Promise<void> {
    const settingKey: string = 'showTargetFrameworkWarning';
    if (getWorkspaceSetting<boolean>(settingKey)) {

        const projFiles: dotnetUtils.ProjectFile[] = await dotnetUtils.getProjFiles(context, projectLanguage, projectPath);
        if (projFiles.length === 1) {

            let targetFramework: string;
            try {
                targetFramework = await dotnetUtils.getTargetFramework(projFiles[0]);
            } catch {
                // ignore
                return;
            }

            const tasksResult: IVerifyFrameworkResult | undefined = verifyTasksFramework(folder, targetFramework);
            const settingsResult: IVerifyFrameworkResult | undefined = verifySettingsFramework(folder.uri.fsPath, targetFramework);

            const mismatchTargetFramework: string | undefined = (tasksResult && tasksResult.mismatchTargetFramework) || (settingsResult && settingsResult.mismatchTargetFramework);
            if (mismatchTargetFramework) {
                context.telemetry.properties.verifyConfigPrompt = 'updateTargetFramework';

                // This won't handle the case where there are multiple different target frameworks, but it's good enough for the message
                const message: string = localize('mismatchTargetFramework', 'The targetFramework "{0}" in your project file does not match the targetFramework "{1}" in your VS Code config.', targetFramework, mismatchTargetFramework);
                const update: vscode.MessageItem = { title: localize('updateTargetFramework', 'Update VS Code config') };

                const result: vscode.MessageItem = await context.ui.showWarningMessage(message, update, DialogResponses.dontWarnAgain);
                if (result === DialogResponses.dontWarnAgain) {
                    context.telemetry.properties.verifyConfigResult = 'dontWarnAgain';
                    await updateWorkspaceSetting(settingKey, false, folder);
                } else if (result === update) {
                    context.telemetry.properties.verifyConfigResult = 'update';
                    if (tasksResult) {
                        await tasksResult.update();
                    }

                    if (settingsResult) {
                        await settingsResult.update();
                    }
                }
            }
        }
    } else {
        context.telemetry.properties.verifyConfigResult = 'suppressed';
    }
}