diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Cpp/CppStyleEvaluatorDefinition.cs b/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Cpp/CppStyleEvaluatorDefinition.cs index efc8d17dfec4..b26378c9b649 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Cpp/CppStyleEvaluatorDefinition.cs +++ b/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Cpp/CppStyleEvaluatorDefinition.cs @@ -522,7 +522,13 @@ private static bool EvaluateCondition(IReadOnlyList tokens, IReadOnlyL } Debug.Assert(parents.Count == 0, "Unbalanced condition"); - return (bool)Convert.ChangeType(current.Evaluate() ?? "false", typeof(bool)); + object? evaluated = current.Evaluate(); + // Unspecified choice parameters have defaultValue: "" which evaluates as empty string → treat as false + if (evaluated is string evalStr && string.IsNullOrEmpty(evalStr)) + { + return false; + } + return (bool)Convert.ChangeType(evaluated ?? "false", typeof(bool)); } private static object? InferTypeAndConvertLiteral(string literal) diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Cpp/Scope.cs b/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Cpp/Scope.cs index e3f9714155fe..4619641f6e84 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Cpp/Scope.cs +++ b/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Cpp/Scope.cs @@ -57,13 +57,13 @@ public object Evaluate() switch (Operator) { case Operator.Not: - return !EvaluateSide(Right!, x => Convert.ToBoolean(x ?? "False")); + return !EvaluateSide(Right!, ToBool); case Operator.And: - return EvaluateSides(Left!, Right!, x => (bool)x, (x, y) => x && y); + return EvaluateSides(Left!, Right!, ToBool, (x, y) => x && y); case Operator.Or: - return EvaluateSides(Left!, Right!, x => (bool)x, (x, y) => x || y); + return EvaluateSides(Left!, Right!, ToBool, (x, y) => x || y); case Operator.Xor: - return EvaluateSides(Left!, Right!, x => (bool)x, (x, y) => x ^ y); + return EvaluateSides(Left!, Right!, ToBool, (x, y) => x ^ y); case Operator.EqualTo: return EvaluateSides(Left!, Right!, x => x, LenientEquals); case Operator.NotEqualTo: @@ -104,6 +104,18 @@ private static T EvaluateSide(object side, Func convert) return convert(side); } + private static bool ToBool(object? x) + { + return x switch + { + bool b => b, + null => false, + string s when string.IsNullOrEmpty(s) => false, // unspecified choice parameter (defaultValue: "") → false + string s when bool.TryParse(s, out bool parsed) => parsed, + _ => Convert.ToBoolean(x) + }; + } + private static bool LenientEquals(object x, object y) { if (x is string sx && y is string sy) diff --git a/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Shared/SharedEvaluatorDefinition.cs b/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Shared/SharedEvaluatorDefinition.cs index c1c09a090c6f..9177bc836938 100644 --- a/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Shared/SharedEvaluatorDefinition.cs +++ b/src/TemplateEngine/Microsoft.TemplateEngine.Core/Expressions/Shared/SharedEvaluatorDefinition.cs @@ -177,7 +177,15 @@ private static bool Evaluate( try { object? evalResult = expression?.Evaluate(); - result = (bool)Convert.ChangeType(evalResult, typeof(bool)); + // Unspecified choice parameters have defaultValue: "" which evaluates as empty string → treat as false + if (evalResult is string evalStr && string.IsNullOrEmpty(evalStr)) + { + result = false; + } + else + { + result = (bool)Convert.ChangeType(evalResult, typeof(bool)); + } } catch (Exception e) { diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/dotnetcli.host.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/dotnetcli.host.json index dd7d1528bb3b..f3f439eeabf9 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/dotnetcli.host.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/dotnetcli.host.json @@ -5,6 +5,14 @@ "longName": "sdk-version", "shortName": "" }, + "AllowPrerelease": { + "longName": "allow-prerelease", + "shortName": "" + }, + "NoSdkVersion": { + "longName": "no-sdk-version", + "shortName": "" + }, "RollForward": { "longName": "roll-forward", "shortName": "" diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.cs.json index 055a31846996..0f924f11f93a 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.cs.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "Verze .NET SDK, která se má použít.", "symbols/SdkVersion/displayName": "Verze SDK", "symbols/dotnet-cli-version/displayName": "verze dotnet CLI", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "Zásada posunutí vpřed, která se použije při výběru verze sady SDK", "symbols/RollForward/displayName": "Zásada posunutí vpřed", "symbols/RollForward/choices/patch/description": "Používá zadanou verzi.\nPokud se nenajde, posune se vpřed na nejnovější úroveň opravy.\nPokud se nenajde, selže.\nTato hodnota je starší verze chování z předchozích verzí sady SDK.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.de.json index 6157073e542e..b06e471382a4 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.de.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "Die zu verwendende Version des .NET-SDKs.", "symbols/SdkVersion/displayName": "SDK-Version", "symbols/dotnet-cli-version/displayName": "dotnet CLI-Version", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "Die Rollforwardrichtlinie, die bei der Auswahl einer SDK-Version verwendet werden soll.", "symbols/RollForward/displayName": "Rollforwardrichtlinie", "symbols/RollForward/choices/patch/description": "Verwendet die angegebene Version.\nFalls nicht gefunden, wird ein Rollforward auf die neueste Patchebene ausgeführt.\nWenn nicht gefunden, tritt ein Fehler auf.\nDieser Wert ist das Legacyverhalten aus früheren Versionen des SDK.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.en.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.en.json index 3049eb02e445..dadc66c293fc 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.en.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.en.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "The version of the .NET SDK to use.", "symbols/SdkVersion/displayName": "SDK version", "symbols/dotnet-cli-version/displayName": "dotnet CLI version", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "The roll-forward policy to use when selecting an SDK version.", "symbols/RollForward/displayName": "Roll-forward policy", "symbols/RollForward/choices/patch/description": "Uses the specified version.\nIf not found, rolls forward to the latest patch level.\nIf not found, fails.\nThis value is the legacy behavior from the earlier versions of the SDK.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.es.json index 289585b96176..204e421086fc 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.es.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "Versión del SDK de .NET que se va a usar.", "symbols/SdkVersion/displayName": "versión de SDK", "symbols/dotnet-cli-version/displayName": "versión de la CLI de dotnet", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "Directiva de reenvío que se va a usar al seleccionar una versión de SDK.", "symbols/RollForward/displayName": "Directiva de reenvío", "symbols/RollForward/choices/patch/description": "Usa la versión especificada.\nSi no se encuentra, avanza al nivel de revisión más reciente.\nSi no se encuentra, devuelve un error.\nEste valor es el comportamiento heredado de las versiones anteriores del SDK.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.fr.json index 28f116ff68b3..bfc61ba87f80 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.fr.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "Version du kit SDK .NET à utiliser", "symbols/SdkVersion/displayName": "Version du SDK", "symbols/dotnet-cli-version/displayName": "Version de l’interface CLI dotnet", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "La stratégie d'actualisation à utiliser lors de la sélection d'une version du kit de développement logiciel (SDK).", "symbols/RollForward/displayName": "Stratégie de restauration par progression", "symbols/RollForward/choices/patch/description": "Utilise la version spécifiée.\nSi la recherche est introuvable, reportez-vous au niveau de correctif le plus récent.\nSi introuvable, échec.\nCette valeur est le comportement hérité des versions antérieures du kit de développement logiciel (SDK).", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.it.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.it.json index 2a62d6bc5c55..542f18467c5b 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.it.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.it.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "Versione del .NET SDK da utilizzare.", "symbols/SdkVersion/displayName": "Versione SDK", "symbols/dotnet-cli-version/displayName": "Versione dotnet CLI", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "I criteri di roll-forward da utilizzare quando si seleziona una versione dell'SDK.", "symbols/RollForward/displayName": "Criteri di roll-forward", "symbols/RollForward/choices/patch/description": "Utilizza la versione specificata.\nSe non viene trovata, esegue il roll-forward verso il più recente livello di patch.\nSe non viene trovato, ha esito negativo.\nQuesto valore è il comportamento legacy delle versioni precedenti dell'SDK.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ja.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ja.json index 35c290f8b8fd..2eb1f653eb7a 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ja.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ja.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "使用する .NET SDK のバージョンです。", "symbols/SdkVersion/displayName": "SDK バージョン", "symbols/dotnet-cli-version/displayName": "dotnet CLI バージョン", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "SDK バージョンを選択する場合に使用するロールフォワード ポリシー。", "symbols/RollForward/displayName": "ロールフォワード ポリシー", "symbols/RollForward/choices/patch/description": "指定されたバージョンを使用します。\n見つからない場合は、最新のパッチ レベルにロールフォワードします。\n見つからない場合は失敗します。\nこの値は、以前のバージョンからの SDK の従来の動作です。", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ko.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ko.json index 79c43a896860..1a960463a58d 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ko.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ko.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "사용할 .NET SDK의 버전입니다.", "symbols/SdkVersion/displayName": "SDK 버전", "symbols/dotnet-cli-version/displayName": "dotnet CLI 버전", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "SDK 버전을 선택할 때 사용할 롤포워드 정책입니다.", "symbols/RollForward/displayName": "롤포워드 정책", "symbols/RollForward/choices/patch/description": "지정된 버전을 사용합니다.\n찾을 수 없으면 최신 패치 수준으로 롤포워드합니다.\n찾을 수 없으면 실패합니다.\n이 값은 이전 SDK 버전의 레거시 동작입니다.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.pl.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.pl.json index a7239081f6e8..b663ab226c50 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.pl.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.pl.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "Wersja zestawu .NET SDK do użycia.", "symbols/SdkVersion/displayName": "Wersja zestawu SDK", "symbols/dotnet-cli-version/displayName": "Wersja interfejsu wiersza polecenia dotnet", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "Zasady przechodzenia używane w przypadku wybierania wersji zestawu SDK.", "symbols/RollForward/displayName": "Zasady przechodzenia", "symbols/RollForward/choices/patch/description": "Używa określonej wersji.\nJeśli nie znaleziono, zostanie przeniesiona do najnowszego poziomu poprawek.\nJeśli nie znaleziono, oznacza to niepowodzenie.\nTa wartość to starsze zachowanie z wcześniejszych wersji zestawu SDK.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.pt-BR.json index 55a2663ecced..34bb184c460b 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.pt-BR.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "A versão do SDK do .NET a ser usada.", "symbols/SdkVersion/displayName": "Versão do SDK", "symbols/dotnet-cli-version/displayName": "Versão do CLI do dotnet", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "A política de rolar para frente a ser usada ao selecionar uma versão do SDK.", "symbols/RollForward/displayName": "Política de rolar para frente", "symbols/RollForward/choices/patch/description": "Usa a versão especificada.\nSe não for encontrado, avança para o nível de patch mais recente.\nSe não for encontrado, falha.\nEste valor é o comportamento herdado das versões anteriores do SDK.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ru.json index a07f42658c92..e55301c1f77b 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.ru.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "Используемая версия пакета SDK для .NET.", "symbols/SdkVersion/displayName": "Версия пакета SDK", "symbols/dotnet-cli-version/displayName": "Версия CLI dotnet", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "Политика наката, используемая при выборе версии пакета SDK.", "symbols/RollForward/displayName": "Политика наката", "symbols/RollForward/choices/patch/description": "Использует указанную версию.\nЕсли не найдено, выполняется накат до последнего уровня исправления.\nЕсли не найдено, происходит сбой.\nЭто значение является устаревшим поведением из более ранних версий пакета SDK.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.tr.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.tr.json index 74048234a66c..41858399a98f 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.tr.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.tr.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "Kullanılacak .NET SDK sürümü.", "symbols/SdkVersion/displayName": "SDK sürümü", "symbols/dotnet-cli-version/displayName": "dotnet CLI sürümü", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "SDK sürümü seçerken kullanılacak ileri alma ilkesi.", "symbols/RollForward/displayName": "İleri sarma ilkesi", "symbols/RollForward/choices/patch/description": "Belirtilen sürümü kullanır.\nBulunamazsa, en son düzeltme eki düzeyine ileri sarar.\nBulunamazsa başarısız olur.\nBu değer, SDK 'nın önceki sürümlerindeki eski davranıştır.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.zh-Hans.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.zh-Hans.json index 5030c3598283..7aa34152a3d8 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.zh-Hans.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.zh-Hans.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "要使用的 .NET SDK 的版本。", "symbols/SdkVersion/displayName": "SDK 版本", "symbols/dotnet-cli-version/displayName": "dotnet CLI 版本", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "选择 SDK 版本时要使用的前滚策略。", "symbols/RollForward/displayName": "前滚策略", "symbols/RollForward/choices/patch/description": "使用指定的版本。\n如果未找到,请前滚到最新的补丁级别。\n如果未找到,则为失败。\n该值为早期 SDK 版本中的旧行为。", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.zh-Hant.json index a459d69f8807..b70c690e54ae 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/localize/templatestrings.zh-Hant.json @@ -5,6 +5,14 @@ "symbols/SdkVersion/description": "要使用的 .NET SDK 版本。", "symbols/SdkVersion/displayName": "SDK 版本", "symbols/dotnet-cli-version/displayName": "dotnet CLI 版本", + "symbols/AllowPrerelease/description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "symbols/AllowPrerelease/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/true/description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/true/displayName": "Allow prerelease", + "symbols/AllowPrerelease/choices/false/description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "symbols/AllowPrerelease/choices/false/displayName": "Disallow prerelease", + "symbols/NoSdkVersion/description": "Exclude the SDK version from the generated global.json.", + "symbols/NoSdkVersion/displayName": "No SDK version", "symbols/RollForward/description": "選取 SDK 版本時所要使用的向前復原原則。", "symbols/RollForward/displayName": "向前復原原則", "symbols/RollForward/choices/patch/description": "使用指定的版本。\n如果找不到,則向前復原到最新的修補程式等級。\n如果找不到,則失敗。\n此值是來自 SDK 早期版本的舊版行為。", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/template.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/template.json index 0dadf990e3b9..61f24e9c1504 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/template.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/.template.config/template.json @@ -68,6 +68,34 @@ ] } }, + "AllowPrerelease": { + "type": "parameter", + "description": "Whether prerelease SDK versions should be considered when selecting the SDK version to use.", + "displayName": "Allow prerelease", + "replaces": "ALLOW_PRERELEASE_VALUE", + "defaultValue": "", + "defaultIfOptionWithoutValue": "true", + "datatype": "choice", + "choices": [ + { + "choice": "true", + "description": "Consider prerelease SDK versions when selecting the .NET SDK version to use.", + "displayName": "Allow prerelease" + }, + { + "choice": "false", + "description": "Don't consider prerelease SDK versions when selecting the .NET SDK version to use.", + "displayName": "Disallow prerelease" + } + ] + }, + "NoSdkVersion": { + "type": "parameter", + "datatype": "bool", + "defaultValue": false, + "description": "Exclude the SDK version from the generated global.json.", + "displayName": "No SDK version" + }, "RollForward": { "type": "parameter", "description": "The roll-forward policy to use when selecting an SDK version.", diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/global.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/global.json index 23baa04ff4aa..d2f913b56e75 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/global.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/GlobalJson/global.json @@ -1,9 +1,18 @@ { "sdk": { - //#if (RollForward!="") + //#if (RollForward!="" && (!NoSdkVersion || AllowPrerelease!="")) "rollForward": "ROLL_FORWARD_VALUE", + //#elseif (RollForward!="" && AllowPrerelease=="" && NoSdkVersion) + "rollForward": "ROLL_FORWARD_VALUE" //#endif + //#if (AllowPrerelease!="" && !NoSdkVersion) + "allowPrerelease": ALLOW_PRERELEASE_VALUE, + //#elseif (AllowPrerelease!="" && NoSdkVersion) + "allowPrerelease": ALLOW_PRERELEASE_VALUE + //#endif + //#if (!NoSdkVersion) "version": "SDK_VERSION" + //#endif //#if (TestRunner=="") } //#else diff --git a/test/TemplateEngine/Microsoft.TemplateEngine.Core.UnitTests/Cpp2EvaluatorTests.cs b/test/TemplateEngine/Microsoft.TemplateEngine.Core.UnitTests/Cpp2EvaluatorTests.cs index eab5ae614732..c71c54d97d9d 100644 --- a/test/TemplateEngine/Microsoft.TemplateEngine.Core.UnitTests/Cpp2EvaluatorTests.cs +++ b/test/TemplateEngine/Microsoft.TemplateEngine.Core.UnitTests/Cpp2EvaluatorTests.cs @@ -90,6 +90,66 @@ public void VerifyCpp2EvaluatorTrueBooleanVariable() Assert.IsTrue(result); } + [TestMethod] + public void VerifyCpp2EvaluatorStringBoolAndExpression() + { + // Validates that And operator handles string-typed bool values (e.g. from template parameters + // stored as strings) without throwing InvalidCastException. + VariableCollection vc = new VariableCollection + { + ["FIRST_IF"] = "false", + ["SECOND_IF"] = "true" + }; + bool result = Cpp2StyleEvaluatorDefinition.EvaluateFromString(_logger, "FIRST_IF && SECOND_IF", vc, out string? faultedMessage); + Assert.IsNull(faultedMessage); + Assert.IsFalse(result); + } + + [TestMethod] + public void VerifyCpp2EvaluatorStringBoolOrExpression() + { + // Validates that Or operator handles string-typed bool values without throwing InvalidCastException. + VariableCollection vc = new VariableCollection + { + ["FIRST_IF"] = "false", + ["SECOND_IF"] = "true" + }; + bool result = Cpp2StyleEvaluatorDefinition.EvaluateFromString(_logger, "FIRST_IF || SECOND_IF", vc, out string? faultedMessage); + Assert.IsNull(faultedMessage); + Assert.IsTrue(result); + } + + [TestMethod] + public void VerifyCpp2EvaluatorEmptyStringVariableAsBool() + { + // Validates that a variable with empty-string value (e.g. a choice parameter with defaultValue: "") + // is treated as false in a boolean context, without setting a faultedMessage. + VariableCollection vc = new VariableCollection + { + ["ALLOW_PRERELEASE"] = "", + ["NO_SDK_VERSION"] = false + }; + // Bare empty-string variable should evaluate to false without error + bool result = Cpp2StyleEvaluatorDefinition.EvaluateFromString(_logger, "ALLOW_PRERELEASE", vc, out string? faultedMessage); + Assert.IsNull(faultedMessage); + Assert.IsFalse(result); + } + + [TestMethod] + public void VerifyCpp2EvaluatorEmptyStringAndBoolExpression() + { + // Validates that And with an empty-string operand doesn't throw. + VariableCollection vc = new VariableCollection + { + ["ALLOW_PRERELEASE"] = "", + ["NO_SDK_VERSION"] = false + }; + // (!NO_SDK_VERSION || ALLOW_PRERELEASE!="") - a representative condition from global.json template + bool result = Cpp2StyleEvaluatorDefinition.EvaluateFromString(_logger, "(!NO_SDK_VERSION || ALLOW_PRERELEASE!=\"\")", vc, out string? faultedMessage); + Assert.IsNull(faultedMessage); + Assert.IsTrue(result); // !false = true, regardless of right side + } + [TestMethod] public void VerifyCpp2EvaluatorTrueVariableErroneousExpression() { diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false#--no-sdk-version.verified/global-json-file/global.json b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false#--no-sdk-version.verified/global-json-file/global.json new file mode 100644 index 000000000000..e0ec857ea38b --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false#--no-sdk-version.verified/global-json-file/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "allowPrerelease": false + } +} diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false#--no-sdk-version.verified/std-streams/stdout.txt b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false#--no-sdk-version.verified/std-streams/stdout.txt new file mode 100644 index 000000000000..70cab17a4b13 --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false#--no-sdk-version.verified/std-streams/stdout.txt @@ -0,0 +1 @@ +The template "%TEMPLATE_NAME%" was created successfully. \ No newline at end of file diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false.verified/global-json-file/global.json b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false.verified/global-json-file/global.json new file mode 100644 index 000000000000..19294450d045 --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false.verified/global-json-file/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "allowPrerelease": false, + "version": "%CURRENT-VER%" + } +} diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false.verified/std-streams/stdout.txt b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false.verified/std-streams/stdout.txt new file mode 100644 index 000000000000..70cab17a4b13 --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#false.verified/std-streams/stdout.txt @@ -0,0 +1 @@ +The template "%TEMPLATE_NAME%" was created successfully. \ No newline at end of file diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#true.verified/global-json-file/global.json b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#true.verified/global-json-file/global.json new file mode 100644 index 000000000000..968a1236adea --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#true.verified/global-json-file/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "allowPrerelease": true, + "version": "%CURRENT-VER%" + } +} diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#true.verified/std-streams/stdout.txt b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#true.verified/std-streams/stdout.txt new file mode 100644 index 000000000000..70cab17a4b13 --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--allow-prerelease#true.verified/std-streams/stdout.txt @@ -0,0 +1 @@ +The template "%TEMPLATE_NAME%" was created successfully. \ No newline at end of file diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--no-sdk-version.verified/global-json-file/global.json b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--no-sdk-version.verified/global-json-file/global.json new file mode 100644 index 000000000000..a367c10a17d8 --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--no-sdk-version.verified/global-json-file/global.json @@ -0,0 +1,4 @@ +{ + "sdk": { + } +} diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--no-sdk-version.verified/std-streams/stdout.txt b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--no-sdk-version.verified/std-streams/stdout.txt new file mode 100644 index 000000000000..70cab17a4b13 --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--no-sdk-version.verified/std-streams/stdout.txt @@ -0,0 +1 @@ +The template "%TEMPLATE_NAME%" was created successfully. \ No newline at end of file diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--sdk-version#6.0.200#--allow-prerelease#false.verified/global-json-file/global.json b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--sdk-version#6.0.200#--allow-prerelease#false.verified/global-json-file/global.json new file mode 100644 index 000000000000..b4b2a1a8187f --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--sdk-version#6.0.200#--allow-prerelease#false.verified/global-json-file/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "allowPrerelease": false, + "version": "6.0.200" + } +} diff --git a/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--sdk-version#6.0.200#--allow-prerelease#false.verified/std-streams/stdout.txt b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--sdk-version#6.0.200#--allow-prerelease#false.verified/std-streams/stdout.txt new file mode 100644 index 000000000000..70cab17a4b13 --- /dev/null +++ b/test/dotnet-new.IntegrationTests/Approvals/AllCommonItemsCreate.-o#global-json-file#-n#item#--sdk-version#6.0.200#--allow-prerelease#false.verified/std-streams/stdout.txt @@ -0,0 +1 @@ +The template "%TEMPLATE_NAME%" was created successfully. \ No newline at end of file diff --git a/test/dotnet-new.IntegrationTests/Approvals/DotnetNewHelpTests.CanShowHelpForTemplate_globaljson.verified.txt b/test/dotnet-new.IntegrationTests/Approvals/DotnetNewHelpTests.CanShowHelpForTemplate_globaljson.verified.txt index e2eabff978f0..2059bda5d88e 100644 --- a/test/dotnet-new.IntegrationTests/Approvals/DotnetNewHelpTests.CanShowHelpForTemplate_globaljson.verified.txt +++ b/test/dotnet-new.IntegrationTests/Approvals/DotnetNewHelpTests.CanShowHelpForTemplate_globaljson.verified.txt @@ -7,29 +7,95 @@ Usage: dotnet new global.json [options] [template options] Options: - -n, --name The name for the output being created. If no name is specified, the name of the output directory is used. + -n, --name The name for the output being created. If no name is + specified, the name of the output directory is used. -o, --output Location to place the generated output. - --dry-run Displays a summary of what would happen if the given command line were run if it would result in a template creation. [default: False] - --force Forces content to be generated even if it would change existing files. [default: False] - --no-update-check Disables checking for the template package updates when instantiating a template. [default: False] + --dry-run Displays a summary of what would happen if the given + command line were run if it would result in a template + creation. [default: False] + --force Forces content to be generated even if it would change + existing files. [default: False] + --no-update-check Disables checking for the template package updates + when instantiating a template. [default: False] --project The project that should be used for context evaluation. --type Specifies the template type to instantiate. Template options: - --sdk-version The version of the .NET SDK to use. - Type: string - --roll-forward The roll-forward policy to use when selecting an SDK version. - Type: choice - patch Uses the specified version. If not found, rolls forward to the latest patch level. If not found, fails. This value is the legacy behavior from the earlier versions of the SDK. - feature Uses the latest patch level for the specified major, minor, and feature band. If not found, rolls forward to the next higher feature band within the same major/minor and uses the latest patch level for that feature band. If not found, fails. - minor Uses the latest patch level for the specified major, minor, and feature band. If not found, rolls forward to the next higher feature band within the same major/minor version and uses the latest patch level for that feature band. If not found, rolls forward to the next higher minor and feature band within the same major and uses the latest patch level for that feature band. If not found, fails. - major Uses the latest patch level for the specified major, minor, and feature band. If not found, rolls forward to the next higher feature band within the same major/minor version and uses the latest patch level for that feature band. If not found, rolls forward to the next higher minor and feature band within the same major and uses the latest patch level for that feature band. If not found, rolls forward to the next higher major, minor, and feature band and uses the latest patch level for that feature band. If not found, fails. - latestPatch Uses the latest installed patch level that matches the requested major, minor, and feature band with a patch level and that is greater or equal than the specified value. If not found, fails. - latestFeature Uses the highest installed feature band and patch level that matches the requested major and minor with a feature band and patch level that is greater or equal than the specified value. If not found, fails. - latestMinor Uses the highest installed minor, feature band, and patch level that matches the requested major with a minor, feature band, and patch level that is greater or equal than the specified value. If not found, fails. - latestMajor Uses the highest installed .NET SDK with a version that is greater or equal than the specified value. If not found, fail. - disable Doesn't roll forward. Exact match required. - --test-runner The test runner to use. - Type: choice - VSTest Use VSTest as test runner - Microsoft.Testing.Platform Use Microsoft.Testing.Platform as test runner \ No newline at end of file + --sdk-version The version of the .NET SDK to use. + Type: string + --allow-prerelease Whether prerelease SDK versions should be + considered when selecting the SDK version to + use. + Type: choice + true Consider prerelease SDK versions when + selecting the .NET SDK version to use. + false Don't consider prerelease SDK versions + when selecting the .NET SDK version to use. + Default if option is provided without a value: + true + --no-sdk-version Exclude the SDK version from the generated + global.json. + Type: bool + Default: false + --roll-forward The roll-forward policy to use when selecting an + SDK version. + Type: choice + patch Uses the specified version. If + not found, rolls forward to the latest patch + level. If not found, fails. This value is the + legacy behavior from the earlier versions of the + SDK. + feature Uses the latest patch level for + the specified major, minor, and feature band. If + not found, rolls forward to the next higher + feature band within the same major/minor and + uses the latest patch level for that feature + band. If not found, fails. + minor Uses the latest patch level for + the specified major, minor, and feature band. If + not found, rolls forward to the next higher + feature band within the same major/minor version + and uses the latest patch level for that feature + band. If not found, rolls forward to the next + higher minor and feature band within the same + major and uses the latest patch level for that + feature band. If not found, fails. + major Uses the latest patch level for + the specified major, minor, and feature band. If + not found, rolls forward to the next higher + feature band within the same major/minor version + and uses the latest patch level for that feature + band. If not found, rolls forward to the next + higher minor and feature band within the same + major and uses the latest patch level for that + feature band. If not found, rolls forward to the + next higher major, minor, and feature band and + uses the latest patch level for that feature + band. If not found, fails. + latestPatch Uses the latest installed patch + level that matches the requested major, minor, + and feature band with a patch level and that is + greater or equal than the specified value. If + not found, fails. + latestFeature Uses the highest installed + feature band and patch level that matches the + requested major and minor with a feature band + and patch level that is greater or equal than + the specified value. If not found, fails. + latestMinor Uses the highest installed + minor, feature band, and patch level that + matches the requested major with a minor, + feature band, and patch level that is greater or + equal than the specified value. If not found, + fails. + latestMajor Uses the highest installed .NET + SDK with a version that is greater or equal than + the specified value. If not found, fail. + disable Doesn't roll forward. Exact + match required. + --test-runner The test runner to use. + Type: choice + VSTest Use VSTest as test + runner + Microsoft.Testing.Platform Use + Microsoft.Testing.Platform as test runner \ No newline at end of file diff --git a/test/dotnet-new.IntegrationTests/CommonTemplatesTests.cs b/test/dotnet-new.IntegrationTests/CommonTemplatesTests.cs index 28390b5b6d46..fd28b6b05482 100644 --- a/test/dotnet-new.IntegrationTests/CommonTemplatesTests.cs +++ b/test/dotnet-new.IntegrationTests/CommonTemplatesTests.cs @@ -35,6 +35,11 @@ public static void ClassInitialize(TestContext ctx) [DataRow("global.json file", "globaljson", null)] [DataRow("global.json file", "globaljson", new[] { "--sdk-version", "6.0.200" })] [DataRow("global.json file", "globaljson", new[] { "--sdk-version", "6.0.200", "--roll-forward", "major" })] + [DataRow("global.json file", "globaljson", new[] { "--allow-prerelease", "false" })] + [DataRow("global.json file", "globaljson", new[] { "--allow-prerelease", "true" })] + [DataRow("global.json file", "globaljson", new[] { "--sdk-version", "6.0.200", "--allow-prerelease", "false" })] + [DataRow("global.json file", "globaljson", new[] { "--no-sdk-version" })] + [DataRow("global.json file", "globaljson", new[] { "--allow-prerelease", "false", "--no-sdk-version" })] [DataRow("global.json file", "globaljson", new[] { "--test-runner", "VSTest" })] [DataRow("global.json file", "globaljson", new[] { "--test-runner", "Microsoft.Testing.Platform" })] [DataRow("global.json file", "globaljson", new[] { "--sdk-version", "6.0.200", "--test-runner", "VSTest" })] @@ -99,7 +104,7 @@ public async Task AllCommonItemsCreate(string expectedTemplateName, string templ // globaljson is appending current sdk version. Due to the 'base' dotnet used to run test this version differs // on dev and CI runs and possibly from the version within test host. Easiest is just to scrub it away if (expectedTemplateName.Equals("global.json file") && - (args == null || !args.Contains("--sdk-version"))) + (args == null || (!args.Contains("--sdk-version") && !args.Contains("--no-sdk-version")))) { string sdkVersionUnderTest = await new SdkInfoProvider().GetCurrentVersionAsync(TestContext.CancellationToken); options.CustomScrubbers?.AddScrubber(sb => sb.Replace(sdkVersionUnderTest, "%CURRENT-VER%"), "json");