Cake: 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.

Created on 17 Nov 2016  路  6Comments  路  Source: cake-build/cake

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()
Help wanted Improvement Up-for-grabs

Most helpful comment

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

All 6 comments

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

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! :-)

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.

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

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!

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

Was this page helpful?
0 / 5 - 0 ratings

Related issues

augustoproiete picture augustoproiete  路  5Comments

coxp picture coxp  路  5Comments

islopma picture islopma  路  3Comments

gitfool picture gitfool  路  4Comments

pvwichen picture pvwichen  路  3Comments