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

using Spectre.Console; makes error CS0246 #3360

Closed
2 tasks done
pitermarx opened this issue May 20, 2021 · 3 comments · Fixed by #3362
Closed
2 tasks done

using Spectre.Console; makes error CS0246 #3360

pitermarx opened this issue May 20, 2021 · 3 comments · Fixed by #3362
Assignees
Labels
Milestone

Comments

@pitermarx
Copy link
Contributor

Prerequisites

  • I have written a descriptive issue title
  • I have searched issues to ensure it has not already been reported

Cake runner

Cake .NET Tool

Cake version

1.1.0

Operating system

Windows

Operating system architecture

64-Bit

CI Server

No

What are you seeing?

by having the using I get this error

error CS0246: The type or namespace name 'Spectre' could not be found (are you missing a using directive or an assembly reference?)

What is expected?

From the docs
https://cakebuild.net/docs/writing-builds/console-output#advanced-output
I was expecting that the namespace would be available for referencing

Steps to Reproduce

Sample repo here
https://github.com/pitermarx/cake_spectre_bug/

Output log

Looking for modules...
No modules found to install.
Module directory does not exist.
Analyzing build script...
Analyzing C:/github/cake_spectre_bug/build.cake...
Processing build script...
Adding assembly reference to System.Private.CoreLib.dll...
Adding assembly reference to System.Linq.Expressions.dll...
Adding assembly reference to Microsoft.CSharp.dll...
Adding assembly reference to Cake.Core.dll...
Adding assembly reference to Cake.Common.dll...
Adding assembly reference to System.Runtime.dll...
Adding assembly reference to System.Collections.dll...
Adding assembly reference to System.Linq.dll...
Adding assembly reference to System.Console.dll...
Adding assembly reference to System.Text.RegularExpressions.dll...
Adding assembly reference to System.Security.Cryptography.Algorithms.dll...
Adding assembly reference to System.Diagnostics.Process.dll...
Adding assembly reference to System.IO.FileSystem.dll...
Adding assembly reference to System.Collections.Concurrent.dll...
Adding assembly reference to Microsoft.Win32.Registry.dll...
Adding assembly reference to System.Threading.dll...
Adding assembly reference to System.Security.Cryptography.Primitives.dll...
Adding assembly reference to System.Runtime.InteropServices.RuntimeInformation.dll...
Adding assembly reference to System.ComponentModel.Primitives.dll...
Adding assembly reference to System.Runtime.InteropServices.dll...
Adding assembly reference to System.Threading.Thread.dll...
Adding assembly reference to System.Xml.ReaderWriter.dll...
Adding assembly reference to System.Xml.XDocument.dll...
Adding assembly reference to System.Runtime.Serialization.Primitives.dll...
Adding assembly reference to System.Runtime.Serialization.Json.dll...
Adding assembly reference to System.Net.Http.dll...
Adding assembly reference to System.IO.Compression.dll...
Adding assembly reference to System.ComponentModel.TypeConverter.dll...
Adding assembly reference to System.Text.Encoding.Extensions.dll...
Adding assembly reference to System.Runtime.Serialization.Xml.dll...
Adding assembly reference to System.Net.Primitives.dll...
Adding assembly reference to System.IO.Compression.ZipFile.dll...
Adding assembly reference to System.Xml.XPath.XDocument.dll...
Importing namespace Cake.Common...
Importing namespace Cake.Common.Build...
Importing namespace Cake.Common.Build.AppVeyor...
Importing namespace Cake.Common.Build.AppVeyor.Data...
Importing namespace Cake.Common.Build.AzurePipelines...
Importing namespace Cake.Common.Build.AzurePipelines.Data...
Importing namespace Cake.Common.Build.Bamboo...
Importing namespace Cake.Common.Build.Bamboo.Data...
Importing namespace Cake.Common.Build.BitbucketPipelines...
Importing namespace Cake.Common.Build.BitbucketPipelines.Data...
Importing namespace Cake.Common.Build.Bitrise...
Importing namespace Cake.Common.Build.Bitrise.Data...
Importing namespace Cake.Common.Build.ContinuaCI...
Importing namespace Cake.Common.Build.ContinuaCI.Data...
Importing namespace Cake.Common.Build.GitHubActions...
Importing namespace Cake.Common.Build.GitHubActions.Data...
Importing namespace Cake.Common.Build.GitLabCI...
Importing namespace Cake.Common.Build.GitLabCI.Data...
Importing namespace Cake.Common.Build.GoCD...
Importing namespace Cake.Common.Build.GoCD.Data...
Importing namespace Cake.Common.Build.Jenkins...
Importing namespace Cake.Common.Build.Jenkins.Data...
Importing namespace Cake.Common.Build.MyGet...
Importing namespace Cake.Common.Build.TeamCity...
Importing namespace Cake.Common.Build.TravisCI...
Importing namespace Cake.Common.Build.TravisCI.Data...
Importing namespace Cake.Common.Diagnostics...
Importing namespace Cake.Common.IO...
Importing namespace Cake.Common.IO.Paths...
Importing namespace Cake.Common.Net...
Importing namespace Cake.Common.Security...
Importing namespace Cake.Common.Solution...
Importing namespace Cake.Common.Solution.Project...
Importing namespace Cake.Common.Solution.Project.Properties...
Importing namespace Cake.Common.Solution.Project.XmlDoc...
Importing namespace Cake.Common.Text...
Importing namespace Cake.Common.Tools.Cake...
Importing namespace Cake.Common.Tools.Chocolatey...
Importing namespace Cake.Common.Tools.Chocolatey.ApiKey...
Importing namespace Cake.Common.Tools.Chocolatey.Config...
Importing namespace Cake.Common.Tools.Chocolatey.Download...
Importing namespace Cake.Common.Tools.Chocolatey.Features...
Importing namespace Cake.Common.Tools.Chocolatey.Install...
Importing namespace Cake.Common.Tools.Chocolatey.New...
Importing namespace Cake.Common.Tools.Chocolatey.Pack...
Importing namespace Cake.Common.Tools.Chocolatey.Pin...
Importing namespace Cake.Common.Tools.Chocolatey.Push...
Importing namespace Cake.Common.Tools.Chocolatey.Sources...
Importing namespace Cake.Common.Tools.Chocolatey.Uninstall...
Importing namespace Cake.Common.Tools.Chocolatey.Upgrade...
Importing namespace Cake.Common.Tools.DotCover...
Importing namespace Cake.Common.Tools.DotCover.Analyse...
Importing namespace Cake.Common.Tools.DotCover.Cover...
Importing namespace Cake.Common.Tools.DotCover.Merge...
Importing namespace Cake.Common.Tools.DotCover.Report...
Importing namespace Cake.Common.Tools.DotNetCore...
Importing namespace Cake.Common.Tools.DotNetCore.Build...
Importing namespace Cake.Common.Tools.DotNetCore.BuildServer...
Importing namespace Cake.Common.Tools.DotNetCore.Clean...
Importing namespace Cake.Common.Tools.DotNetCore.Execute...
Importing namespace Cake.Common.Tools.DotNetCore.MSBuild...
Importing namespace Cake.Common.Tools.DotNetCore.NuGet.Delete...
Importing namespace Cake.Common.Tools.DotNetCore.NuGet.Push...
Importing namespace Cake.Common.Tools.DotNetCore.NuGet.Source...
Importing namespace Cake.Common.Tools.DotNetCore.Pack...
Importing namespace Cake.Common.Tools.DotNetCore.Publish...
Importing namespace Cake.Common.Tools.DotNetCore.Restore...
Importing namespace Cake.Common.Tools.DotNetCore.Run...
Importing namespace Cake.Common.Tools.DotNetCore.Test...
Importing namespace Cake.Common.Tools.DotNetCore.Tool...
Importing namespace Cake.Common.Tools.DotNetCore.VSTest...
Importing namespace Cake.Common.Tools.DupFinder...
Importing namespace Cake.Common.Tools.Fixie...
Importing namespace Cake.Common.Tools.GitLink...
Importing namespace Cake.Common.Tools.GitReleaseManager...
Importing namespace Cake.Common.Tools.GitReleaseManager.AddAssets...
Importing namespace Cake.Common.Tools.GitReleaseManager.Close...
Importing namespace Cake.Common.Tools.GitReleaseManager.Create...
Importing namespace Cake.Common.Tools.GitReleaseManager.Discard...
Importing namespace Cake.Common.Tools.GitReleaseManager.Export...
Importing namespace Cake.Common.Tools.GitReleaseManager.Label...
Importing namespace Cake.Common.Tools.GitReleaseManager.Open...
Importing namespace Cake.Common.Tools.GitReleaseManager.Publish...
Importing namespace Cake.Common.Tools.GitReleaseNotes...
Importing namespace Cake.Common.Tools.GitVersion...
Importing namespace Cake.Common.Tools.ILMerge...
Importing namespace Cake.Common.Tools.ILRepack...
Importing namespace Cake.Common.Tools.InnoSetup...
Importing namespace Cake.Common.Tools.InspectCode...
Importing namespace Cake.Common.Tools.MSBuild...
Importing namespace Cake.Common.Tools.MSpec...
Importing namespace Cake.Common.Tools.MSTest...
Importing namespace Cake.Common.Tools.NSIS...
Importing namespace Cake.Common.Tools.NuGet...
Importing namespace Cake.Common.Tools.NuGet.Add...
Importing namespace Cake.Common.Tools.NuGet.Delete...
Importing namespace Cake.Common.Tools.NuGet.Init...
Importing namespace Cake.Common.Tools.NuGet.Install...
Importing namespace Cake.Common.Tools.NuGet.List...
Importing namespace Cake.Common.Tools.NuGet.Pack...
Importing namespace Cake.Common.Tools.NuGet.Push...
Importing namespace Cake.Common.Tools.NuGet.Restore...
Importing namespace Cake.Common.Tools.NuGet.SetApiKey...
Importing namespace Cake.Common.Tools.NuGet.SetProxy...
Importing namespace Cake.Common.Tools.NuGet.Sources...
Importing namespace Cake.Common.Tools.NuGet.Update...
Importing namespace Cake.Common.Tools.NUnit...
Importing namespace Cake.Common.Tools.OctopusDeploy...
Importing namespace Cake.Common.Tools.OpenCover...
Importing namespace Cake.Common.Tools.ReportGenerator...
Importing namespace Cake.Common.Tools.ReportUnit...
Importing namespace Cake.Common.Tools.Roundhouse...
Importing namespace Cake.Common.Tools.SignTool...
Importing namespace Cake.Common.Tools.SpecFlow...
Importing namespace Cake.Common.Tools.SpecFlow.StepDefinitionReport...
Importing namespace Cake.Common.Tools.SpecFlow.TestExecutionReport...
Importing namespace Cake.Common.Tools.TextTransform...
Importing namespace Cake.Common.Tools.VSTest...
Importing namespace Cake.Common.Tools.VSWhere...
Importing namespace Cake.Common.Tools.VSWhere.All...
Importing namespace Cake.Common.Tools.VSWhere.Latest...
Importing namespace Cake.Common.Tools.VSWhere.Legacy...
Importing namespace Cake.Common.Tools.VSWhere.Product...
Importing namespace Cake.Common.Tools.WiX...
Importing namespace Cake.Common.Tools.WiX.Heat...
Importing namespace Cake.Common.Tools.XBuild...
Importing namespace Cake.Common.Tools.XUnit...
Importing namespace Cake.Common.Xml...
Importing namespace Cake.Core...
Importing namespace Cake.Core.Diagnostics...
Importing namespace Cake.Core.IO...
Importing namespace Cake.Core.Scripting...
Importing namespace Spectre.Console...
Importing namespace System...
Importing namespace System.Collections.Generic...
Importing namespace System.IO...
Importing namespace System.Linq...
Importing namespace System.Text...
Importing namespace System.Threading.Tasks...
Compiling build script...
error CS0246: The type or namespace name 'Spectre' could not be found (are you missing a using directive or an assembly reference?)
C:/github/cake_spectre_bug/build.cake(3,13): error CS0103: The name 'AnsiConsole' does not exist in the current context
C:/github/cake_spectre_bug/build.cake(4,9): error CS0246: The type or namespace name 'TextPrompt<>' could not be found (are you missing a using directive or an assembly reference?)
C:/github/cake_spectre_bug/build.cake(10,1): error CS0103: The name 'AnsiConsole' does not exist in the current context
Error: Cake.Core.CakeException: Error(s) occurred when compiling build script:
error CS0246: The type or namespace name 'Spectre' could not be found (are you missing a using directive or an assembly reference?)
C:/github/cake_spectre_bug/build.cake(3,13): error CS0103: The name 'AnsiConsole' does not exist in the current context
C:/github/cake_spectre_bug/build.cake(4,9): error CS0246: The type or namespace name 'TextPrompt<>' could not be found (are you missing a using directive or an assembly reference?)
C:/github/cake_spectre_bug/build.cake(10,1): error CS0103: The name 'AnsiConsole' does not exist in the current context
at Cake.Infrastructure.Scripting.RoslynScriptSession.Execute(Script script) in C:\projects\cake\src\Cake\Infrastructure\Scripting\RoslynScriptSession.cs:line 139
at Cake.Core.Scripting.ScriptRunner.Run(IScriptHost host, FilePath scriptPath) in C:\projects\cake\src\Cake.Core\Scripting\ScriptRunner.cs:line 172
at Cake.Features.Building.BuildFeature.RunCore(IRemainingArguments arguments, BuildFeatureSettings settings) in C:\projects\cake\src\Cake\Features\Building\BuildFeature.cs:line 99
at Cake.Features.Building.BuildFeature.Run(IRemainingArguments arguments, BuildFeatureSettings settings) in C:\projects\cake\src\Cake\Features\Building\BuildFeature.cs:line 49
at Cake.Commands.DefaultCommand.Execute(CommandContext context, DefaultCommandSettings settings) in C:\projects\cake\src\Cake\Commands\DefaultCommand.cs:line 72

