From 4e31de3cd22135070dfc98b5ceb5a7c0e3216bf5 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 14 Dec 2018 13:44:26 +0100 Subject: [PATCH 1/3] (maint) Update readme and nuget feeds --- README.md | 16 +++++++--------- build/Build.csproj | 2 +- build/Tasks/Restore.cs | 6 +----- build/nuget.config | 6 ------ template/Cake.Frosting.Template.nuspec | 1 - template/NuGet.Config | 6 ------ 6 files changed, 9 insertions(+), 28 deletions(-) delete mode 100644 build/nuget.config delete mode 100644 template/NuGet.Config diff --git a/README.md b/README.md index 366c568..bc84514 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,11 @@ [![AppVeyor branch](https://img.shields.io/appveyor/ci/cakebuild/frosting/develop.svg)](https://ci.appveyor.com/project/cakebuild/frosting/branch/develop) [![MyGet](https://img.shields.io/myget/cake/vpre/Cake.Frosting.svg?label=myget)](https://www.myget.org/feed/cake/package/nuget/Cake.Frosting) +[![NuGet](https://img.shields.io/nuget/v/Cake.Frosting.svg)](https://www.nuget.org/packages/Cake.Frosting) A .NET Core host for Cake, that allows you to write your build scripts as a -(portable) console application (`netcoreapp1.1` or `net461`). Frosting is currently -in alpha, but more information, documentation and samples will be added soon. +(portable) console application (`netcoreapp2.0` or `net461`). Frosting is currently +in pre-release / incubation. **Expect things to move around initially. Especially naming of things.** @@ -20,17 +21,14 @@ in alpha, but more information, documentation and samples will be added soon. ## Example -### 1. Install .NET Core SDK 1.0.4 or later +### 1. Install .NET Core SDK 2.1.500 or later -You can find the SDK at [https://www.microsoft.com/net/download/core](https://www.microsoft.com/net/download/core). +You can find the SDK at [https://dotnet.microsoft.com/download](https://dotnet.microsoft.com/download). ### 2. Install the template -Cake.Frosting is currently in preview, so you will have to specify the -template version explicitly. - ``` -> dotnet new --install Cake.Frosting.Template::0.1.0-* +> dotnet new --install Cake.Frosting.Template ``` ### 3. Create a new Frosting project @@ -58,7 +56,7 @@ The above command is what you're expected to run from your bootstrapper. ### .NET Core SDK To build from source, you will need to have -[.NET Core SDK 1.0.4](https://www.microsoft.com/net/download/core) +[.NET Core SDK 2.1.4](https://dotnet.microsoft.com/download) installed on your machine. ### Visual Studio 2017 (optional) diff --git a/build/Build.csproj b/build/Build.csproj index fb97f98..bb24d3f 100644 --- a/build/Build.csproj +++ b/build/Build.csproj @@ -6,7 +6,7 @@ - + diff --git a/build/Tasks/Restore.cs b/build/Tasks/Restore.cs index 4b9ce94..45083e0 100644 --- a/build/Tasks/Restore.cs +++ b/build/Tasks/Restore.cs @@ -9,11 +9,7 @@ public override void Run(Context context) { context.DotNetCoreRestore("./src", new DotNetCoreRestoreSettings { - MSBuildSettings = context.MSBuildSettings, - Sources = new [] { - "https://api.nuget.org/v3/index.json", - "https://www.myget.org/F/cake/api/v3/index.json" - } + MSBuildSettings = context.MSBuildSettings }); } } \ No newline at end of file diff --git a/build/nuget.config b/build/nuget.config deleted file mode 100644 index 09f2371..0000000 --- a/build/nuget.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/template/Cake.Frosting.Template.nuspec b/template/Cake.Frosting.Template.nuspec index fa5ab56..ce1c2f4 100644 --- a/template/Cake.Frosting.Template.nuspec +++ b/template/Cake.Frosting.Template.nuspec @@ -19,7 +19,6 @@ - diff --git a/template/NuGet.Config b/template/NuGet.Config deleted file mode 100644 index 09f2371..0000000 --- a/template/NuGet.Config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From d76fc13547ab3d65b85dd87696b74a89a34fced9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Derriey?= Date: Mon, 16 Oct 2017 20:47:18 +1100 Subject: [PATCH 2/3] Add support for asynchronous tasks Closes #45. --- src/Cake.Frosting.Example/Tasks.cs | 10 +- .../Data/Tasks/OnErrorRunAsyncFailedTask.cs | 25 +++++ src/Cake.Frosting.Tests/Unit/CakeHostTests.cs | 15 +++ .../Abstractions/IFrostingTask.cs | 3 +- src/Cake.Frosting/AsyncFrostingTask.cs | 100 ++++++++++++++++++ src/Cake.Frosting/CakeHost.cs | 2 +- src/Cake.Frosting/FrostingTask.cs | 4 +- .../Internal/Commands/Command.cs | 3 +- .../Internal/Commands/DryRunCommand.cs | 7 +- .../Commands/DryRunExecutionStrategy.cs | 1 + .../Commands/ErrorDecoratorCommand.cs | 5 +- .../Internal/Commands/HelpCommand.cs | 5 +- .../Internal/Commands/RunCommand.cs | 5 +- .../Internal/Commands/VersionCommand.cs | 5 +- .../Internal/EngineInitializer.cs | 2 +- .../Extensions/FrostingTaskExtensions.cs | 48 ++++++++- 16 files changed, 221 insertions(+), 19 deletions(-) create mode 100644 src/Cake.Frosting.Tests/Data/Tasks/OnErrorRunAsyncFailedTask.cs create mode 100644 src/Cake.Frosting/AsyncFrostingTask.cs diff --git a/src/Cake.Frosting.Example/Tasks.cs b/src/Cake.Frosting.Example/Tasks.cs index 093ef79..8e3f75a 100644 --- a/src/Cake.Frosting.Example/Tasks.cs +++ b/src/Cake.Frosting.Example/Tasks.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Threading.Tasks; using Cake.Core; using Cake.Core.Diagnostics; @@ -12,8 +13,15 @@ public sealed class Hello : FrostingTask } [Dependency(typeof(Hello))] - public sealed class World : FrostingTask + public sealed class World : AsyncFrostingTask { + // Tasks can be asynchronous + public override async Task RunAsync(Settings context) + { + context.Log.Information("About to do something expensive"); + await Task.Delay(1500); + context.Log.Information("Done"); + } } [Dependency(typeof(World))] diff --git a/src/Cake.Frosting.Tests/Data/Tasks/OnErrorRunAsyncFailedTask.cs b/src/Cake.Frosting.Tests/Data/Tasks/OnErrorRunAsyncFailedTask.cs new file mode 100644 index 0000000..dbc804f --- /dev/null +++ b/src/Cake.Frosting.Tests/Data/Tasks/OnErrorRunAsyncFailedTask.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Threading.Tasks; +using Cake.Core; +using Cake.Core.Diagnostics; + +namespace Cake.Frosting.Tests.Data.Tasks +{ + [TaskName("On-Error-RunAsync-Failed")] + public sealed class OnErrorRunAsyncFailedTask : AsyncFrostingTask + { + public override Task RunAsync(ICakeContext context) + { + throw new InvalidOperationException("On test exception"); + } + + public override void OnError(Exception exception, ICakeContext context) + { + context.Log.Error("An error has occurred. {0}", exception.Message); + } + } +} \ No newline at end of file diff --git a/src/Cake.Frosting.Tests/Unit/CakeHostTests.cs b/src/Cake.Frosting.Tests/Unit/CakeHostTests.cs index 1bd1713..1b92202 100644 --- a/src/Cake.Frosting.Tests/Unit/CakeHostTests.cs +++ b/src/Cake.Frosting.Tests/Unit/CakeHostTests.cs @@ -345,6 +345,21 @@ public void Should_Execute_OnError_Method_If_Run_Failed() fixture.Log.Received(1).Error("An error has occurred. {0}", "On test exception"); } + [Fact] + public void Should_Execute_OnError_Method_If_RunAsync_Failed() + { + // Given + var fixture = new CakeHostBuilderFixture(); + fixture.RegisterTask(); + fixture.Options.Target = "On-Error-RunAsync-Failed"; + + // When + fixture.Run(); + + // Then + fixture.Log.Received(1).Error("An error has occurred. {0}", "On test exception"); + } + [Fact] public void Should_Not_Execute_OnError_Method_If_Run_Completed() { diff --git a/src/Cake.Frosting/Abstractions/IFrostingTask.cs b/src/Cake.Frosting/Abstractions/IFrostingTask.cs index caae55c..2c862ef 100644 --- a/src/Cake.Frosting/Abstractions/IFrostingTask.cs +++ b/src/Cake.Frosting/Abstractions/IFrostingTask.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using System.Threading.Tasks; using Cake.Core; // ReSharper disable once CheckNamespace @@ -17,7 +18,7 @@ public interface IFrostingTask /// Runs the task using the specified context. /// /// The context. - void Run(ICakeContext context); + Task RunAsync(ICakeContext context); /// /// Gets whether or not the task should be run. diff --git a/src/Cake.Frosting/AsyncFrostingTask.cs b/src/Cake.Frosting/AsyncFrostingTask.cs new file mode 100644 index 0000000..35fa70c --- /dev/null +++ b/src/Cake.Frosting/AsyncFrostingTask.cs @@ -0,0 +1,100 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Diagnostics.CodeAnalysis; +using System.Threading.Tasks; +using Cake.Core; +using Cake.Frosting.Internal; + +namespace Cake.Frosting +{ + /// + /// Base class for an asynchronous Frosting task using the standard context. + /// + /// + public abstract class AsyncFrostingTask : AsyncFrostingTask + { + } + + /// + /// Base class for an asynchronous Frosting task using a custom context. + /// + /// The context type. + /// + public abstract class AsyncFrostingTask : IFrostingTask + where T : ICakeContext + { + /// + /// Runs the task using the specified context. + /// + /// The context. + public virtual Task RunAsync(T context) + { + return Task.CompletedTask; + } + + /// + /// Gets whether or not the task should be run. + /// + /// The context. + /// + /// true if the task should run; otherwise false. + /// + public virtual bool ShouldRun(T context) + { + return true; + } + + /// + /// The error handler to be executed using the specified context if an exception occurs in the task. + /// + /// The exception. + /// The context. + public virtual void OnError(Exception exception, T context) + { + } + + /// + /// The finally handler to be executed using the specified context after the task has finished executing. + /// + /// The context. + public virtual void Finally(T context) + { + } + + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Explicit implementation.")] + Task IFrostingTask.RunAsync(ICakeContext context) + { + Guard.ArgumentNotNull(context, nameof(context)); + + return RunAsync((T)context); + } + + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Explicit implementation.")] + bool IFrostingTask.ShouldRun(ICakeContext context) + { + Guard.ArgumentNotNull(context, nameof(context)); + + return ShouldRun((T)context); + } + + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Explicit implementation.")] + void IFrostingTask.OnError(Exception exception, ICakeContext context) + { + Guard.ArgumentNotNull(exception, nameof(exception)); + Guard.ArgumentNotNull(context, nameof(context)); + + OnError(exception, (T)context); + } + + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Explicit implementation.")] + void IFrostingTask.Finally(ICakeContext context) + { + Guard.ArgumentNotNull(context, nameof(context)); + + Finally((T)context); + } + } +} \ No newline at end of file diff --git a/src/Cake.Frosting/CakeHost.cs b/src/Cake.Frosting/CakeHost.cs index 4eff953..72ee2c9 100644 --- a/src/Cake.Frosting/CakeHost.cs +++ b/src/Cake.Frosting/CakeHost.cs @@ -98,7 +98,7 @@ public int Run() // Get the command and execute. var command = _commandFactory.GetCommand(_options); - var result = command.Execute(_engine, _options); + var result = command.ExecuteAsync(_engine, _options).GetAwaiter().GetResult(); // Return success. return result ? 0 : 1; diff --git a/src/Cake.Frosting/FrostingTask.cs b/src/Cake.Frosting/FrostingTask.cs index e4738d9..69b8e08 100644 --- a/src/Cake.Frosting/FrostingTask.cs +++ b/src/Cake.Frosting/FrostingTask.cs @@ -4,6 +4,7 @@ using System; using System.Diagnostics.CodeAnalysis; +using System.Threading.Tasks; using Cake.Core; using Cake.Frosting.Internal; @@ -63,11 +64,12 @@ public virtual void Finally(T context) } [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Explicit implementation.")] - void IFrostingTask.Run(ICakeContext context) + Task IFrostingTask.RunAsync(ICakeContext context) { Guard.ArgumentNotNull(context, nameof(context)); Run((T)context); + return Task.CompletedTask; } [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Explicit implementation.")] diff --git a/src/Cake.Frosting/Internal/Commands/Command.cs b/src/Cake.Frosting/Internal/Commands/Command.cs index 0ff1948..a674607 100644 --- a/src/Cake.Frosting/Internal/Commands/Command.cs +++ b/src/Cake.Frosting/Internal/Commands/Command.cs @@ -2,12 +2,13 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Threading.Tasks; using Cake.Core; namespace Cake.Frosting.Internal.Commands { internal abstract class Command { - public abstract bool Execute(ICakeEngine engine, CakeHostOptions options); + public abstract Task ExecuteAsync(ICakeEngine engine, CakeHostOptions options); } } diff --git a/src/Cake.Frosting/Internal/Commands/DryRunCommand.cs b/src/Cake.Frosting/Internal/Commands/DryRunCommand.cs index 49c50ce..5da5a17 100644 --- a/src/Cake.Frosting/Internal/Commands/DryRunCommand.cs +++ b/src/Cake.Frosting/Internal/Commands/DryRunCommand.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Threading.Tasks; using Cake.Core; using Cake.Core.Diagnostics; @@ -20,16 +21,16 @@ public DryRunCommand(IFrostingContext context, ICakeLog log) _executionSettings = new ExecutionSettings(); } - public override bool Execute(ICakeEngine engine, CakeHostOptions options) + public override async Task ExecuteAsync(ICakeEngine engine, CakeHostOptions options) { _executionSettings.SetTarget(options.Target); - + _log.Information("Performing dry run..."); _log.Information("Target is: {0}", options.Target); _log.Information(string.Empty); var strategy = new DryRunExecutionStrategy(_log); - engine.RunTargetAsync(_context, strategy, _executionSettings).GetAwaiter().GetResult(); + await engine.RunTargetAsync(_context, strategy, _executionSettings).ConfigureAwait(false); _log.Information(string.Empty); _log.Information("This was a dry run."); diff --git a/src/Cake.Frosting/Internal/Commands/DryRunExecutionStrategy.cs b/src/Cake.Frosting/Internal/Commands/DryRunExecutionStrategy.cs index 572ae23..b70e9fa 100644 --- a/src/Cake.Frosting/Internal/Commands/DryRunExecutionStrategy.cs +++ b/src/Cake.Frosting/Internal/Commands/DryRunExecutionStrategy.cs @@ -35,6 +35,7 @@ public Task ExecuteAsync(CakeTask task, ICakeContext context) _log.Information("{0}. {1}", _counter, task.Name); _counter++; } + return Task.CompletedTask; } diff --git a/src/Cake.Frosting/Internal/Commands/ErrorDecoratorCommand.cs b/src/Cake.Frosting/Internal/Commands/ErrorDecoratorCommand.cs index 9bf74e8..9314f35 100644 --- a/src/Cake.Frosting/Internal/Commands/ErrorDecoratorCommand.cs +++ b/src/Cake.Frosting/Internal/Commands/ErrorDecoratorCommand.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Threading.Tasks; using Cake.Core; namespace Cake.Frosting.Internal.Commands @@ -15,9 +16,9 @@ public ErrorDecoratorCommand(Command command) _command = command; } - public override bool Execute(ICakeEngine engine, CakeHostOptions options) + public override async Task ExecuteAsync(ICakeEngine engine, CakeHostOptions options) { - _command.Execute(engine, options); + await _command.ExecuteAsync(engine, options).ConfigureAwait(false); return false; } } diff --git a/src/Cake.Frosting/Internal/Commands/HelpCommand.cs b/src/Cake.Frosting/Internal/Commands/HelpCommand.cs index 77a53cb..a57e34b 100644 --- a/src/Cake.Frosting/Internal/Commands/HelpCommand.cs +++ b/src/Cake.Frosting/Internal/Commands/HelpCommand.cs @@ -4,6 +4,7 @@ using System; using System.Reflection; +using System.Threading.Tasks; using Cake.Core; namespace Cake.Frosting.Internal.Commands @@ -17,7 +18,7 @@ public HelpCommand(IConsole console) _console = console; } - public override bool Execute(ICakeEngine engine, CakeHostOptions options) + public override Task ExecuteAsync(ICakeEngine engine, CakeHostOptions options) { _console.Write("Cake.Frosting ("); _console.ForegroundColor = ConsoleColor.Yellow; @@ -37,7 +38,7 @@ public override bool Execute(ICakeEngine engine, CakeHostOptions options) _console.WriteLine(" --help|-h Show help"); _console.WriteLine(); - return true; + return Task.FromResult(true); } } } diff --git a/src/Cake.Frosting/Internal/Commands/RunCommand.cs b/src/Cake.Frosting/Internal/Commands/RunCommand.cs index 1f7ace8..cca7331 100644 --- a/src/Cake.Frosting/Internal/Commands/RunCommand.cs +++ b/src/Cake.Frosting/Internal/Commands/RunCommand.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Threading.Tasks; using Cake.Core; namespace Cake.Frosting.Internal.Commands @@ -25,10 +26,10 @@ ICakeReportPrinter printer _executionSettings = new ExecutionSettings(); } - public override bool Execute(ICakeEngine engine, CakeHostOptions options) + public override async Task ExecuteAsync(ICakeEngine engine, CakeHostOptions options) { _executionSettings.SetTarget(options.Target); - var report = engine.RunTargetAsync(_context, _strategy, _executionSettings).GetAwaiter().GetResult(); + var report = await engine.RunTargetAsync(_context, _strategy, _executionSettings).ConfigureAwait(false); if (report != null && !report.IsEmpty) { _printer.Write(report); diff --git a/src/Cake.Frosting/Internal/Commands/VersionCommand.cs b/src/Cake.Frosting/Internal/Commands/VersionCommand.cs index f5636af..a511d1e 100644 --- a/src/Cake.Frosting/Internal/Commands/VersionCommand.cs +++ b/src/Cake.Frosting/Internal/Commands/VersionCommand.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System.Reflection; +using System.Threading.Tasks; using Cake.Core; namespace Cake.Frosting.Internal.Commands @@ -16,10 +17,10 @@ public VersionCommand(IConsole console) _console = console; } - public override bool Execute(ICakeEngine engine, CakeHostOptions options) + public override Task ExecuteAsync(ICakeEngine engine, CakeHostOptions options) { _console.Write(typeof(HelpCommand).GetTypeInfo().Assembly.GetName().Version.ToString(3)); - return true; + return Task.FromResult(true); } } } diff --git a/src/Cake.Frosting/Internal/EngineInitializer.cs b/src/Cake.Frosting/Internal/EngineInitializer.cs index ad8d1e6..2ed521b 100644 --- a/src/Cake.Frosting/Internal/EngineInitializer.cs +++ b/src/Cake.Frosting/Internal/EngineInitializer.cs @@ -42,7 +42,7 @@ public void Initialize(ICakeEngine engine, IFrostingContext context, IEnumerable // Is the run method overridden? if (task.IsRunOverridden(context)) { - cakeTask.Does(c => task.Run(c)); + cakeTask.Does(task.RunAsync); } // Is the criteria method overridden? diff --git a/src/Cake.Frosting/Internal/Extensions/FrostingTaskExtensions.cs b/src/Cake.Frosting/Internal/Extensions/FrostingTaskExtensions.cs index 1bea88d..d5cf3f9 100644 --- a/src/Cake.Frosting/Internal/Extensions/FrostingTaskExtensions.cs +++ b/src/Cake.Frosting/Internal/Extensions/FrostingTaskExtensions.cs @@ -13,7 +13,17 @@ internal static class FrostingTaskExtensions { public static bool IsRunOverridden(this IFrostingTask task, IFrostingContext context) { - return task.GetType().GetMethod(nameof(IFrostingTask.Run), new[] { context.GetType() }).IsOverriden(); + if (task.IsFrostingTask()) + { + return task.GetType().GetMethod(nameof(FrostingTask.Run), new[] { context.GetType() }).IsOverriden(); + } + + if (task.IsAsyncFrostingTask()) + { + return task.GetType().GetMethod(nameof(AsyncFrostingTask.RunAsync), new[] { context.GetType() }).IsOverriden(); + } + + throw new InvalidOperationException($"This method expects all {nameof(IFrostingTask)} to be instances of {nameof(FrostingTask)} or {nameof(AsyncFrostingTask)}."); } public static bool IsShouldRunOverridden(this IFrostingTask task, IFrostingContext context) @@ -46,7 +56,7 @@ public static Type GetContextType(this IFrostingTask task) var baseType = task.GetType().GetTypeInfo().BaseType; if (baseType.IsConstructedGenericType) { - if (baseType.GetGenericTypeDefinition() == typeof(FrostingTask<>)) + if (baseType.GetGenericTypeDefinition() == typeof(FrostingTask<>) || baseType.GetGenericTypeDefinition() == typeof(AsyncFrostingTask<>)) { return baseType.GenericTypeArguments[0]; } @@ -58,5 +68,39 @@ private static bool IsConvertableTo(this Type type, Type other) { return other == type || other.IsAssignableFrom(type); } + + private static bool IsAsyncFrostingTask(this IFrostingTask task) + { + var taskType = task.GetType(); + + do + { + if (taskType.IsGenericType && taskType.GetGenericTypeDefinition() == typeof(AsyncFrostingTask<>)) + { + return true; + } + + taskType = taskType.BaseType; + } while (taskType != null); + + return false; + } + + private static bool IsFrostingTask(this IFrostingTask task) + { + var taskType = task.GetType(); + + do + { + if (taskType.IsGenericType && taskType.GetGenericTypeDefinition() == typeof(FrostingTask<>)) + { + return true; + } + + taskType = taskType.BaseType; + } while (taskType != null); + + return false; + } } } \ No newline at end of file From b5bc4d1ffdb7c1e38fd55d9d966c6c86e0f56f0f Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Tue, 9 Apr 2019 13:41:05 +0200 Subject: [PATCH 3/3] (GH-60) Update to Cake 0.32.1 --- src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj | 2 +- src/Cake.Frosting/Cake.Frosting.csproj | 4 ++-- template/Build.csproj | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj index f64bed7..c26d302 100644 --- a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj +++ b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj @@ -26,7 +26,7 @@ - + diff --git a/src/Cake.Frosting/Cake.Frosting.csproj b/src/Cake.Frosting/Cake.Frosting.csproj index 6bc17a3..ce531f3 100644 --- a/src/Cake.Frosting/Cake.Frosting.csproj +++ b/src/Cake.Frosting/Cake.Frosting.csproj @@ -23,8 +23,8 @@ portable - - + + diff --git a/template/Build.csproj b/template/Build.csproj index 40001ea..c56c875 100644 --- a/template/Build.csproj +++ b/template/Build.csproj @@ -6,7 +6,7 @@ - + \ No newline at end of file