diff --git a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config
index 2b5d91e..0c156e6 100644
--- a/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config
+++ b/SitecorePackageDeployer.Web/App_Config/Include/Hhogdev.SitecorePackageDeployer.config
@@ -1,6 +1,9 @@
-
-
+
+
+
@@ -18,11 +21,14 @@
-
+
+
+
+
diff --git a/SitecorePackageDeployer.Web/Hhogdev.SitecorePackageDeployer.Web.csproj b/SitecorePackageDeployer.Web/Hhogdev.SitecorePackageDeployer.Web.csproj
index fb5bc39..7ed1afa 100644
--- a/SitecorePackageDeployer.Web/Hhogdev.SitecorePackageDeployer.Web.csproj
+++ b/SitecorePackageDeployer.Web/Hhogdev.SitecorePackageDeployer.Web.csproj
@@ -13,7 +13,7 @@
Properties
Hhogdev.SitecorePackageDeployer.Web
Hhogdev.SitecorePackageDeployer.Web
- v4.5
+ v4.8
true
@@ -23,6 +23,7 @@
+
true
@@ -43,22 +44,24 @@
+
+ ..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll
+
+
-
-
-
+
@@ -84,6 +87,13 @@
+
+
+ web.config
+
+
+ web.config
+
10.0
diff --git a/SitecorePackageDeployer.Web/Properties/AssemblyInfo.cs b/SitecorePackageDeployer.Web/Properties/AssemblyInfo.cs
index 1e4c3f0..bb11407 100644
--- a/SitecorePackageDeployer.Web/Properties/AssemblyInfo.cs
+++ b/SitecorePackageDeployer.Web/Properties/AssemblyInfo.cs
@@ -1,5 +1,4 @@
using System.Reflection;
-using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
@@ -32,4 +31,4 @@
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.10.0.0")]
-[assembly: AssemblyFileVersion("1.10.0.0")]
+[assembly: AssemblyFileVersion("1.10.0.0")]
\ No newline at end of file
diff --git a/SitecorePackageDeployer.Web/packages.config b/SitecorePackageDeployer.Web/packages.config
index c517166..4de699c 100644
--- a/SitecorePackageDeployer.Web/packages.config
+++ b/SitecorePackageDeployer.Web/packages.config
@@ -1,5 +1,4 @@
-
-
+
\ No newline at end of file
diff --git a/SitecorePackageDeployer.Web/sitecore/admin/StartSitecorePackageDeployer.aspx.cs b/SitecorePackageDeployer.Web/sitecore/admin/StartSitecorePackageDeployer.aspx.cs
index 19f4fee..332f66e 100644
--- a/SitecorePackageDeployer.Web/sitecore/admin/StartSitecorePackageDeployer.aspx.cs
+++ b/SitecorePackageDeployer.Web/sitecore/admin/StartSitecorePackageDeployer.aspx.cs
@@ -1,15 +1,11 @@
-using Hhogdev.SitecorePackageDeployer.Tasks;
-using System;
-using System.Collections.Generic;
-using System.Linq;
+using System;
using System.Threading;
-using System.Web;
using System.Web.UI;
-using System.Web.UI.WebControls;
+using Hhogdev.SitecorePackageDeployer.Tasks;
namespace Hhogdev.SitecorePackageDeployer.Web.sitecore.admin
{
- public partial class StartSitecorePackageDeployer : System.Web.UI.Page
+ public partial class StartSitecorePackageDeployer : Page
{
protected void Page_Load(object sender, EventArgs e)
{
@@ -18,9 +14,9 @@ protected void Page_Load(object sender, EventArgs e)
InstallPackage.ResetInstallState();
}
- ThreadPool.QueueUserWorkItem((ctx) =>
+ ThreadPool.QueueUserWorkItem(ctx =>
{
- InstallPackage installer = new InstallPackage();
+ var installer = new InstallPackage();
installer.Run();
});
}
diff --git a/SitecorePackageDeployer.Web/web.config b/SitecorePackageDeployer.Web/web.config
index 43cd16b..92b2dc3 100644
--- a/SitecorePackageDeployer.Web/web.config
+++ b/SitecorePackageDeployer.Web/web.config
@@ -3,8 +3,7 @@
-
+
@@ -14,8 +13,19 @@
-
+
+
+
+
+
\ No newline at end of file
diff --git a/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj b/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj
index 85bdd9e..a5eb70e 100644
--- a/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj
+++ b/SitecorePackageDeployer/Hhogdev.SitecorePackageDeployer.csproj
@@ -9,8 +9,9 @@
Properties
Hhogdev.SitecorePackageDeployer
Hhogdev.SitecorePackageDeployer
- v4.5
+ v4.8
512
+
true
@@ -30,28 +31,46 @@
4
-
- ..\packages\Newtonsoft.Json.4.5.9\lib\net40\Newtonsoft.Json.dll
- True
+
+ ..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll
-
- ..\packages\Sitecore.Kernel.NoReferences.7.2.140228\lib\NET45\Sitecore.Kernel.dll
+
+ ..\packages\Sitecore.Kernel.10.2.0\lib\net48\Sitecore.Kernel.dll
-
- ..\packages\Sitecore.Logging.NoReferences.7.2.140228\lib\NET45\Sitecore.Logging.dll
+
+ ..\packages\Sitecore.Logging.10.2.0\lib\net48\Sitecore.Logging.dll
-
- ..\packages\Sitecore.Mvc.NoReferences.7.2.140228\lib\NET45\Sitecore.Mvc.dll
+
+ ..\packages\Sitecore.Update.10.2.0\lib\net48\Sitecore.Update.dll
-
- ..\packages\Sitecore.Update.NoReferences.7.2.140228\lib\NET45\Sitecore.Update.dll
-
-
- ..\packages\Sitecore.Zip.NoReferences.7.2.140228\lib\NET45\Sitecore.Zip.dll
+
+ ..\packages\Sitecore.Zip.10.1.2\lib\net48\Sitecore.Zip.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SitecorePackageDeployer/Logging/InstallLogger.cs b/SitecorePackageDeployer/Logging/InstallLogger.cs
index b4bb167..94e60ef 100644
--- a/SitecorePackageDeployer/Logging/InstallLogger.cs
+++ b/SitecorePackageDeployer/Logging/InstallLogger.cs
@@ -1,76 +1,66 @@
-using log4net;
-using log4net.spi;
-using Sitecore.Diagnostics;
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Text;
-using System.Threading.Tasks;
+using log4net;
+using log4net.spi;
+using Sitecore.Diagnostics;
namespace Hhogdev.SitecorePackageDeployer.Logging
{
///
- /// Implements ILog to capture log messages during install
+ /// Implements ILog to capture log messages during install
///
internal class InstallLogger : ILog
{
- ILogger _logger;
- List _messages = new List();
+ private readonly List _messages = new List();
public InstallLogger(ILogger logger)
{
- _logger = logger;
+ Logger = logger;
}
- #region ILog implementation
- public bool IsDebugEnabled
+ ///
+ /// Adds a message to the list of messages strings
+ ///
+ ///
+ ///
+ ///
+ private void WriteMessage(object message, Exception ex)
{
- get
- {
- return true;
- }
- }
+ var messageBuilder = new StringBuilder(message.ToString());
- public bool IsErrorEnabled
- {
- get
+ if (ex != null)
{
- return true;
+ messageBuilder.Append("\n\t");
+ messageBuilder.Append(ex);
}
- }
- public bool IsFatalEnabled
- {
- get
- {
- return true;
- }
+ _messages.Add(messageBuilder.ToString());
}
- public bool IsInfoEnabled
+ ///
+ /// Writes messages to a log file
+ ///
+ ///
+ public void WriteMessages(string logFile)
{
- get
- {
- return true;
- }
+ File.AppendAllLines(logFile, _messages);
}
- public bool IsWarnEnabled
- {
- get
- {
- return true;
- }
- }
+ #region ILog implementation
- public ILogger Logger
- {
- get
- {
- return _logger;
- }
- }
+ public bool IsDebugEnabled => true;
+
+ public bool IsErrorEnabled => true;
+
+ public bool IsFatalEnabled => true;
+
+ public bool IsInfoEnabled => true;
+
+ public bool IsWarnEnabled => true;
+
+ public ILogger Logger { get; }
public void Debug(object message)
{
@@ -141,34 +131,7 @@ public void Warn(object message, Exception ex)
WriteMessage(message, ex);
}
- #endregion
- ///
- /// Adds a message to the list of messages strings
- ///
- ///
- ///
- ///
- private void WriteMessage(object message, Exception ex)
- {
- StringBuilder messageBuilder = new StringBuilder(message.ToString());
-
- if (ex!=null)
- {
- messageBuilder.Append("\n\t");
- messageBuilder.Append(ex.ToString());
- }
-
- _messages.Add(messageBuilder.ToString());
- }
-
- ///
- /// Writes messages to a log file
- ///
- ///
- public void WriteMessages(string logFile)
- {
- File.AppendAllLines(logFile, _messages);
- }
+ #endregion
}
-}
+}
\ No newline at end of file
diff --git a/SitecorePackageDeployer/Metadata/CompletionNotification.cs b/SitecorePackageDeployer/Metadata/CompletionNotification.cs
index db59a12..5b9a4d3 100644
--- a/SitecorePackageDeployer/Metadata/CompletionNotification.cs
+++ b/SitecorePackageDeployer/Metadata/CompletionNotification.cs
@@ -1,8 +1,4 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace Hhogdev.SitecorePackageDeployer.Metadata
{
@@ -13,4 +9,4 @@ public class CompletionNotification
public string ServerName { get; set; }
public string DeployHistoryPath { get; set; }
}
-}
+}
\ No newline at end of file
diff --git a/SitecorePackageDeployer/Metadata/PostStepDetails.cs b/SitecorePackageDeployer/Metadata/PostStepDetails.cs
index 95c1f94..a3c09e7 100644
--- a/SitecorePackageDeployer/Metadata/PostStepDetails.cs
+++ b/SitecorePackageDeployer/Metadata/PostStepDetails.cs
@@ -1,8 +1,4 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace Hhogdev.SitecorePackageDeployer.Metadata
{
@@ -13,4 +9,4 @@ public class PostStepDetails
public string HistoryPath { get; set; }
public string ResultFileName { get; set; }
}
-}
+}
\ No newline at end of file
diff --git a/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs b/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs
index 7d53583..7eb2f07 100644
--- a/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs
+++ b/SitecorePackageDeployer/Pipelines/Initialize/RunPostInstallSteps.cs
@@ -1,24 +1,24 @@
-using Hhogdev.SitecorePackageDeployer.Logging;
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Reflection;
+using System.Threading;
+using System.Xml.Serialization;
+using Hhogdev.SitecorePackageDeployer.Logging;
using Hhogdev.SitecorePackageDeployer.Metadata;
using Hhogdev.SitecorePackageDeployer.Tasks;
using log4net.Repository.Hierarchy;
using log4net.spi;
-using Sitecore.Configuration;
using Sitecore.Diagnostics;
using Sitecore.Pipelines;
using Sitecore.SecurityModel;
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Reflection;
-using System.Threading;
-using System.Xml.Serialization;
namespace Hhogdev.SitecorePackageDeployer.Pipelines.Initialize
{
public class RunPostInstallSteps
{
- string _packageSource;
+ private string _packageSource;
+ private string _restartFile;
public RunPostInstallSteps()
{
@@ -28,15 +28,26 @@ public RunPostInstallSteps()
private void LoadSettings()
{
_packageSource = InstallPackage.GetPackageSource();
+ _restartFile = InstallPackage.GetRestartFile();
}
public void Process(PipelineArgs args)
{
- Log.Info("Sitecore package deployer starting. Version: " + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location). FileVersion, this);
+ Log.Info(
+ "Sitecore package deployer starting. Version: " + FileVersionInfo
+ .GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion, this);
+
+ //Check to see if we need to force the start of an install since the state is incorrect
+ if (File.Exists(_restartFile))
+ {
+ File.Delete(_restartFile);
+ InstallPackage.ResetInstallState();
+ }
//Check to see if we can run post steps
- InstallPackage.InstallerState state = InstallPackage.GetInstallerState();
- if (state == InstallPackage.InstallerState.InstallingPackage || state == InstallPackage.InstallerState.InstallingPostSteps)
+ var state = InstallPackage.GetInstallerState();
+ if (state == InstallPackage.InstallerState.InstallingPackage ||
+ state == InstallPackage.InstallerState.InstallingPostSteps)
{
Log.Warn(string.Format("Can't run post steps. Package installer state is {0}", state), this);
@@ -57,16 +68,17 @@ public void Process(PipelineArgs args)
private void InstallAdditionalPackages()
{
- ThreadPool.QueueUserWorkItem((ctx) =>
+ ThreadPool.QueueUserWorkItem(ctx =>
{
- InstallPackage installer = new InstallPackage();
+ var installer = new InstallPackage();
installer.Run();
});
}
private void RunPostInitializeStepsIfNeeded()
{
- string startupPostStepPackageFile = Path.Combine(_packageSource, InstallPackage.STARTUP_POST_STEP_PACKAGE_FILENAME);
+ var startupPostStepPackageFile =
+ Path.Combine(_packageSource, InstallPackage.STARTUP_POST_STEP_PACKAGE_FILENAME);
//remove post step flag file if it exists
if (File.Exists(startupPostStepPackageFile))
@@ -76,14 +88,14 @@ private void RunPostInitializeStepsIfNeeded()
using (new SecurityDisabler())
{
//Load the post step details
- XmlSerializer serializer = new XmlSerializer(typeof(PostStepDetails));
+ var serializer = new XmlSerializer(typeof(PostStepDetails));
using (TextReader writer = new StreamReader(startupPostStepPackageFile))
{
- PostStepDetails details = serializer.Deserialize(writer) as PostStepDetails;
+ var details = serializer.Deserialize(writer) as PostStepDetails;
if (details != null)
{
- InstallLogger installLogger = new InstallLogger(new RootLogger(Level.ALL));
+ var installLogger = new InstallLogger(new RootLogger(Level.ALL));
try
{
@@ -113,4 +125,4 @@ private void RunPostInitializeStepsIfNeeded()
}
}
}
-}
+}
\ No newline at end of file
diff --git a/SitecorePackageDeployer/Pipelines/Shutdown/ShutdownIndicator.cs b/SitecorePackageDeployer/Pipelines/Shutdown/ShutdownIndicator.cs
index fdf7956..7766305 100644
--- a/SitecorePackageDeployer/Pipelines/Shutdown/ShutdownIndicator.cs
+++ b/SitecorePackageDeployer/Pipelines/Shutdown/ShutdownIndicator.cs
@@ -1,15 +1,10 @@
using Hhogdev.SitecorePackageDeployer.Tasks;
using Sitecore.Pipelines;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace Hhogdev.SitecorePackageDeployer.Pipelines.Shutdown
{
///
- /// Catches a shutdown and tells the package installer that it must execute its post steps in the initialize pipeline
+ /// Catches a shutdown and tells the package installer that it must execute its post steps in the initialize pipeline
///
public class ShutdownIndicator
{
@@ -19,4 +14,4 @@ public void Process(PipelineArgs args)
InstallPackage.ShutdownDetected = true;
}
}
-}
+}
\ No newline at end of file
diff --git a/SitecorePackageDeployer/Properties/AssemblyInfo.cs b/SitecorePackageDeployer/Properties/AssemblyInfo.cs
index 064b593..d69f3b8 100644
--- a/SitecorePackageDeployer/Properties/AssemblyInfo.cs
+++ b/SitecorePackageDeployer/Properties/AssemblyInfo.cs
@@ -1,5 +1,4 @@
using System.Reflection;
-using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
@@ -33,4 +32,4 @@
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.11.0.0")]
-[assembly: AssemblyFileVersion("1.11.0.0")]
+[assembly: AssemblyFileVersion("1.11.0.0")]
\ No newline at end of file
diff --git a/SitecorePackageDeployer/Tasks/InstallPackage.cs b/SitecorePackageDeployer/Tasks/InstallPackage.cs
index af29235..cb53fb0 100644
--- a/SitecorePackageDeployer/Tasks/InstallPackage.cs
+++ b/SitecorePackageDeployer/Tasks/InstallPackage.cs
@@ -1,79 +1,80 @@
-using Sitecore.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Reflection;
+using System.Threading;
+using System.Xml.Serialization;
+using Hhogdev.SitecorePackageDeployer.Logging;
+using Hhogdev.SitecorePackageDeployer.Metadata;
+using log4net.Repository.Hierarchy;
+using log4net.spi;
+using Newtonsoft.Json;
+using Sitecore;
+using Sitecore.Configuration;
+using Sitecore.Data;
using Sitecore.Diagnostics;
using Sitecore.IO;
+using Sitecore.SecurityModel;
using Sitecore.Update;
using Sitecore.Update.Installer;
using Sitecore.Update.Installer.Exceptions;
using Sitecore.Update.Installer.Installer.Utils;
using Sitecore.Update.Installer.Utils;
using Sitecore.Update.Utils;
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using log4net.spi;
-using Hhogdev.SitecorePackageDeployer.Logging;
-using log4net.Repository.Hierarchy;
-using System.Threading;
-using Sitecore;
-using Sitecore.Update.Metadata;
-using Hhogdev.SitecorePackageDeployer.Metadata;
-using System.Xml.Serialization;
using Sitecore.Web;
-using System.Net;
-using System.Reflection;
-using Sitecore.SecurityModel;
-using Sitecore.Data;
-using Sitecore.Syndication;
namespace Hhogdev.SitecorePackageDeployer.Tasks
{
public class InstallPackage
{
- internal enum InstallerState
- {
- Ready = 0,
- InstallingPackage = 1,
- WaitingForPostSteps = 2,
- InstallingPostSteps = 3
- }
-
internal const string STARTUP_POST_STEP_PACKAGE_FILENAME = "StartPostStepPackage.xml";
internal const string SUCCESS = "Success";
internal const string FAIL = "Fail";
internal const string INSTALLER_STATE_PROPERTY = "SPD_InstallerState_";
- static string sitecoreUpdatePath = Assembly.GetAssembly(typeof(PackageInstallationInfo)).Location;
- static Assembly sitecoreUpdateAssembly = Assembly.LoadFile(sitecoreUpdatePath);
- FileVersionInfo sitecoreUpdateVersionInfo = FileVersionInfo.GetVersionInfo(sitecoreUpdateAssembly.Location);
- static Type updateHelperType = sitecoreUpdateAssembly.GetType("Sitecore.Update.UpdateHelper");
+ private static readonly string sitecoreUpdatePath =
+ Assembly.GetAssembly(typeof(PackageInstallationInfo)).Location;
+
+ private static readonly Assembly sitecoreUpdateAssembly = Assembly.LoadFile(sitecoreUpdatePath);
+ private static readonly Type updateHelperType = sitecoreUpdateAssembly.GetType("Sitecore.Update.UpdateHelper");
+
+ private readonly FileVersionInfo sitecoreUpdateVersionInfo =
+ FileVersionInfo.GetVersionInfo(sitecoreUpdateAssembly.Location);
//Points at the folder where new packages will be stored
- string _packageSource;
+ private string _packageSource;
+
+ //File for restarting the web server
+ private string _restartFile;
+
//Url to make a request to for restarting the web server
- string _restartUrl;
- //Determines if the config files should be updated
- bool _updateConfigurationFiles;
+ private string _restartUrl;
- public static bool ShutdownDetected { get; set; }
+ //Determines if the config files should be updated
+ private bool _updateConfigurationFiles;
public InstallPackage()
{
LoadSettings();
}
+ public static bool ShutdownDetected { get; set; }
+
private void LoadSettings()
{
_packageSource = GetPackageSource();
_restartUrl = Settings.GetSetting("SitecorePackageDeployer.RestartUrl");
- _updateConfigurationFiles = Settings.GetBoolSetting("SitecorePackageDeployer.UpdateConfigurationFiles", true);
+ _restartFile = GetRestartFile();
+ _updateConfigurationFiles =
+ Settings.GetBoolSetting("SitecorePackageDeployer.UpdateConfigurationFiles", true);
}
internal static string GetPackageSource()
{
- string packageSource = Settings.GetSetting("SitecorePackageDeployer.PackageSource");
+ var packageSource = Settings.GetSetting("SitecorePackageDeployer.PackageSource");
//See if the package source is a web path instead of a file system path.
if (packageSource.StartsWith("/"))
@@ -89,13 +90,25 @@ internal static string GetPackageSource()
return packageSource;
}
+ internal static string GetRestartFile()
+ {
+ var restartFile = Settings.GetSetting("SitecorePackageDeployer.RestartFile");
+
+ if (restartFile.StartsWith("/"))
+ {
+ restartFile = MainUtil.MapPath(restartFile);
+ }
+
+ return restartFile;
+ }
+
public void Run()
{
InstallPackages();
}
///
- /// Installs the packages found in the package source folder.
+ /// Installs the packages found in the package source folder.
///
private void InstallPackages()
{
@@ -107,12 +120,22 @@ private void InstallPackages()
return;
}
- InstallLogger installLogger = new InstallLogger(new RootLogger(Level.ALL));
+ var installLogger = new InstallLogger(new RootLogger(Level.ALL));
+
+ //Check to see if we need to force the start of an install since the state is incorrect
+ Log.Info(string.Format("Checking for a restart file at {0}", _restartFile), this);
+ if (File.Exists(_restartFile))
+ {
+ Log.Info("Found a restart file", this);
+ File.Delete(_restartFile);
+ ResetInstallState();
+ }
//Return if another installation is happening
if (GetInstallerState() != InstallerState.Ready)
{
- Log.Info(string.Format("Install packages skipped because install state is {0}. ", GetInstallerState()), this);
+ Log.Info(string.Format("Install packages skipped because install state is {0}. ", GetInstallerState()),
+ this);
return;
}
@@ -134,9 +157,10 @@ private void InstallPackages()
using (new SecurityDisabler())
{
//Find pending packages. This loop may not complete if there were binary/config changes
- foreach (string updatePackageFilename in Directory.GetFiles(_packageSource, "*.update", SearchOption.TopDirectoryOnly).OrderBy(f => f))
+ foreach (var updatePackageFilename in Directory
+ .GetFiles(_packageSource, "*.update", SearchOption.TopDirectoryOnly).OrderBy(f => f))
{
- string updatePackageFilenameStripped = updatePackageFilename.Split('\\').Last();
+ var updatePackageFilenameStripped = updatePackageFilename.Split('\\').Last();
if (ShutdownDetected)
{
Log.Info("Install packages aborting due to shutdown", this);
@@ -149,15 +173,16 @@ private void InstallPackages()
break;
}
- Log.Info(String.Format("Begin Installation: {0}", updatePackageFilenameStripped), this);
+ Log.Info(string.Format("Begin Installation: {0}", updatePackageFilenameStripped), this);
string installationHistoryRoot = null;
- List logMessages = new List();
+ var logMessages = new List();
- PostStepDetails postStepDetails = new PostStepDetails
+ var postStepDetails = new PostStepDetails
{
PostStepPackageFilename = updatePackageFilename,
- ResultFileName = Path.Combine(Path.GetDirectoryName(updatePackageFilename), Path.GetFileNameWithoutExtension(updatePackageFilename) + ".json")
+ ResultFileName = Path.Combine(Path.GetDirectoryName(updatePackageFilename),
+ Path.GetFileNameWithoutExtension(updatePackageFilename) + ".json")
};
string installStatus = null;
@@ -167,14 +192,16 @@ private void InstallPackages()
//Run the installer
if (sitecoreUpdateVersionInfo.ProductMajorPart == 1)
{
- logMessages = UpdateHelper.Install(BuildPackageInfo(updatePackageFilename), installLogger, out installationHistoryRoot);
+ logMessages = UpdateHelper.Install(BuildPackageInfo(updatePackageFilename),
+ installLogger, out installationHistoryRoot);
}
else
{
- object[] installationParamaters = new object[] { BuildReflectedPackageInfo(updatePackageFilename), installLogger, null };
+ object[] installationParamaters =
+ { BuildReflectedPackageInfo(updatePackageFilename), installLogger, null };
logMessages = (List)updateHelperType.InvokeMember("Install",
- BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public,
- null, null, installationParamaters, null);
+ BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public,
+ null, null, installationParamaters, null);
installationHistoryRoot = installationParamaters[2].ToString();
}
@@ -204,7 +231,8 @@ private void InstallPackages()
ExecutePostSteps(installLogger, postStepDetails, false);
installStatus = SUCCESS;
- Log.Info(String.Format("Installation Complete: {0}", updatePackageFilenameStripped), this);
+ Log.Info(string.Format("Installation Complete: {0}", updatePackageFilenameStripped),
+ this);
SetInstallerState(InstallerState.InstallingPackage);
}
}
@@ -221,10 +249,11 @@ private void InstallPackages()
catch (Exception ex)
{
installStatus = FAIL;
- Log.Error(String.Format("Installation Failed: {0}", updatePackageFilenameStripped), ex, this);
+ Log.Error(string.Format("Installation Failed: {0}", updatePackageFilenameStripped), ex,
+ this);
installLogger.Fatal("Package install failed", ex);
- ThreadPool.QueueUserWorkItem(new WaitCallback((ctx) =>
+ ThreadPool.QueueUserWorkItem(ctx =>
{
try
{
@@ -235,13 +264,14 @@ private void InstallPackages()
GC.Collect(2);
GC.WaitForPendingFinalizers();
- File.Move(updatePackageFilename, updatePackageFilename + ".error_" + DateTime.Now.ToString("yyyyMMdd.hhmmss"));
+ File.Move(updatePackageFilename,
+ updatePackageFilename + ".error_" + DateTime.Now.ToString("yyyyMMdd.hhmmss"));
}
catch (Exception ex1)
{
Log.Error("Error moving broken package", ex1, this);
}
- }));
+ });
break;
}
@@ -276,82 +306,87 @@ internal static void SetInstallerState(InstallerState installState)
{
Log.Info(string.Format("Setting installer state to {0}", installState), typeof(InstallPackage));
- Database coreDb = Database.GetDatabase("core");
+ var coreDb = Database.GetDatabase("core");
// Use reflection to get the int value because the properties base class changed in 9.3
if (coreDb.GetType().Assembly.GetName().Version.Major >= 14)
{
//coreDb.PropertyStore.SetIntValue(INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)installState);
- PropertyInfo propertyStorePropertyInfo = coreDb.GetType().GetProperty("PropertyStore");
- MethodInfo propertyStoreGetMethod = propertyStorePropertyInfo.GetGetMethod();
- object propertyStore = propertyStoreGetMethod.Invoke(coreDb, null);
+ var propertyStorePropertyInfo = coreDb.GetType().GetProperty("PropertyStore");
+ var propertyStoreGetMethod = propertyStorePropertyInfo.GetGetMethod();
+ var propertyStore = propertyStoreGetMethod.Invoke(coreDb, null);
- MethodInfo setIntValueMethodInfo = propertyStore.GetType().GetMethod("SetIntValue");
- setIntValueMethodInfo.Invoke(propertyStore, new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, installState });
+ var setIntValueMethodInfo = propertyStore.GetType().GetMethod("SetIntValue");
+ setIntValueMethodInfo.Invoke(propertyStore,
+ new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, installState });
}
else
{
//coreDb.Properties.SetIntValue(INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)installState);
- PropertyInfo propertiesPropertyInfo = coreDb.GetType().GetProperty("Properties");
- MethodInfo propertiesGetMethod = propertiesPropertyInfo.GetGetMethod();
- object properties = propertiesGetMethod.Invoke(coreDb, null);
+ var propertiesPropertyInfo = coreDb.GetType().GetProperty("Properties");
+ var propertiesGetMethod = propertiesPropertyInfo.GetGetMethod();
+ var properties = propertiesGetMethod.Invoke(coreDb, null);
- MethodInfo setIntValueMethodInfo = properties.GetType().GetMethod("SetIntValue");
- setIntValueMethodInfo.Invoke(properties, new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, installState });
+ var setIntValueMethodInfo = properties.GetType().GetMethod("SetIntValue");
+ setIntValueMethodInfo.Invoke(properties,
+ new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, installState });
}
}
///
- /// Gets the current install state
+ /// Gets the current install state
///
///
internal static InstallerState GetInstallerState()
{
- Database coreDb = Database.GetDatabase("core");
+ var coreDb = Database.GetDatabase("core");
// Use reflection to get the int value because the properties base class changed in 9.3
if (coreDb.GetType().Assembly.GetName().Version.Major >= 14)
{
//return (InstallerState)coreDb.PropertyStore.GetIntValue(INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready);
- PropertyInfo propertyStorePropertyInfo = coreDb.GetType().GetProperty("PropertyStore");
- MethodInfo propertyStoreGetMethod = propertyStorePropertyInfo.GetGetMethod();
- object propertyStore = propertyStoreGetMethod.Invoke(coreDb, null);
+ var propertyStorePropertyInfo = coreDb.GetType().GetProperty("PropertyStore");
+ var propertyStoreGetMethod = propertyStorePropertyInfo.GetGetMethod();
+ var propertyStore = propertyStoreGetMethod.Invoke(coreDb, null);
- MethodInfo getIntValueMethodInfo = propertyStore.GetType().GetMethod("GetIntValue");
- return (InstallerState)getIntValueMethodInfo.Invoke(propertyStore, new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready });
+ var getIntValueMethodInfo = propertyStore.GetType().GetMethod("GetIntValue");
+ return (InstallerState)getIntValueMethodInfo.Invoke(propertyStore,
+ new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready });
}
else
{
//return (InstallerState)coreDb.Properties.GetIntValue(INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready);
- PropertyInfo propertiesPropertyInfo = coreDb.GetType().GetProperty("Properties");
- MethodInfo propertiesGetMethod = propertiesPropertyInfo.GetGetMethod();
- object properties = propertiesGetMethod.Invoke(coreDb, null);
+ var propertiesPropertyInfo = coreDb.GetType().GetProperty("Properties");
+ var propertiesGetMethod = propertiesPropertyInfo.GetGetMethod();
+ var properties = propertiesGetMethod.Invoke(coreDb, null);
- MethodInfo getIntValueMethodInfo = properties.GetType().GetMethod("GetIntValue");
- return (InstallerState)getIntValueMethodInfo.Invoke(properties, new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready });
+ var getIntValueMethodInfo = properties.GetType().GetMethod("GetIntValue");
+ return (InstallerState)getIntValueMethodInfo.Invoke(properties,
+ new object[] { INSTALLER_STATE_PROPERTY + Environment.MachineName, (int)InstallerState.Ready });
}
}
///
- /// Restarts the web server by making a request to the webroot. The request has a short timeout and is expected to fail.
- /// The purpose is to initiate a request to IIS to restart the AppPool. The Url is determined by the Sitecore API or an optional config parameter.
+ /// Restarts the web server by making a request to the webroot. The request has a short timeout and is expected to
+ /// fail.
+ /// The purpose is to initiate a request to IIS to restart the AppPool. The Url is determined by the Sitecore API or an
+ /// optional config parameter.
///
private void RestartSitecoreServer()
{
-
try
{
//Force restart of all apppools pointing the website. This can happen during long installs
Log.Info("Forcing restart", this);
- string configFile = MainUtil.MapPath("/App_Config/Include/SPD_Restart.config");
+ var configFile = MainUtil.MapPath("/App_Config/Include/SPD_Restart.config");
- using (FileStream fs = File.Open(configFile, FileMode.Create))
+ using (var fs = File.Open(configFile, FileMode.Create))
{
- using (StreamWriter sw = new StreamWriter(fs))
+ using (var sw = new StreamWriter(fs))
{
sw.WriteLine("");
}
@@ -365,7 +400,7 @@ private void RestartSitecoreServer()
Log.Error("Exception when forcing restart", ex, this);
}
- string url = _restartUrl;
+ var url = _restartUrl;
if (string.IsNullOrEmpty(_restartUrl))
{
@@ -374,28 +409,28 @@ private void RestartSitecoreServer()
Log.Info("Sitecore Package Deployer is attempting to restart Sitecore at the url: " + url, this);
- WebRequest req = WebRequest.Create(url);
+ var req = WebRequest.Create(url);
req.Timeout = 100;
try
{
- using (WebResponse resp = req.GetResponse())
+ using (var resp = req.GetResponse())
{
-
}
}
catch (Exception)
- { }
+ {
+ }
}
///
- /// Creates a file that causes post install steps to be executed at startup
+ /// Creates a file that causes post install steps to be executed at startup
///
///
///
private void RunPostStepsAtStartup(string updatePackageFilename, string historyPath, PostStepDetails details)
{
- string startupPostStepPackageFile = Path.Combine(_packageSource, STARTUP_POST_STEP_PACKAGE_FILENAME);
+ var startupPostStepPackageFile = Path.Combine(_packageSource, STARTUP_POST_STEP_PACKAGE_FILENAME);
//remove post step flag file if it exists
if (File.Exists(startupPostStepPackageFile))
@@ -403,7 +438,7 @@ private void RunPostStepsAtStartup(string updatePackageFilename, string historyP
File.Delete(startupPostStepPackageFile);
}
- XmlSerializer serializer = new XmlSerializer(typeof(PostStepDetails));
+ var serializer = new XmlSerializer(typeof(PostStepDetails));
using (TextWriter writer = new StreamWriter(startupPostStepPackageFile))
{
serializer.Serialize(writer, details);
@@ -411,29 +446,33 @@ private void RunPostStepsAtStartup(string updatePackageFilename, string historyP
}
///
- /// Executes the post install steps
+ /// Executes the post install steps
///
///
- internal static void ExecutePostSteps(InstallLogger installLogger, PostStepDetails postStepDetails, bool setReadyStateWhenDone)
+ internal static void ExecutePostSteps(InstallLogger installLogger, PostStepDetails postStepDetails,
+ bool setReadyStateWhenDone)
{
try
{
SetInstallerState(InstallerState.InstallingPostSteps);
//Load the metadata from the update package
- MetadataView metedateView = UpdateHelper.LoadMetadata(postStepDetails.PostStepPackageFilename);
- List logMessages = new List();
+ var metedateView = UpdateHelper.LoadMetadata(postStepDetails.PostStepPackageFilename);
+ var logMessages = new List();
try
{
//Execute the post install steps
- DiffInstaller diffInstaller = new DiffInstaller(UpgradeAction.Upgrade);
- diffInstaller.ExecutePostInstallationInstructions(postStepDetails.PostStepPackageFilename, postStepDetails.HistoryPath, InstallMode.Update, metedateView, installLogger, ref logMessages);
+ var diffInstaller = new DiffInstaller(UpgradeAction.Upgrade);
+ diffInstaller.ExecutePostInstallationInstructions(postStepDetails.PostStepPackageFilename,
+ postStepDetails.HistoryPath, InstallMode.Update, metedateView, installLogger, ref logMessages);
}
finally
{
//Move the update package into the history folder
- File.Move(postStepDetails.PostStepPackageFilename, Path.Combine(postStepDetails.HistoryPath, Path.GetFileName(postStepDetails.PostStepPackageFilename)));
+ File.Move(postStepDetails.PostStepPackageFilename,
+ Path.Combine(postStepDetails.HistoryPath,
+ Path.GetFileName(postStepDetails.PostStepPackageFilename)));
}
}
catch (Exception ex)
@@ -457,19 +496,21 @@ internal static void ExecutePostSteps(InstallLogger installLogger, PostStepDetai
}
///
- /// Locates changed configs installed by the package installer
+ /// Locates changed configs installed by the package installer
///
private void FindAndUpdateChangedConfigs(string installPackageName)
{
- string appConfigFolder = MainUtil.MapPath("/");
+ var appConfigFolder = MainUtil.MapPath("/");
- foreach (string newConfigFile in Directory.GetFiles(appConfigFolder, "*.config." + installPackageName, SearchOption.AllDirectories))
+ foreach (var newConfigFile in Directory.GetFiles(appConfigFolder, "*.config." + installPackageName,
+ SearchOption.AllDirectories))
{
Log.Info(string.Format("Found changed config {0}", newConfigFile), this);
- int configExtensionPos = newConfigFile.LastIndexOf(".config") + 7;
- string oldConfigFile = Path.Combine(Path.GetDirectoryName(newConfigFile), newConfigFile.Substring(0, configExtensionPos));
- string backupConfigFile = newConfigFile + string.Format(".backup{0:yyyyMMddhhmmss}", DateTime.Now);
+ var configExtensionPos = newConfigFile.LastIndexOf(".config") + 7;
+ var oldConfigFile = Path.Combine(Path.GetDirectoryName(newConfigFile),
+ newConfigFile.Substring(0, configExtensionPos));
+ var backupConfigFile = newConfigFile + string.Format(".backup{0:yyyyMMddhhmmss}", DateTime.Now);
//Backup the existing config file
if (File.Exists(oldConfigFile))
@@ -504,7 +545,7 @@ private void FindAndUpdateChangedConfigs(string installPackageName)
}
///
- /// Writes the log messages to the message log
+ /// Writes the log messages to the message log
///
///
///
@@ -514,33 +555,34 @@ private void SaveInstallationMessages(string installationHistoryRoot, List
- /// Writes the notification .json to the install folder
+ /// Writes the notification .json to the install folder
///
///
///
@@ -564,16 +606,16 @@ public static void NotifiyPackageComplete(string status, PostStepDetails postSte
{
try
{
- using (StreamWriter sw = File.CreateText(postStepDetails.ResultFileName))
+ using (var sw = File.CreateText(postStepDetails.ResultFileName))
{
- CompletionNotification completionNotification = new CompletionNotification
+ var completionNotification = new CompletionNotification
{
Status = status,
ServerName = Environment.MachineName,
DeployHistoryPath = postStepDetails.HistoryPath
};
- sw.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(completionNotification));
+ sw.WriteLine(JsonConvert.SerializeObject(completionNotification));
}
}
catch (Exception ex)
@@ -589,11 +631,11 @@ public static void ResetInstallState()
private PackageInstallationInfo BuildPackageInfo(string updatePackageFilename)
{
- PackageInstallationInfo installationInfo = new PackageInstallationInfo
+ var installationInfo = new PackageInstallationInfo
{
Action = UpgradeAction.Upgrade,
Mode = InstallMode.Install,
- Path = updatePackageFilename,
+ Path = updatePackageFilename
};
return installationInfo;
}
@@ -601,13 +643,13 @@ private PackageInstallationInfo BuildPackageInfo(string updatePackageFilename)
private object BuildReflectedPackageInfo(string updatePackageFilename)
{
//Get PackageInstallationInfo type and create instance for reflection
- Type packageInstallationInfoType = sitecoreUpdateAssembly.GetType("Sitecore.Update.PackageInstallationInfo");
- object packageInstallationInfoInstance = Activator.CreateInstance(packageInstallationInfoType);
+ var packageInstallationInfoType = sitecoreUpdateAssembly.GetType("Sitecore.Update.PackageInstallationInfo");
+ var packageInstallationInfoInstance = Activator.CreateInstance(packageInstallationInfoType);
//Get and set properties
- PropertyInfo actionPropertyInfo = packageInstallationInfoType.GetProperty("Action");
- PropertyInfo modePropertyInfo = packageInstallationInfoType.GetProperty("Mode");
- PropertyInfo pathPropertyInfo = packageInstallationInfoType.GetProperty("Path");
- PropertyInfo processingModePropertyInfo = packageInstallationInfoType.GetProperty("ProcessingMode");
+ var actionPropertyInfo = packageInstallationInfoType.GetProperty("Action");
+ var modePropertyInfo = packageInstallationInfoType.GetProperty("Mode");
+ var pathPropertyInfo = packageInstallationInfoType.GetProperty("Path");
+ var processingModePropertyInfo = packageInstallationInfoType.GetProperty("ProcessingMode");
actionPropertyInfo.SetValue(packageInstallationInfoInstance, GetUpgradeActionValue("Upgrade"), null);
modePropertyInfo.SetValue(packageInstallationInfoInstance, GetInstallModeValue("Install"), null);
pathPropertyInfo.SetValue(packageInstallationInfoInstance, updatePackageFilename, null);
@@ -616,86 +658,83 @@ private object BuildReflectedPackageInfo(string updatePackageFilename)
}
///
- /// Gets upgrade action value.
+ /// Gets upgrade action value.
///
- ///
///
- /// Created on 12/27/2016.
+ /// Created on 12/27/2016.
///
- ///
- /// The upgrade action accepting any of the following values
- /// {
- /// "Preview",
- /// "Upgrade"
- /// }
- /// from Sitecore.Update v2 dll's Sitecore.Update.Installer.Utils.UpgradeAction enum.
+ ///
+ /// The upgrade action accepting any of the following values
+ /// {
+ /// "Preview",
+ /// "Upgrade"
+ /// }
+ /// from Sitecore.Update v2 dll's Sitecore.Update.Installer.Utils.UpgradeAction enum.
///
- ///
- ///
///
- /// The upgrade action value.
+ /// The upgrade action value.
///
-
private object GetUpgradeActionValue(string upgradeAction)
{
- Type upgradeActionType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Installer.Utils.UpgradeAction");
+ var upgradeActionType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Installer.Utils.UpgradeAction");
return Enum.Parse(upgradeActionType, upgradeAction);
}
///
- /// Gets install mode value.
+ /// Gets install mode value.
///
- ///
///
- /// Created on 12/27/2016.
+ /// Created on 12/27/2016.
///
- ///
- /// The install mode accepting any of the following values
- /// {
- /// "Install",
- /// "Update"
- /// }
- /// from Sitecore.Update v2 dll's Sitecore.Update.Utils.InstallMode enum
+ ///
+ /// The install mode accepting any of the following values
+ /// {
+ /// "Install",
+ /// "Update"
+ /// }
+ /// from Sitecore.Update v2 dll's Sitecore.Update.Utils.InstallMode enum
///
- ///
///
- /// The install mode value.
+ /// The install mode value.
///
-
private object GetInstallModeValue(string installMode)
{
- Type installModeType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Utils.InstallMode");
+ var installModeType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Utils.InstallMode");
return Enum.Parse(installModeType, installMode);
}
///
- /// Gets processing mode value.
+ /// Gets processing mode value.
///
- ///
///
- /// Created on 12/27/2016.
+ /// Created on 12/27/2016.
///
- ///
- /// The processing mode accepting any of the following values
- /// {
- /// "None",
- /// "Files",
- /// "Items",
- /// "PostStep",
- /// "All"
- /// }
- /// from Sitecore.Update v2 dll's Sitecore.Update.Utils.ProcessingMode enum.
+ ///
+ /// The processing mode accepting any of the following values
+ /// {
+ /// "None",
+ /// "Files",
+ /// "Items",
+ /// "PostStep",
+ /// "All"
+ /// }
+ /// from Sitecore.Update v2 dll's Sitecore.Update.Utils.ProcessingMode enum.
///
- ///
- ///
///
- /// The processing mode value.
+ /// The processing mode value.
///
-
private object GetProcessingModeValue(string processingMode)
{
- Type processingModeType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Utils.ProcessingMode");
+ var processingModeType = sitecoreUpdateAssembly.GetType("Sitecore.Update.Utils.ProcessingMode");
return Enum.Parse(processingModeType, processingMode);
}
+
+ internal enum InstallerState
+ {
+ Ready = 0,
+ InstallingPackage = 1,
+ WaitingForPostSteps = 2,
+ InstallingPostSteps = 3
+ }
}
-}
+}
\ No newline at end of file
diff --git a/SitecorePackageDeployer/app.config b/SitecorePackageDeployer/app.config
index a01ef9c..e154c35 100644
--- a/SitecorePackageDeployer/app.config
+++ b/SitecorePackageDeployer/app.config
@@ -4,8 +4,8 @@
-
+
-
\ No newline at end of file
+
diff --git a/SitecorePackageDeployer/packages.config b/SitecorePackageDeployer/packages.config
index b7cc0f4..a3d7995 100644
--- a/SitecorePackageDeployer/packages.config
+++ b/SitecorePackageDeployer/packages.config
@@ -1,9 +1,8 @@
-
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/TestUpdatePackage.Web/Class1.cs b/TestUpdatePackage.Web/Class1.cs
index d43c44b..caa1c7d 100644
--- a/TestUpdatePackage.Web/Class1.cs
+++ b/TestUpdatePackage.Web/Class1.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Web;
-
-namespace TestUpdatePackage.Web
+namespace TestUpdatePackage.Web
{
public class Class1
{
diff --git a/TestUpdatePackage.Web/Properties/AssemblyInfo.cs b/TestUpdatePackage.Web/Properties/AssemblyInfo.cs
index a46ba2d..cb0754a 100644
--- a/TestUpdatePackage.Web/Properties/AssemblyInfo.cs
+++ b/TestUpdatePackage.Web/Properties/AssemblyInfo.cs
@@ -1,5 +1,4 @@
using System.Reflection;
-using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
@@ -32,4 +31,4 @@
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
\ No newline at end of file
diff --git a/TestUpdatePackage.Web/TestUpdatePackage.Web.csproj b/TestUpdatePackage.Web/TestUpdatePackage.Web.csproj
index 96078ad..8e15973 100644
--- a/TestUpdatePackage.Web/TestUpdatePackage.Web.csproj
+++ b/TestUpdatePackage.Web/TestUpdatePackage.Web.csproj
@@ -13,7 +13,7 @@
Properties
TestUpdatePackage.Web
TestUpdatePackage.Web
- v4.5
+ v4.8
true
@@ -22,6 +22,8 @@
+
+
true
@@ -42,22 +44,21 @@
+
-
-
-
+