cake-build / cake

:cake: Cake (C# Make) is a cross platform build automation system.
https://cakebuild.net
MIT License
3.87k stars 728 forks source link

A comment precisely constructed with a hyperlink immediately after the // on the same line as your #addin preprocessor directive when just using the Package Name causes nuget to fail to find the package. #1367

Open klabranche opened 7 years ago

klabranche commented 7 years ago

What You Are Seeing?

When I construct my addin directive with a comment that is a hyperlink and it immediately follows the // and is on the same line as the #addin and uses the package name only like below:

#addin "Cake.WebDeploy" //https://github.com/SharpeRAD/Cake.WebDeploy

Produces the following command line messages:

Installing addins....
Unable to find package 'Cake.WebDeploy'
Nuget exited with 1
Could not find any assemblies compatible with .NETFramework,Version=v4.5

If the comment is not a hyperlink OR does not immediately start as a hyperlink in the comment, it works.

#addin "Cake.WebDeploy" // https://github.com/SharpeRAD/Cake.WebDeploy => works, noting a space immediately following the //
#addin "Cake.WebDeploy" //see https://github.com/SharpeRAD/Cake.WebDeploy => works
#addin "Cake.WebDeploy" //allows for web deploy client installation usage => works

Move the comment above the #addin directive, works.

//https://github.com/SharpeRAD/Cake.WebDeploy
#addin "Cake.WebDeploy"

If I use the longer version of the directive that gives the package URI with the comment on the same line it works.

#addin nuget:?package=Cake.WebDeploy&version=0.1.9 //https://github.com/SharpeRAD/Cake.WebDeploy

What version of Cake are you using?

0.17.0

Are you running on a 32 or 64 bit system?

64 bit

What environment are you running on? Windows? Linux? Mac?

Windows 7

Are you running on a CI Server? If so, which one?

Not yet. :-)

How Did You Get This To Happen? (Steps to Reproduce)

using a build.cake constructed like:

#addin Cake.WebDeploy //https:github.com/SharpeRAD/Cake.WebDeploy repo has usage samples
//////////////////////////////////////////////////////////////////////
// ARGUMENTS
//////////////////////////////////////////////////////////////////////

var target = Argument("target", "Default");
var configuration = Argument("configuration", "Debug");

with just build task that runs MSBUILD and executed as .\build.ps1 -t build

Output Log

Using the diagnostic logging level produces:

Installing addins...
Creating directory C:/Projects/TestProject/tools/Addins
Installing NuGet package Cake.WebDeploy...
Executing: "C:/Projects/TestProject/tools/nuget.exe" install "Cake.WebDeploy" -OutputDirectory "C:/Projects/TestProject/tools/Addins" -Source "file://github.com/SharpeRAD/Cake.WebDeploy/" -ExcludeVersion -NonInteractive -NoCache
NuGet exited with 1
Feeds used:
  file://github.com/SharpeRAD/Cake.WebDeploy/

Output:

Feeds used:
  file://github.com/SharpeRAD/Cake.WebDeploy/

Could not find any assemblies compatible with .NETFramework,Version=v4.5.

With the diagnostic level turned on the command line also produces:

Preparing to run build script...
Running build script...
Unable to find package 'Cake.WebDeploy'
Error: Cake.Core.CakeException: Failed to install addin 'Cake.WebDeploy'.
   at Cake.Core.Scripting.ScriptProcessor.InstallAddins(ScriptAnalyzerResult ana
lyzerResult, DirectoryPath installPath)
   at Cake.Core.Scripting.ScriptRunner.Run(IScriptHost host, FilePath scriptPath
, IDictionary`2 arguments)
   at Cake.Commands.BuildCommand.Execute(CakeOptions options)
   at Cake.CakeApplication.Run(CakeOptions options)
   at Cake.Program.Main()
patriksvensson commented 7 years ago

Yes, this is by design. A preprocessor directive in Cake should be on it's own line.

klabranche commented 7 years ago

understand that it is an easy thing to fix but I was really thrown when one worked with a comment and another did not until I realized it was the construction of the comment as described was causing the failure. Simple enough to avoid but I was thrown for quite a bit. Perhaps a note should be mentioned somewhere in the docs for this?

And thank you for your awesome work on Cake! :-)

patriksvensson commented 7 years ago

Correction, the particular error(s) you're seeing is not by default, but preprocessors are processed before sent to Roslyn/Mono compiler so they know nothing of C#. So it's by design in the way that you shouldn't put anything else on a preprocessor directive line.

klabranche commented 7 years ago

just hoping to save someone else from hitting this and like me taking too long to figure out what is wrong... :-)

patriksvensson commented 7 years ago

Thank you! Didn't see your previous comment until now (answered on my phone) :smile:

We could definitely make the preprocessor parsers more strict which would remove any future confusion. Let's keep the issue open so we don't forget it.

Thanks!

klabranche commented 7 years ago

Y'all are awesome! Keep up the great work!