From 5a097e70573dac5662a23494a1233210bc40bec5 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Thu, 2 Nov 2023 23:31:15 -0600 Subject: [PATCH] feat: updates for web debugging --- .../PepperDash.Essentials.Core.csproj | 7 +- .../Plugins/PluginLoader.cs | 5 - ...ssemtialsWebApi.cs => EssentialsWebApi.cs} | 170 +++++++++--------- .../Web/EssentialsWebApiFactory.cs | 4 +- .../DevMethodsRequestHandler.cs | 76 ++++++++ .../RequestHandlers/DevPropsRequestHandler.cs | 94 +++++----- .../GetTypesByFilterRequestHandler.cs | 2 +- .../RequestHandlers/GetTypesRequestHandler.cs | 2 +- .../ReportVersionsRequestHandler.cs | 2 +- .../ShowConfigRequestHandler.cs | 2 +- ...epperDash.Essentials.Devices.Common.csproj | 2 +- src/PepperDash.Essentials/ControlSystem.cs | 74 +++----- .../PepperDash.Essentials.csproj | 3 +- 13 files changed, 240 insertions(+), 203 deletions(-) rename src/PepperDash.Essentials.Core/Web/{EssemtialsWebApi.cs => EssentialsWebApi.cs} (54%) create mode 100644 src/PepperDash.Essentials.Core/Web/RequestHandlers/DevMethodsRequestHandler.cs diff --git a/src/PepperDash.Essentials.Core/PepperDash.Essentials.Core.csproj b/src/PepperDash.Essentials.Core/PepperDash.Essentials.Core.csproj index db87a84d..7e9b53c8 100644 --- a/src/PepperDash.Essentials.Core/PepperDash.Essentials.Core.csproj +++ b/src/PepperDash.Essentials.Core/PepperDash.Essentials.Core.csproj @@ -16,11 +16,6 @@ pdbonly - - - - - @@ -31,7 +26,7 @@ Full - + diff --git a/src/PepperDash.Essentials.Core/Plugins/PluginLoader.cs b/src/PepperDash.Essentials.Core/Plugins/PluginLoader.cs index dcc492df..edfd65ef 100644 --- a/src/PepperDash.Essentials.Core/Plugins/PluginLoader.cs +++ b/src/PepperDash.Essentials.Core/Plugins/PluginLoader.cs @@ -75,11 +75,6 @@ namespace PepperDash.Essentials version = Global.AssemblyVersion; break; } - case ("PepperDash_Essentials_DM.dll"): - { - version = Global.AssemblyVersion; - break; - } case ("Essentials Devices Common.dll"): { version = Global.AssemblyVersion; diff --git a/src/PepperDash.Essentials.Core/Web/EssemtialsWebApi.cs b/src/PepperDash.Essentials.Core/Web/EssentialsWebApi.cs similarity index 54% rename from src/PepperDash.Essentials.Core/Web/EssemtialsWebApi.cs rename to src/PepperDash.Essentials.Core/Web/EssentialsWebApi.cs index eb012378..35adbfe9 100644 --- a/src/PepperDash.Essentials.Core/Web/EssemtialsWebApi.cs +++ b/src/PepperDash.Essentials.Core/Web/EssentialsWebApi.cs @@ -9,7 +9,7 @@ using PepperDash.Essentials.Core.Web.RequestHandlers; namespace PepperDash.Essentials.Core.Web { - public class EssemtialsWebApi : EssentialsDevice + public class EssentialsWebApi : EssentialsDevice { private readonly WebApiServer _server; @@ -43,7 +43,7 @@ namespace PepperDash.Essentials.Core.Web /// /// /// - public EssemtialsWebApi(string key, string name) + public EssentialsWebApi(string key, string name) : this(key, name, null) { } @@ -54,7 +54,7 @@ namespace PepperDash.Essentials.Core.Web /// /// /// - public EssemtialsWebApi(string key, string name, EssentialsWebApiPropertiesConfig config) + public EssentialsWebApi(string key, string name, EssentialsWebApiPropertiesConfig config) : base(key, name) { Key = key; @@ -65,91 +65,95 @@ namespace PepperDash.Essentials.Core.Web BasePath = string.IsNullOrEmpty(config.BasePath) ? _defaultBasePath : config.BasePath; _server = new WebApiServer(Key, Name, BasePath); + + SetupRoutes(); + + Initialize(); } - /// - /// Custom activate, add routes - /// - /// - public override bool CustomActivate() + private void SetupRoutes() { - var routes = new List - { - new HttpCwsRoute("reportversions") - { - Name = "ReportVersions", - RouteHandler = new ReportVersionsRequestHandler() - }, - new HttpCwsRoute("appdebug") - { - Name = "AppDebug", - RouteHandler = new AppDebugRequestHandler() - }, - new HttpCwsRoute("devlist") - { - Name = "DevList", - RouteHandler = new DevListRequestHandler() - }, - new HttpCwsRoute("devprops") - { - Name = "DevProps", - RouteHandler = new DevPropsRequestHandler() - }, - new HttpCwsRoute("devjson") - { - Name = "DevJson", - RouteHandler = new DevJsonRequestHandler() - }, - new HttpCwsRoute("setdevicestreamdebug") - { - Name = "SetDeviceStreamDebug", - RouteHandler = new SetDeviceStreamDebugRequestHandler() - }, - new HttpCwsRoute("disableallstreamdebug") - { - Name = "DisableAllStreamDebug", - RouteHandler = new DisableAllStreamDebugRequestHandler() - }, - new HttpCwsRoute("showconfig") - { - Name = "ShowConfig", - RouteHandler = new ShowConfigRequestHandler() - }, - new HttpCwsRoute("gettypes") - { - Name = "GetTypes", - RouteHandler = new GetTypesRequestHandler() - }, - new HttpCwsRoute("gettypes/{filter}") - { - Name = "GetTypesByFilter", - RouteHandler = new GetTypesByFilterRequestHandler() - }, - new HttpCwsRoute("getjoinmap/{bridgeKey}") - { - Name = "GetJoinMapsForBridgeKey", - RouteHandler = new GetJoinMapForBridgeKeyRequestHandler() - }, - new HttpCwsRoute("getjoinmap/{bridgeKey}/{deviceKey}") - { - Name = "GetJoinMapsForDeviceKey", - RouteHandler = new GetJoinMapForDeviceKeyRequestHandler() - }, - new HttpCwsRoute("feedbacks/{deviceKey}") - { - Name = "GetFeedbacksForDeviceKey", - RouteHandler = new GetFeedbacksForDeviceRequestHandler() - } - }; + var routes = new List + { + new HttpCwsRoute("versions") + { + Name = "ReportVersions", + RouteHandler = new ReportVersionsRequestHandler() + }, + new HttpCwsRoute("appdebug") + { + Name = "AppDebug", + RouteHandler = new AppDebugRequestHandler() + }, + new HttpCwsRoute("devices") + { + Name = "DevList", + RouteHandler = new DevListRequestHandler() + }, + new HttpCwsRoute("deviceCommands") + { + Name = "DevJson", + RouteHandler = new DevJsonRequestHandler() + }, + new HttpCwsRoute("deviceProperties/{deviceKey}") + { + Name = "DevProps", + RouteHandler = new DevPropsRequestHandler() + }, + new HttpCwsRoute("deviceMethods/{deviceKey}") + { + Name = "DevMethods", + RouteHandler = new DevMethodsRequestHandler() + }, + new HttpCwsRoute("deviceFeedbacks/{deviceKey}") + { + Name = "GetFeedbacksForDeviceKey", + RouteHandler = new GetFeedbacksForDeviceRequestHandler() + }, + new HttpCwsRoute("deviceStreamDebug") + { + Name = "SetDeviceStreamDebug", + RouteHandler = new SetDeviceStreamDebugRequestHandler() + }, + new HttpCwsRoute("disableAllStreamDebug") + { + Name = "DisableAllStreamDebug", + RouteHandler = new DisableAllStreamDebugRequestHandler() + }, + new HttpCwsRoute("config") + { + Name = "ShowConfig", + RouteHandler = new ShowConfigRequestHandler() + }, + new HttpCwsRoute("types") + { + Name = "GetTypes", + RouteHandler = new GetTypesRequestHandler() + }, + new HttpCwsRoute("types/{filter}") + { + Name = "GetTypesByFilter", + RouteHandler = new GetTypesByFilterRequestHandler() + }, + new HttpCwsRoute("joinMap/{bridgeKey}") + { + Name = "GetJoinMapsForBridgeKey", + RouteHandler = new GetJoinMapForBridgeKeyRequestHandler() + }, + new HttpCwsRoute("joinMap/{bridgeKey}/{deviceKey}") + { + Name = "GetJoinMapsForDeviceKey", + RouteHandler = new GetJoinMapForDeviceKeyRequestHandler() + }, - foreach (var route in routes.Where(route => route != null)) - { - var r = route; - _server.AddRoute(r); - } + }; - return base.CustomActivate(); - } + foreach (var route in routes.Where(route => route != null)) + { + var r = route; + _server.AddRoute(r); + } + } /// /// Initializes the CWS class diff --git a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiFactory.cs b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiFactory.cs index 3e90808c..5c44d3b3 100644 --- a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiFactory.cs +++ b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiFactory.cs @@ -4,7 +4,7 @@ using PepperDash.Essentials.Core.Config; namespace PepperDash.Essentials.Core.Web { - public class EssentialsWebApiFactory : EssentialsDeviceFactory + public class EssentialsWebApiFactory : EssentialsDeviceFactory { public EssentialsWebApiFactory() { @@ -16,7 +16,7 @@ namespace PepperDash.Essentials.Core.Web Debug.Console(1, "Factory Attempting to create new Essentials Web API Server"); var props = dc.Properties.ToObject(); - if (props != null) return new EssemtialsWebApi(dc.Key, dc.Name, props); + if (props != null) return new EssentialsWebApi(dc.Key, dc.Name, props); Debug.Console(1, "Factory failed to create new Essentials Web API Server"); return null; diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevMethodsRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevMethodsRequestHandler.cs new file mode 100644 index 00000000..c08544cb --- /dev/null +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevMethodsRequestHandler.cs @@ -0,0 +1,76 @@ +using System.Text; +using Crestron.SimplSharp.WebScripting; +using Newtonsoft.Json; +using PepperDash.Core.Web.RequestHandlers; + +namespace PepperDash.Essentials.Core.Web.RequestHandlers +{ + public class DevMethodsRequestHandler : WebApiBaseRequestHandler + { + /// + /// Constructor + /// + /// + /// base(true) enables CORS support by default + /// + public DevMethodsRequestHandler() + : base(true) + { + } + + /// + /// Handles GET method requests + /// + /// + protected override void HandleGet(HttpCwsContext context) + { + var routeData = context.Request.RouteData; + if (routeData == null) + { + context.Response.StatusCode = 400; + context.Response.StatusDescription = "Bad Request"; + context.Response.End(); + + return; + } + + object deviceObj; + if (!routeData.Values.TryGetValue("deviceKey", out deviceObj)) + { + context.Response.StatusCode = 400; + context.Response.StatusDescription = "Bad Request"; + context.Response.End(); + + return; + } + + var device = DeviceManager.GetDeviceForKey(deviceObj.ToString()); + + if (device == null) + { + context.Response.StatusCode = 404; + context.Response.StatusDescription = "Device Not Found"; + context.Response.End(); + + return; + } + + var deviceMethods = DeviceJsonApi.GetMethods(device.Key); + if (deviceMethods == null || deviceMethods.ToLower().Contains("no device")) + { + context.Response.StatusCode = 404; + context.Response.StatusDescription = "Not Found"; + context.Response.End(); + + return; + } + + context.Response.StatusCode = 200; + context.Response.StatusDescription = "OK"; + context.Response.ContentType = "application/json"; + context.Response.ContentEncoding = Encoding.UTF8; + context.Response.Write(deviceMethods, false); + context.Response.End(); + } + } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevPropsRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevPropsRequestHandler.cs index 25fadbce..c00e47c2 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevPropsRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevPropsRequestHandler.cs @@ -18,59 +18,59 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers { } - /// - /// Handles POST method requests - /// - /// - protected override void HandlePost(HttpCwsContext context) - { - if (context.Request.ContentLength < 0) - { - context.Response.StatusCode = 400; - context.Response.StatusDescription = "Bad Request"; - context.Response.End(); + /// + /// Handles GET method requests + /// + /// + protected override void HandleGet(HttpCwsContext context) + { + var routeData = context.Request.RouteData; + if (routeData == null) + { + context.Response.StatusCode = 400; + context.Response.StatusDescription = "Bad Request"; + context.Response.End(); - return; - } + return; + } - var data = EssentialsWebApiHelpers.GetRequestBody(context.Request); - if (string.IsNullOrEmpty(data)) - { - context.Response.StatusCode = 400; - context.Response.StatusDescription = "Bad Request"; - context.Response.End(); + object deviceObj; + if (!routeData.Values.TryGetValue("deviceKey", out deviceObj)) + { + context.Response.StatusCode = 400; + context.Response.StatusDescription = "Bad Request"; + context.Response.End(); - return; - } + return; + } - var o = new DeviceActionWrapper(); - var body = JsonConvert.DeserializeAnonymousType(data, o); - - if (string.IsNullOrEmpty(body.DeviceKey)) - { - context.Response.StatusCode = 400; - context.Response.StatusDescription = "Bad Request"; - context.Response.End(); + var device = DeviceManager.GetDeviceForKey(deviceObj.ToString()); - return; - } + if (device == null) + { + context.Response.StatusCode = 404; + context.Response.StatusDescription = "Device Not Found"; + context.Response.End(); - var deviceProps = DeviceJsonApi.GetProperties(body.DeviceKey); - if (deviceProps == null || deviceProps.ToLower().Contains("no device")) - { - context.Response.StatusCode = 404; - context.Response.StatusDescription = "Not Found"; - context.Response.End(); + return; + } - return; - } + var deviceProperties = DeviceJsonApi.GetProperties(device.Key); + if (deviceProperties == null || deviceProperties.ToLower().Contains("no device")) + { + context.Response.StatusCode = 404; + context.Response.StatusDescription = "Not Found"; + context.Response.End(); - context.Response.StatusCode = 200; - context.Response.StatusDescription = "OK"; - context.Response.ContentType = "application/json"; - context.Response.ContentEncoding = Encoding.UTF8; - context.Response.Write(deviceProps, false); - context.Response.End(); - } - } + return; + } + + context.Response.StatusCode = 200; + context.Response.StatusDescription = "OK"; + context.Response.ContentType = "application/json"; + context.Response.ContentEncoding = Encoding.UTF8; + context.Response.Write(deviceProperties, false); + context.Response.End(); + } + } } \ No newline at end of file diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTypesByFilterRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTypesByFilterRequestHandler.cs index 105d2419..13936925 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTypesByFilterRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTypesByFilterRequestHandler.cs @@ -1,4 +1,4 @@ -extern alias Full +extern alias Full; using System.Linq; using Crestron.SimplSharp.WebScripting; diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTypesRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTypesRequestHandler.cs index a72fe7e4..42a8a2e2 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTypesRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetTypesRequestHandler.cs @@ -1,4 +1,4 @@ -extern alias Full +extern alias Full; using System.Linq; using Crestron.SimplSharp.WebScripting; diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/ReportVersionsRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/ReportVersionsRequestHandler.cs index 925a95f0..968b011e 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/ReportVersionsRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/ReportVersionsRequestHandler.cs @@ -1,4 +1,4 @@ -extern alias Full +extern alias Full; using System.Linq; using Crestron.SimplSharp.WebScripting; diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/ShowConfigRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/ShowConfigRequestHandler.cs index b017627d..12e2c877 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/ShowConfigRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/ShowConfigRequestHandler.cs @@ -1,4 +1,4 @@ -extern alias Full +extern alias Full; using Crestron.SimplSharp.WebScripting; using Full.Newtonsoft.Json; diff --git a/src/PepperDash.Essentials.Devices.Common/PepperDash.Essentials.Devices.Common.csproj b/src/PepperDash.Essentials.Devices.Common/PepperDash.Essentials.Devices.Common.csproj index 96ef4e5d..524f3f9e 100644 --- a/src/PepperDash.Essentials.Devices.Common/PepperDash.Essentials.Devices.Common.csproj +++ b/src/PepperDash.Essentials.Devices.Common/PepperDash.Essentials.Devices.Common.csproj @@ -31,6 +31,6 @@ Full - + \ No newline at end of file diff --git a/src/PepperDash.Essentials/ControlSystem.cs b/src/PepperDash.Essentials/ControlSystem.cs index 09c95323..53bdd678 100644 --- a/src/PepperDash.Essentials/ControlSystem.cs +++ b/src/PepperDash.Essentials/ControlSystem.cs @@ -5,18 +5,15 @@ using Crestron.SimplSharp.Reflection; using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.CrestronThread; using Crestron.SimplSharpPro.Diagnostics; -using Full.Newtonsoft.Json; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.DeviceTypeInterfaces; -using PepperDash.Essentials.Core.Fusion; -using PepperDash.Essentials.Devices.Common; +using PepperDash.Essentials.Core.Web; using PepperDash.Essentials.Fusion; using PepperDash.Essentials.Room.Config; using System; -using System.Collections.Generic; using System.Linq; namespace PepperDash.Essentials @@ -118,6 +115,8 @@ namespace PepperDash.Essentials CrestronConsole.AddNewConsoleCommand(DeviceManager.GetRoutingPorts, "getroutingports", "Reports all routing ports, if any. Requires a device key", ConsoleAccessLevelEnum.AccessOperator); + DeviceManager.AddDevice(new EssentialsWebApi("essentialsWebApi", "Essentials Web API")); + if (!Debug.DoNotLoadOnNextBoot) { GoWithLoad(); @@ -149,11 +148,22 @@ namespace PepperDash.Essentials directoryPrefix = Crestron.SimplSharp.CrestronIO.Directory.GetApplicationRootDirectory(); - var fullVersion = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false); + //var assembly = Assembly.GetExecutingAssembly(); - AssemblyInformationalVersionAttribute fullVersionAtt = fullVersion[0] as AssemblyInformationalVersionAttribute; + //Debug.Console(0, "Assembly Name: ", assembly.FullName); - Global.SetAssemblyVersion(fullVersionAtt.InformationalVersion); + //var fullVersion = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false); + + //if (fullVersion.Length == 0) + //{ + // Debug.Console(0, "***********************Unable to determine version.***********************"); + //} + + //AssemblyInformationalVersionAttribute fullVersionAtt = fullVersion[0] as AssemblyInformationalVersionAttribute; + + //Debug.Console(0, "Full Version: {0}", fullVersionAtt.InformationalVersion); + + //Global.SetAssemblyVersion(fullVersionAtt.InformationalVersion); if (CrestronEnvironment.DevicePlatform != eDevicePlatform.Server) // Handles 3-series running Windows CE OS { @@ -202,7 +212,7 @@ namespace PepperDash.Essentials } else // Handles Linux OS (Virtual Control) { - Debug.SetDebugLevel(2); + //Debug.SetDebugLevel(2); Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on Virtual Control Server", Global.AssemblyVersion); @@ -290,6 +300,8 @@ namespace PepperDash.Essentials { Debug.Console(0, "Verifying and/or creating folder structure"); var configDir = Global.FilePathPrefix; + + Debug.Console(0, "FilePathPrefix: {0}", configDir); var configExists = Directory.Exists(configDir); if (!configExists) Directory.Create(configDir); @@ -358,7 +370,6 @@ namespace PepperDash.Essentials // Build the processor wrapper class DeviceManager.AddDevice(new PepperDash.Essentials.Core.Devices.CrestronProcessor("processor")); - // DeviceManager.AddDevice(new EssemtialsWebApi("essentialsWebApi","Essentials Web API")); // Add global System Monitor device if (CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance) @@ -387,51 +398,6 @@ namespace PepperDash.Essentials "WARNING: Config file defines processor type as '{0}' but actual processor is '{1}'! Some ports may not be available", devConf.Type.ToUpper(), Global.ControlSystem.ControllerPrompt.ToUpper()); - //if (newDev == null) - // newDev = PepperDash.Essentials.Core.ProcessorExtensionDeviceFactory.GetExtensionDevice(devConf); - - //if (newDev != null) - //{ - // DeviceManager.AddDevice(newDev); - - // continue; - //} - - // Check if the processor is a DMPS model - //if (this.ControllerPrompt.IndexOf("dmps", StringComparison.OrdinalIgnoreCase) > -1) - //{ - // Debug.Console(2, "Adding DmpsRoutingController for {0} to Device Manager.", this.ControllerPrompt); - - // var propertiesConfig = JsonConvert.DeserializeObject(devConf.Properties.ToString()); - - // if(propertiesConfig == null) - // propertiesConfig = new DM.Config.DmpsRoutingPropertiesConfig(); - - // DeviceManager.AddDevice(DmpsRoutingController.GetDmpsRoutingController("processor-avRouting", this.ControllerPrompt, propertiesConfig)); - //} - //else - - //if (this.ControllerPrompt.IndexOf("mpc3", StringComparison.OrdinalIgnoreCase) > -1) - //{ - // Debug.Console(2, "MPC3 processor type detected. Adding Mpc3TouchpanelController."); - - // var butToken = devConf.Properties["buttons"]; - // if (butToken != null) - // { - // var buttons = butToken.ToObject>(); - // var tpController = new Essentials.Core.Touchpanels.Mpc3TouchpanelController(devConf.Key, devConf.Name, Global.ControlSystem, buttons); - // DeviceManager.AddDevice(tpController); - // } - // else - // { - // Debug.Console(0, Debug.ErrorLogLevel.Error, "Error: Unable to deserialize buttons collection for device: {0}", devConf.Key); - // } - - //} - //else - //{ - // Debug.Console(2, "************Processor is not DMPS type***************"); - //} continue; } diff --git a/src/PepperDash.Essentials/PepperDash.Essentials.csproj b/src/PepperDash.Essentials/PepperDash.Essentials.csproj index bcc0e152..725aaa31 100644 --- a/src/PepperDash.Essentials/PepperDash.Essentials.csproj +++ b/src/PepperDash.Essentials/PepperDash.Essentials.csproj @@ -10,6 +10,7 @@ bin\$(Configuration)\ PepperDash Essentials PepperDashEssentials + $(Version) full @@ -50,7 +51,7 @@ Full - +