Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[net8 preview 2] dotnet new command never finishes for unknown parameter condition evaluation #6366

Closed
YuliiaKovalova opened this issue Apr 11, 2023 · 3 comments · Fixed by #6569
Assignees
Labels
Iteration:2023June Iteration:2023May triaged The issue was evaluated by the triage team, placed on correct area, next action defined.

Comments

@YuliiaKovalova
Copy link
Member

[ORIGINATES FROM https://github.com/dotnet/templates/issues/723]

dotnet new command never finishes and seems to fall in an infinite loop during parameter condition evaluation with net8 preview 2.
The same template works properly with latest net7 builds.

Steps to repro
Install .NET 8 Preview 2
dotnet new install Uno.Templates
dotnet new unoapp -o testapp
The command fails to finish and is stuck in the following expression (original template source):

	this	Cannot obtain value of the local variable or argument because it is not available at this instruction pointer, possibly because it has been optimized away.	Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.EvaluateMacro
	environmentSettings	{Microsoft.TemplateEngine.Edge.EngineEnvironmentSettings}	Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings {Microsoft.TemplateEngine.Edge.EngineEnvironmentSettings}
	variableCollection	{Microsoft.TemplateEngine.Orchestrator.RunnableProjects.ParameterBasedVariableCollection}	Microsoft.TemplateEngine.Abstractions.IVariableCollection {Microsoft.TemplateEngine.Orchestrator.RunnableProjects.ParameterBasedVariableCollection}
	config	{Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.EvaluateMacroConfig}	Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.EvaluateMacroConfig
	Type	"evaluate"	string
	VariableName	"useFrameNav"	string
	Static members		
	Non-Public members		
	Condition	"!useDependencyInjection || navigationEvaluator == 'blank'"	string
	DataType	"bool"	string
	Evaluator	{Method = {Boolean EvaluateFromString(Microsoft.Extensions.Logging.ILogger, System.String, Microsoft.TemplateEngine.Abstractions.IVariableCollection)}}	Microsoft.TemplateEngine.Orchestrator.RunnableProjects.ConditionStringEvaluator
	Macro	{Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.EvaluateMacro}	Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.EvaluateMacro

At the following stack:

   Microsoft.TemplateEngine.Core.dll!Microsoft.TemplateEngine.Core.Expressions.ScopeBuilder<Microsoft.TemplateEngine.Core.Expressions.Operators, Microsoft.TemplateEngine.Core.Expressions.Cpp2.Cpp2StyleEvaluatorDefinition.Tokens>.Build(ref int bufferLength, ref int bufferPosition, System.Action<System.Collections.Generic.IReadOnlyList<byte>> onFault, System.Collections.Generic.HashSet<string> referencedVariablesKeys)	Unknown
Microsoft.TemplateEngine.Core.dll!Microsoft.TemplateEngine.Core.Expressions.Shared.SharedEvaluatorDefinition<Microsoft.TemplateEngine.Core.Expressions.Cpp2.Cpp2StyleEvaluatorDefinition, Microsoft.TemplateEngine.Core.Expressions.Cpp2.Cpp2StyleEvaluatorDefinition.Tokens>.Evaluate(Microsoft.TemplateEngine.Core.Contracts.IProcessorState processor, ref int bufferLength, ref int currentBufferPosition, out string faultedMessage, System.Collections.Generic.HashSet<string> referencedVariablesKeys, bool shouldProcessWholeBuffer)	Unknown
Microsoft.TemplateEngine.Core.dll!Microsoft.TemplateEngine.Core.Expressions.Shared.SharedEvaluatorDefinition<Microsoft.TemplateEngine.Core.Expressions.Cpp2.Cpp2StyleEvaluatorDefinition, Microsoft.TemplateEngine.Core.Expressions.Cpp2.Cpp2StyleEvaluatorDefinition.Tokens>.EvaluateFromString(Microsoft.Extensions.Logging.ILogger logger, string text, Microsoft.TemplateEngine.Abstractions.IVariableCollection variables, out string faultedMessage, System.Collections.Generic.HashSet<string> referencedVariablesKeys)	Unknown
Microsoft.TemplateEngine.Core.dll!Microsoft.TemplateEngine.Core.Expressions.Shared.SharedEvaluatorDefinition<Microsoft.TemplateEngine.Core.Expressions.Cpp2.Cpp2StyleEvaluatorDefinition, Microsoft.TemplateEngine.Core.Expressions.Cpp2.Cpp2StyleEvaluatorDefinition.Tokens>.EvaluateFromString(Microsoft.Extensions.Logging.ILogger logger, string text, Microsoft.TemplateEngine.Abstractions.IVariableCollection variables)	Unknown
>	Microsoft.TemplateEngine.Orchestrator.RunnableProjects.dll!Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.EvaluateMacro.Evaluate(Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings environmentSettings, Microsoft.TemplateEngine.Abstractions.IVariableCollection variableCollection, Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.EvaluateMacroConfig config)	Unknown
Microsoft.TemplateEngine.Orchestrator.RunnableProjects.dll!Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.BaseMacroConfig<Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.EvaluateMacro, Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros.EvaluateMacroConfig>.Evaluate(Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings environmentSettings, Microsoft.TemplateEngine.Abstractions.IVariableCollection vars)	Unknown
	Microsoft.TemplateEngine.Orchestrator.RunnableProjects.dll!Microsoft.TemplateEngine.Orchestrator.RunnableProjects.MacroProcessor.ProcessMacros(Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings environmentSettings, Microsoft.TemplateEngine.Orchestrator.RunnableProjects.GlobalRunConfig runConfig, Microsoft.TemplateEngine.Abstractions.IVariableCollection variables)	Unknown
Microsoft.TemplateEngine.Orchestrator.RunnableProjects.dll!Microsoft.TemplateEngine.Orchestrator.RunnableProjects.RunnableProjectGenerator.Microsoft.TemplateEngine.Abstractions.IGenerator.GetCreationEffectsAsync(Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings environmentSettings, Microsoft.TemplateEngine.Abstractions.ITemplate templateData, Microsoft.TemplateEngine.Abstractions.Parameters.IParameterSetData parameters, string targetDirectory, System.Threading.CancellationToken cancellationToken)	Unknown
Microsoft.TemplateEngine.Edge.dll!Microsoft.TemplateEngine.Edge.Template.TemplateCreator.InstantiateAsync(Microsoft.TemplateEngine.Abstractions.ITemplateInfo templateInfo, string name, string fallbackName, string outputPath, Microsoft.TemplateEngine.Edge.Template.InputDataSet inputParameters, bool forceCreation, string baselineName, bool dryRun, System.Threading.CancellationToken cancellationToken)	Unknown
Microsoft.TemplateEngine.Cli.dll!Microsoft.TemplateEngine.Cli.TemplateInvoker.CreateTemplateAsync(Microsoft.TemplateEngine.Cli.Commands.TemplateCommandArgs templateArgs, System.Threading.CancellationToken cancellationToken)	Unknown
Microsoft.TemplateEngine.Cli.dll!Microsoft.TemplateEngine.Cli.TemplateInvoker.InvokeTemplateAsync(Microsoft.TemplateEngine.Cli.Commands.TemplateCommandArgs templateArgs, System.Threading.CancellationToken cancellationToken)	Unknown
Microsoft.TemplateEngine.Cli.dll!Microsoft.TemplateEngine.Cli.Commands.TemplateCommand.InvokeAsync(System.CommandLine.ParseResult parseResult, System.Threading.CancellationToken cancellationToken)	Unknown
Microsoft.TemplateEngine.Cli.dll!Microsoft.TemplateEngine.Cli.Commands.InstantiateCommand.HandleTemplateInstantationAsync(Microsoft.TemplateEngine.Cli.Commands.InstantiateCommandArgs args, Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings environmentSettings, Microsoft.TemplateEngine.Edge.Settings.TemplatePackageManager templatePackageManager, Microsoft.TemplateEngine.Cli.TemplateGroup templateGroup, System.Threading.CancellationToken cancellationToken)	Unknown
Microsoft.TemplateEngine.Cli.dll!Microsoft.TemplateEngine.Cli.Commands.InstantiateCommand.ExecuteIntAsync(Microsoft.TemplateEngine.Cli.Commands.InstantiateCommandArgs instantiateArgs, Microsoft.TemplateEngine.Abstractions.IEngineEnvironmentSettings environmentSettings, Microsoft.TemplateEngine.Edge.Settings.TemplatePackageManager templatePackageManager, System.CommandLine.Invocation.InvocationContext context)	Unknown
Microsoft.TemplateEngine.Cli.dll!Microsoft.TemplateEngine.Cli.Commands.BaseCommand<Microsoft.TemplateEngine.Cli.Commands.NewCommandArgs>.InvokeAsync(System.CommandLine.Invocation.InvocationContext context)	Unknown
Microsoft.TemplateEngine.Cli.dll!Microsoft.TemplateEngine.Cli.Commands.BaseCommand<System.__Canon>.Invoke(System.CommandLine.Invocation.InvocationContext context)	Unknown
System.CommandLine.dll!System.CommandLine.Invocation.InvocationPipeline.BuildInvocationChain.AnonymousMethod__0(System.CommandLine.Invocation.InvocationContext invocationContext, System.Func<System.CommandLine.Invocation.InvocationContext, System.Threading.Tasks.Task> _)	Unknown
@GangWang01
Copy link
Contributor

It was reproduced with 8.0.100-preview.2.23157.25. The instantiation hang there without any error/exeception from cli. .NET 7.0.203 doesn't have this issue.

With the attached simpler template Sample.zip
, it's easiser to reproduce. It hang at evaluating the expression !useDependencyInjection || navigationEvaluator == 'blank' in computed symbol useFrameNav.
I tried changed the expression to be useDependencyInjection != 'true' || navigationEvaluator == 'blank'. It could work around and the instantiation succeeded.

@jeromelaban
Copy link

Thanks for looking into this @GangWang01!

@YuliiaKovalova
Copy link
Member Author

YuliiaKovalova commented May 5, 2023

the issue is also related to #5115

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Iteration:2023June Iteration:2023May triaged The issue was evaluated by the triage team, placed on correct area, next action defined.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants