in src/templates/dotnet/executeDotnetTemplateCommand.ts [48:99]
async function getFramework(context: IActionContext, workingDirectory: string | undefined): Promise<string> {
if (!cachedFramework) {
let versions: string = '';
try {
versions += await cpUtils.executeCommand(undefined, workingDirectory, 'dotnet', '--version');
} catch {
// ignore
}
try {
versions += await cpUtils.executeCommand(undefined, workingDirectory, 'dotnet', '--list-sdks');
} catch {
// ignore
}
// Prioritize "LTS", then "Current", then "Preview"
const netVersions: string[] = ['6.0', '5.0', '3.1'];
const semVersions: SemVer[] = netVersions.map(v => semVerCoerce(v) as SemVer);
let pickedVersion: SemVer | undefined;
// Try to get a GA version first (i.e. "1.0.0")
for (const semVersion of semVersions) {
const regExp: RegExp = new RegExp(`^\\s*${semVersion.major}\\.${semVersion.minor}\\.[0-9]+(\\s|$)`, 'm');
if (regExp.test(versions)) {
pickedVersion = semVersion;
break;
}
}
// Otherwise allow a preview version (i.e. "1.0.0-alpha")
if (!pickedVersion) {
for (const semVersion of semVersions) {
const regExp: RegExp = new RegExp(`^\\s*${semVersion.major}\\.${semVersion.minor}\\.`, 'm');
if (regExp.test(versions)) {
pickedVersion = semVersion;
break;
}
}
}
if (!pickedVersion) {
context.errorHandling.suppressReportIssue = true;
throw new Error(localize('noMatchingFramework', 'You must have the [.NET Core SDK](https://aka.ms/AA4ac70) installed to perform this operation. See [here](https://aka.ms/AA1tpij) for supported versions.'));
} else {
cachedFramework = `${pickedVersion.major < 4 ? 'netcoreapp' : 'net'}${pickedVersion.major}.${pickedVersion.minor}`;
}
}
return cachedFramework;
}