@augustoproiete
Copy link
Member

augustoproiete commented May 20, 2021

Interesting find. Thanks for reporting @pitermarx. It seems for some reason the Spectre.Console assembly is not being referenced in the compiled C# code. Perhaps it's because we use Spectre.Console via DI and there might not be any direct reference to the assembly (needs investigation).

A possible workaround for now is to force the assembly load by loading Spectre.Console as an addin. e.g.

#addin "nuget:?package=Spectre.Console&version=0.36.0"

using Spectre.Console;

var fruit = AnsiConsole.Prompt(
    new TextPrompt<string>("What's your [green]favorite fruit[/]?")
        .InvalidChoiceMessage("[red]That's not a valid fruit[/]")
        .DefaultValue("Orange")
        .AddChoice("Apple")
        .AddChoice("Banana")
        .AddChoice("Orange"));
AnsiConsole.WriteLine($"I agree. {fruit} is tasty!");

N.B.: The version of Spectre.Console should match the version that is used by the Cake runner you're using. For Cake v1.1.0 it's Spectre.Console 0.36.0, for the next release of Cake (v1.2.0) it will likely be 0.38.0 based on what's in develop right now.

@devlead
Copy link
Member

devlead commented May 20, 2021

As it ships with Cake it's this will work too

#r "Spectre.Console"
using Spectre.Console

AnsiConsole.Render(
    new FigletText("Hello")
        .LeftAligned()
        .Color(Color.Red));
  _   _          _   _
 | | | |   ___  | | | |   ___
 | |_| |  / _ \ | | | |  / _ \
 |  _  | |  __/ | | | | | (_) |
 |_| |_|  \___| |_| |_|  \___/

@cake-build-bot
Copy link

🎉 This issue has been resolved in version v1.2.0 🎉

The release is available on:

Your GitReleaseManager bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants