diff --git a/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj b/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj index 1685273e7..1b2e07d19 100644 --- a/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj +++ b/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj @@ -8,7 +8,7 @@ False AutoUpdateBuilder AutoUpdateBuilder - v4.5 + v4.6.2 true diff --git a/BuildTools/DependencyFinder/DependencyFinder.csproj b/BuildTools/DependencyFinder/DependencyFinder.csproj index 42a948ebf..01266941a 100644 --- a/BuildTools/DependencyFinder/DependencyFinder.csproj +++ b/BuildTools/DependencyFinder/DependencyFinder.csproj @@ -8,7 +8,7 @@ False DependencyFinder DependencyFinder - v4.5 + v4.6.2 true diff --git a/BuildTools/UpdateVersionStamp/UpdateVersionStamp.csproj b/BuildTools/UpdateVersionStamp/UpdateVersionStamp.csproj index e8524f649..f30a036ef 100644 --- a/BuildTools/UpdateVersionStamp/UpdateVersionStamp.csproj +++ b/BuildTools/UpdateVersionStamp/UpdateVersionStamp.csproj @@ -10,7 +10,7 @@ False UpdateVersionStamp UpdateVersionStamp - v4.5 + v4.6.2 diff --git a/Duplicati/CommandLine/BackendTester/Duplicati.CommandLine.BackendTester.csproj b/Duplicati/CommandLine/BackendTester/Duplicati.CommandLine.BackendTester.csproj index f5c9563ef..f518279ed 100644 --- a/Duplicati/CommandLine/BackendTester/Duplicati.CommandLine.BackendTester.csproj +++ b/Duplicati/CommandLine/BackendTester/Duplicati.CommandLine.BackendTester.csproj @@ -15,7 +15,7 @@ 3.5 Duplicati.snk - v4.5 + v4.6.2 false true diff --git a/Duplicati/CommandLine/BackendTool/Duplicati.CommandLine.BackendTool.csproj b/Duplicati/CommandLine/BackendTool/Duplicati.CommandLine.BackendTool.csproj index bb77bbadc..33bdffdb5 100644 --- a/Duplicati/CommandLine/BackendTool/Duplicati.CommandLine.BackendTool.csproj +++ b/Duplicati/CommandLine/BackendTool/Duplicati.CommandLine.BackendTool.csproj @@ -9,7 +9,7 @@ Duplicati.CommandLine.BackendTool Duplicati.CommandLine.BackendTool ..\Duplicati.snk - v4.5 + v4.6.2 false true diff --git a/Duplicati/CommandLine/Duplicati.CommandLine.csproj b/Duplicati/CommandLine/Duplicati.CommandLine.csproj index cb5e91dd1..60419c63a 100644 --- a/Duplicati/CommandLine/Duplicati.CommandLine.csproj +++ b/Duplicati/CommandLine/Duplicati.CommandLine.csproj @@ -16,7 +16,7 @@ 3.5 - v4.5 + v4.6.2 false true diff --git a/Duplicati/CommandLine/RecoveryTool/Duplicati.CommandLine.RecoveryTool.csproj b/Duplicati/CommandLine/RecoveryTool/Duplicati.CommandLine.RecoveryTool.csproj index 6a21e8313..c838d0325 100644 --- a/Duplicati/CommandLine/RecoveryTool/Duplicati.CommandLine.RecoveryTool.csproj +++ b/Duplicati/CommandLine/RecoveryTool/Duplicati.CommandLine.RecoveryTool.csproj @@ -9,7 +9,7 @@ Duplicati.CommandLine.RecoveryTool Duplicati.CommandLine.RecoveryTool Duplicati.snk - v4.5 + v4.6.2 false true diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj index 4245a3399..4646f08ef 100644 --- a/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/Duplicati.GUI.TrayIcon.csproj @@ -25,7 +25,7 @@ false true Duplicati.ico - v4.5 + v4.6.2 false true diff --git a/Duplicati/Library/AutoUpdater/Duplicati.Library.AutoUpdater.csproj b/Duplicati/Library/AutoUpdater/Duplicati.Library.AutoUpdater.csproj index 851c16443..8fc0cc91d 100644 --- a/Duplicati/Library/AutoUpdater/Duplicati.Library.AutoUpdater.csproj +++ b/Duplicati/Library/AutoUpdater/Duplicati.Library.AutoUpdater.csproj @@ -1,73 +1,29 @@ - - + + - Debug - AnyCPU - {7E119745-1F62-43F0-936C-F312A1912C0B} - Exe - False - Duplicati.Library.AutoUpdater - Duplicati.Library.AutoUpdater - ..\..\GUI\Duplicati.GUI.TrayIcon\Duplicati.snk - Duplicati.Library.AutoUpdater.Program - v4.5 - - false - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - false - - - full - true - bin\Release - prompt - 4 - false - false + netstandard2.0 + 2.0.0.7 + true + Duplicati.snk + LGPL, Copyright © Duplicati Team 2015 + Duplicati.Library.AutoUpdater + Duplicati Team + Duplicati Team + AutoUpdater for Duplicati + AutoUpdater + - - - ..\..\..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - + + - - - - - - - - - - - - {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65} - Duplicati.Library.Utility - - - {19ECCE09-B5EB-406C-8C57-BAC66997D469} - Duplicati.Library.Compression - - - {C5899F45-B0FF-483C-9D38-24A9FCAAB237} - Duplicati.Library.Interface - - - {4D012CB1-4B92-47F4-89B7-BF80A73A2E99} - Duplicati.License - + + + + + @@ -76,7 +32,5 @@ - - - + \ No newline at end of file diff --git a/Duplicati/Library/AutoUpdater/Duplicati.snk b/Duplicati/Library/AutoUpdater/Duplicati.snk new file mode 100644 index 000000000..e0c1e2dd8 Binary files /dev/null and b/Duplicati/Library/AutoUpdater/Duplicati.snk differ diff --git a/Duplicati/Library/AutoUpdater/Properties/AssemblyInfo.cs b/Duplicati/Library/AutoUpdater/Properties/AssemblyInfo.cs deleted file mode 100644 index 91d331240..000000000 --- a/Duplicati/Library/AutoUpdater/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2015, The Duplicati Team - -// http://www.duplicati.com, info@duplicati.com -// -// This library is free software; you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation; either version 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. - -[assembly: AssemblyTitle("Duplicati.Library.AutoUpdater")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion("2.0.0.7")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] - diff --git a/Duplicati/Library/AutoUpdater/UpdaterManager.cs b/Duplicati/Library/AutoUpdater/UpdaterManager.cs index dddee284f..36f0729c8 100644 --- a/Duplicati/Library/AutoUpdater/UpdaterManager.cs +++ b/Duplicati/Library/AutoUpdater/UpdaterManager.cs @@ -18,7 +18,7 @@ using System; using System.Linq; using System.Collections.Generic; -using System.IO; +using System.IO; using System.Threading.Tasks; using Duplicati.Library.Interface; @@ -448,109 +448,109 @@ namespace Duplicati.Library.AutoUpdater try { using (var tempfile = System.IO.File.Open(tempfilename, FileMode.Create, FileAccess.ReadWrite, FileShare.None)) - { - Action cb = null; - if (progress != null) - cb = (s) => { progress(Math.Min(1.0, Math.Max(0.0, (double)s / version.CompressedSize))); }; - - var wreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); - wreq.UserAgent = string.Format("{0} v{1}", APPNAME, SelfVersion.Version); - wreq.Headers.Add("X-Install-ID", InstallID); - - var areq = new Duplicati.Library.Utility.AsyncHttpRequest(wreq); - using (var resp = areq.GetResponse()) - using (var rss = areq.GetResponseStream()) - using (var pgs = new Duplicati.Library.Utility.ProgressReportingStream(rss, version.CompressedSize, cb)) - { - Duplicati.Library.Utility.Utility.CopyStream(pgs, tempfile); - } - - var sha256 = System.Security.Cryptography.SHA256.Create(); - var md5 = System.Security.Cryptography.MD5.Create(); - - if (tempfile.Length != version.CompressedSize) - throw new Exception(string.Format("Invalid file size {0}, expected {1} for {2}", tempfile.Length, version.CompressedSize, url)); - - tempfile.Position = 0; - var sha256hash = Convert.ToBase64String(sha256.ComputeHash(tempfile)); - if (sha256hash != version.SHA256) - throw new Exception(string.Format("Damaged or corrupted file, sha256 mismatch for {0}", url)); - - - tempfile.Position = 0; - var md5hash = Convert.ToBase64String(md5.ComputeHash(tempfile)); - if (md5hash != version.MD5) - throw new Exception(string.Format("Damaged or corrupted file, md5 mismatch for {0}", url)); - - tempfile.Position = 0; - using (var tempfolder = new Duplicati.Library.Utility.TempFolder()) - using (ICompression zip = new Duplicati.Library.Compression.FileArchiveZip(tempfile, ArchiveMode.Read, new Dictionary())) - { - foreach (var file in zip.ListFilesWithSize("")) - { - if (System.IO.Path.IsPathRooted(file.Key) || file.Key.Trim().StartsWith("..", StringComparison.OrdinalIgnoreCase)) - throw new Exception(string.Format("Out-of-place file path detected: {0}", file.Key)); - - var targetpath = System.IO.Path.Combine(tempfolder, file.Key); - var targetfolder = System.IO.Path.GetDirectoryName(targetpath); - if (!System.IO.Directory.Exists(targetfolder)) - System.IO.Directory.CreateDirectory(targetfolder); - - using (var zs = zip.OpenRead(file.Key)) - using (var fs = System.IO.File.Create(targetpath)) - zs.CopyTo(fs); - } - - if (VerifyUnpackedFolder(tempfolder, version)) - { - var versionstring = TryParseVersion(version.Version).ToString(); - var targetfolder = System.IO.Path.Combine(INSTALLDIR, versionstring); - if (System.IO.Directory.Exists(targetfolder)) - System.IO.Directory.Delete(targetfolder, true); - - System.IO.Directory.CreateDirectory(targetfolder); - - var tempfolderpath = Duplicati.Library.Utility.Utility.AppendDirSeparator(tempfolder); - var tempfolderlength = tempfolderpath.Length; - - // Would be nice, but does not work :( - //System.IO.Directory.Move(tempfolder, targetfolder); - - foreach (var e in Duplicati.Library.Utility.Utility.EnumerateFileSystemEntries(tempfolder)) - { - var relpath = e.Substring(tempfolderlength); - if (string.IsNullOrWhiteSpace(relpath)) - continue; - - var fullpath = System.IO.Path.Combine(targetfolder, relpath); - if (relpath.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) - System.IO.Directory.CreateDirectory(fullpath); - else - System.IO.File.Copy(e, fullpath); - } - - // Verification will kick in when we list the installed updates - //VerifyUnpackedFolder(targetfolder, version); - System.IO.File.WriteAllText(System.IO.Path.Combine(INSTALLDIR, CURRENT_FILE), versionstring); - - m_hasUpdateInstalled = null; - - var obsolete = (from n in FindInstalledVersions() - where n.Value.Version != version.Version && n.Value.Version != SelfVersion.Version - let x = TryParseVersion(n.Value.Version) - orderby x descending - select n).Skip(1).ToArray(); - - foreach (var f in obsolete) - try { System.IO.Directory.Delete(f.Key, true); } - catch { } - - return true; - } - else - { - throw new Exception(string.Format("Unable to verify unpacked folder for url: {0}", url)); - } + { + Action cb = null; + if (progress != null) + cb = (s) => { progress(Math.Min(1.0, Math.Max(0.0, (double)s / version.CompressedSize))); }; + + var wreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); + wreq.UserAgent = string.Format("{0} v{1}", APPNAME, SelfVersion.Version); + wreq.Headers.Add("X-Install-ID", InstallID); + + var areq = new Duplicati.Library.Utility.AsyncHttpRequest(wreq); + using (var resp = areq.GetResponse()) + using (var rss = areq.GetResponseStream()) + using (var pgs = new Duplicati.Library.Utility.ProgressReportingStream(rss, version.CompressedSize, cb)) + { + Duplicati.Library.Utility.Utility.CopyStream(pgs, tempfile); + } + + var sha256 = System.Security.Cryptography.SHA256.Create(); + var md5 = System.Security.Cryptography.MD5.Create(); + + if (tempfile.Length != version.CompressedSize) + throw new Exception(string.Format("Invalid file size {0}, expected {1} for {2}", tempfile.Length, version.CompressedSize, url)); + + tempfile.Position = 0; + var sha256hash = Convert.ToBase64String(sha256.ComputeHash(tempfile)); + if (sha256hash != version.SHA256) + throw new Exception(string.Format("Damaged or corrupted file, sha256 mismatch for {0}", url)); + + + tempfile.Position = 0; + var md5hash = Convert.ToBase64String(md5.ComputeHash(tempfile)); + if (md5hash != version.MD5) + throw new Exception(string.Format("Damaged or corrupted file, md5 mismatch for {0}", url)); + + tempfile.Position = 0; + using (var tempfolder = new Duplicati.Library.Utility.TempFolder()) + using (ICompression zip = new Duplicati.Library.Compression.FileArchiveZip(tempfile, ArchiveMode.Read, new Dictionary())) + { + foreach (var file in zip.ListFilesWithSize("")) + { + if (System.IO.Path.IsPathRooted(file.Key) || file.Key.Trim().StartsWith("..", StringComparison.OrdinalIgnoreCase)) + throw new Exception(string.Format("Out-of-place file path detected: {0}", file.Key)); + + var targetpath = System.IO.Path.Combine(tempfolder, file.Key); + var targetfolder = System.IO.Path.GetDirectoryName(targetpath); + if (!System.IO.Directory.Exists(targetfolder)) + System.IO.Directory.CreateDirectory(targetfolder); + + using (var zs = zip.OpenRead(file.Key)) + using (var fs = System.IO.File.Create(targetpath)) + zs.CopyTo(fs); + } + + if (VerifyUnpackedFolder(tempfolder, version)) + { + var versionstring = TryParseVersion(version.Version).ToString(); + var targetfolder = System.IO.Path.Combine(INSTALLDIR, versionstring); + if (System.IO.Directory.Exists(targetfolder)) + System.IO.Directory.Delete(targetfolder, true); + + System.IO.Directory.CreateDirectory(targetfolder); + + var tempfolderpath = Duplicati.Library.Utility.Utility.AppendDirSeparator(tempfolder); + var tempfolderlength = tempfolderpath.Length; + + // Would be nice, but does not work :( + //System.IO.Directory.Move(tempfolder, targetfolder); + + foreach (var e in Duplicati.Library.Utility.Utility.EnumerateFileSystemEntries(tempfolder)) + { + var relpath = e.Substring(tempfolderlength); + if (string.IsNullOrWhiteSpace(relpath)) + continue; + + var fullpath = System.IO.Path.Combine(targetfolder, relpath); + if (relpath.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) + System.IO.Directory.CreateDirectory(fullpath); + else + System.IO.File.Copy(e, fullpath); + } + + // Verification will kick in when we list the installed updates + //VerifyUnpackedFolder(targetfolder, version); + System.IO.File.WriteAllText(System.IO.Path.Combine(INSTALLDIR, CURRENT_FILE), versionstring); + + m_hasUpdateInstalled = null; + + var obsolete = (from n in FindInstalledVersions() + where n.Value.Version != version.Version && n.Value.Version != SelfVersion.Version + let x = TryParseVersion(n.Value.Version) + orderby x descending + select n).Skip(1).ToArray(); + + foreach (var f in obsolete) + try { System.IO.Directory.Delete(f.Key, true); } + catch { } + + return true; + } + else + { + throw new Exception(string.Format("Unable to verify unpacked folder for url: {0}", url)); + } } } } @@ -1035,7 +1035,8 @@ namespace Duplicati.Library.AutoUpdater m_hasUpdateInstalled = null; // Check if there are updates installed, otherwise use current - KeyValuePair best = new KeyValuePair(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, SelfVersion); + KeyValuePair best = new KeyValuePair(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), SelfVersion); + if (HasUpdateInstalled) best = m_hasUpdateInstalled.Value; @@ -1066,9 +1067,6 @@ namespace Duplicati.Library.AutoUpdater public static int RunFromMostRecent(System.Reflection.MethodInfo method, string[] cmdargs, AutoUpdateStrategy defaultstrategy = AutoUpdateStrategy.CheckDuring) { - if (Library.Utility.Utility.ParseBool(Environment.GetEnvironmentVariable("AUTOUPDATER_USE_APPDOMAIN"), false)) - return RunFromMostRecentAppDomain(method, cmdargs, defaultstrategy); - else return RunFromMostRecentSpawn(method, cmdargs, defaultstrategy); } @@ -1136,133 +1134,6 @@ namespace Duplicati.Library.AutoUpdater } } - - public static int RunFromMostRecentAppDomain(System.Reflection.MethodInfo method, string[] cmdargs, AutoUpdateStrategy defaultstrategy = AutoUpdateStrategy.CheckDuring) - { - // If the update is disabled, go straight in - if (DISABLE_UPDATE_DOMAIN) - return RunMethod(method, cmdargs); - - // If we are not the primary domain, just execute - if (!AppDomain.CurrentDomain.IsDefaultAppDomain()) - { - int r = 0; - WrapWithUpdater(defaultstrategy, () => { - r = RunMethod(method, cmdargs); - }); - - return r; - } - - // If we are a re-launch, wait briefly for the other process to exit - var sleepmarker = System.Environment.GetEnvironmentVariable(string.Format(SLEEP_ENVNAME_TEMPLATE, APPNAME)); - if (!string.IsNullOrWhiteSpace(sleepmarker)) - { - System.Environment.SetEnvironmentVariable(string.Format(SLEEP_ENVNAME_TEMPLATE, APPNAME), null); - System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10)); - } - - // Check if there are updates installed, otherwise use current - KeyValuePair best = new KeyValuePair(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, SelfVersion); - if (HasUpdateInstalled) - best = m_hasUpdateInstalled.Value; - - if (INSTALLDIR != null && System.IO.File.Exists(System.IO.Path.Combine(INSTALLDIR, CURRENT_FILE))) - { - try - { - var current = System.IO.File.ReadAllText(System.IO.Path.Combine(INSTALLDIR, CURRENT_FILE)).Trim(); - if (!string.IsNullOrWhiteSpace(current)) - { - var targetfolder = System.IO.Path.Combine(INSTALLDIR, current); - var currentmanifest = ReadInstalledManifest(targetfolder); - if (currentmanifest != null && TryParseVersion(currentmanifest.Version) > TryParseVersion(best.Value.Version) && VerifyUnpackedFolder(targetfolder, currentmanifest)) - best = new KeyValuePair(targetfolder, currentmanifest); - } - } - catch (Exception ex) - { - if (OnError != null) - OnError(ex); - } - } - - Environment.SetEnvironmentVariable(string.Format(BASEINSTALLDIR_ENVNAME_TEMPLATE, APPNAME), InstalledBaseDir); - - var folder = best.Key; - - // Basic idea with the loop is that the running AppDomain can use - // RUN_UPDATED_ENVNAME_TEMPLATE to signal that a new version is ready - // when the caller exits, the new update is executed - // - // This allows more or less seamless updates - // - - int result = 0; - while (!string.IsNullOrWhiteSpace(folder) && System.IO.Directory.Exists(folder)) - { - var prevfolder = folder; - // Create the new domain - var domain = AppDomain.CreateDomain( - "UpdateDomain", - null, - folder, - "", - false - ); - - domain.SetData("LOCALIZATION_FOLDER", InstalledBaseDir); - - result = domain.ExecuteAssemblyByName(method.DeclaringType.Assembly.GetName().Name, cmdargs); - - folder = (string)domain.GetData(RUN_UPDATED_FOLDER_PATH); - - try { AppDomain.Unload(domain); } - catch (Exception ex) - { - Console.WriteLine("Appdomain unload error: {0}", ex); - } - - if (!string.IsNullOrWhiteSpace(folder)) - { - if (!VerifyUnpackedFolder(folder)) - folder = prevfolder; //Go back and run the previous version - else if (RequiresRespawn) - { - // We have a valid update, and the current instance is terminated. - // But due to external libraries, we need to re-spawn the original process - - try - { - var app = Environment.GetCommandLineArgs().First(); - var args = Library.Utility.Utility.WrapAsCommandLine(Environment.GetCommandLineArgs().Skip(1), false); - - if (!System.IO.Path.IsPathRooted(app)) - app = System.IO.Path.Combine(InstalledBaseDir, app); - - - // Re-launch but give the OS a little time to fully unload all open handles, etc. - var si = new System.Diagnostics.ProcessStartInfo(app, args); - si.UseShellExecute = false; - si.EnvironmentVariables.Add(string.Format(SLEEP_ENVNAME_TEMPLATE, APPNAME), "1"); - - System.Diagnostics.Process.Start(si); - - return 0; - } - catch (Exception ex) - { - if (OnError != null) - OnError(ex); - folder = prevfolder; - } - } - } - } - - return result; - } - } } diff --git a/Duplicati/Library/AutoUpdater/packages.config b/Duplicati/Library/AutoUpdater/packages.config deleted file mode 100644 index ee51c2373..000000000 --- a/Duplicati/Library/AutoUpdater/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Duplicati/Library/Backend/AlternativeFTP/Duplicati.Library.Backend.AlternativeFTP.csproj b/Duplicati/Library/Backend/AlternativeFTP/Duplicati.Library.Backend.AlternativeFTP.csproj index 2edbccc16..5f0bda4bd 100644 --- a/Duplicati/Library/Backend/AlternativeFTP/Duplicati.Library.Backend.AlternativeFTP.csproj +++ b/Duplicati/Library/Backend/AlternativeFTP/Duplicati.Library.Backend.AlternativeFTP.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk @@ -11,6 +11,8 @@ Duplicati Team An alternative FTP backend for Duplicati AlternativeFTP + Duplicati.Backend.AlternativeFTP + Duplicati.Backend.AlternativeFTP diff --git a/Duplicati/Library/Backend/AmazonCloudDrive/Duplicati.Library.Backend.AmazonCloudDrive.csproj b/Duplicati/Library/Backend/AmazonCloudDrive/Duplicati.Library.Backend.AmazonCloudDrive.csproj index 002c8b4be..56cecb784 100644 --- a/Duplicati/Library/Backend/AmazonCloudDrive/Duplicati.Library.Backend.AmazonCloudDrive.csproj +++ b/Duplicati/Library/Backend/AmazonCloudDrive/Duplicati.Library.Backend.AmazonCloudDrive.csproj @@ -2,7 +2,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/AzureBlob/Duplicati.Library.Backend.AzureBlob.csproj b/Duplicati/Library/Backend/AzureBlob/Duplicati.Library.Backend.AzureBlob.csproj index 4e7636344..065c4ac44 100644 --- a/Duplicati/Library/Backend/AzureBlob/Duplicati.Library.Backend.AzureBlob.csproj +++ b/Duplicati/Library/Backend/AzureBlob/Duplicati.Library.Backend.AzureBlob.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/Backblaze/Duplicati.Library.Backend.Backblaze.csproj b/Duplicati/Library/Backend/Backblaze/Duplicati.Library.Backend.Backblaze.csproj index 7bb661a68..5242801e0 100644 --- a/Duplicati/Library/Backend/Backblaze/Duplicati.Library.Backend.Backblaze.csproj +++ b/Duplicati/Library/Backend/Backblaze/Duplicati.Library.Backend.Backblaze.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/Box/Duplicati.Library.Backend.Box.csproj b/Duplicati/Library/Backend/Box/Duplicati.Library.Backend.Box.csproj index 26033863d..ea7d943b9 100644 --- a/Duplicati/Library/Backend/Box/Duplicati.Library.Backend.Box.csproj +++ b/Duplicati/Library/Backend/Box/Duplicati.Library.Backend.Box.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/CloudFiles/Duplicati.Library.Backend.CloudFiles.csproj b/Duplicati/Library/Backend/CloudFiles/Duplicati.Library.Backend.CloudFiles.csproj index 6d3845eb7..b548fd3de 100644 --- a/Duplicati/Library/Backend/CloudFiles/Duplicati.Library.Backend.CloudFiles.csproj +++ b/Duplicati/Library/Backend/CloudFiles/Duplicati.Library.Backend.CloudFiles.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/Dropbox/Duplicati.Library.Backend.Dropbox.csproj b/Duplicati/Library/Backend/Dropbox/Duplicati.Library.Backend.Dropbox.csproj index aec236659..f726e4a11 100644 --- a/Duplicati/Library/Backend/Dropbox/Duplicati.Library.Backend.Dropbox.csproj +++ b/Duplicati/Library/Backend/Dropbox/Duplicati.Library.Backend.Dropbox.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/FTP/Duplicati.Library.Backend.FTP.csproj b/Duplicati/Library/Backend/FTP/Duplicati.Library.Backend.FTP.csproj index e8de7fca2..d76f61c3c 100644 --- a/Duplicati/Library/Backend/FTP/Duplicati.Library.Backend.FTP.csproj +++ b/Duplicati/Library/Backend/FTP/Duplicati.Library.Backend.FTP.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/File/Duplicati.Library.Backend.File.csproj b/Duplicati/Library/Backend/File/Duplicati.Library.Backend.File.csproj index 6ed240c43..ad601dc49 100644 --- a/Duplicati/Library/Backend/File/Duplicati.Library.Backend.File.csproj +++ b/Duplicati/Library/Backend/File/Duplicati.Library.Backend.File.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/GoogleServices/Duplicati.Library.Backend.GoogleServices.csproj b/Duplicati/Library/Backend/GoogleServices/Duplicati.Library.Backend.GoogleServices.csproj index 80b56f904..3c3f9b4b3 100644 --- a/Duplicati/Library/Backend/GoogleServices/Duplicati.Library.Backend.GoogleServices.csproj +++ b/Duplicati/Library/Backend/GoogleServices/Duplicati.Library.Backend.GoogleServices.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/HubiC/Duplicati.Library.Backend.HubiC.csproj b/Duplicati/Library/Backend/HubiC/Duplicati.Library.Backend.HubiC.csproj index 4270c70b1..9c559df4f 100644 --- a/Duplicati/Library/Backend/HubiC/Duplicati.Library.Backend.HubiC.csproj +++ b/Duplicati/Library/Backend/HubiC/Duplicati.Library.Backend.HubiC.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/Jottacloud/Duplicati.Library.Backend.Jottacloud.csproj b/Duplicati/Library/Backend/Jottacloud/Duplicati.Library.Backend.Jottacloud.csproj index 53d69beb9..a6da09f96 100644 --- a/Duplicati/Library/Backend/Jottacloud/Duplicati.Library.Backend.Jottacloud.csproj +++ b/Duplicati/Library/Backend/Jottacloud/Duplicati.Library.Backend.Jottacloud.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/Mega/Duplicati.Library.Backend.Mega.csproj b/Duplicati/Library/Backend/Mega/Duplicati.Library.Backend.Mega.csproj index c76f1ba99..096c0bc0f 100644 --- a/Duplicati/Library/Backend/Mega/Duplicati.Library.Backend.Mega.csproj +++ b/Duplicati/Library/Backend/Mega/Duplicati.Library.Backend.Mega.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/OAuthHelper/Duplicati.Library.OAuthHelper.csproj b/Duplicati/Library/Backend/OAuthHelper/Duplicati.Library.OAuthHelper.csproj index 4b06cb045..857c371b0 100644 --- a/Duplicati/Library/Backend/OAuthHelper/Duplicati.Library.OAuthHelper.csproj +++ b/Duplicati/Library/Backend/OAuthHelper/Duplicati.Library.OAuthHelper.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/OneDrive/Duplicati.Library.Backend.OneDrive.csproj b/Duplicati/Library/Backend/OneDrive/Duplicati.Library.Backend.OneDrive.csproj index 852753fad..8bda9f48a 100644 --- a/Duplicati/Library/Backend/OneDrive/Duplicati.Library.Backend.OneDrive.csproj +++ b/Duplicati/Library/Backend/OneDrive/Duplicati.Library.Backend.OneDrive.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/OpenStack/Duplicati.Library.Backend.OpenStack.csproj b/Duplicati/Library/Backend/OpenStack/Duplicati.Library.Backend.OpenStack.csproj index f1b936f00..6cee26059 100644 --- a/Duplicati/Library/Backend/OpenStack/Duplicati.Library.Backend.OpenStack.csproj +++ b/Duplicati/Library/Backend/OpenStack/Duplicati.Library.Backend.OpenStack.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/Rclone/Duplicati.Library.Backend.Rclone.csproj b/Duplicati/Library/Backend/Rclone/Duplicati.Library.Backend.Rclone.csproj index 3a471eb61..dd8bfe2d3 100644 --- a/Duplicati/Library/Backend/Rclone/Duplicati.Library.Backend.Rclone.csproj +++ b/Duplicati/Library/Backend/Rclone/Duplicati.Library.Backend.Rclone.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/S3/Duplicati.Library.Backend.S3.csproj b/Duplicati/Library/Backend/S3/Duplicati.Library.Backend.S3.csproj index 7c2568eee..a64941325 100644 --- a/Duplicati/Library/Backend/S3/Duplicati.Library.Backend.S3.csproj +++ b/Duplicati/Library/Backend/S3/Duplicati.Library.Backend.S3.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/SSHv2/Duplicati.Library.Backend.SSHv2.csproj b/Duplicati/Library/Backend/SSHv2/Duplicati.Library.Backend.SSHv2.csproj index e0309e806..d0bc97259 100644 --- a/Duplicati/Library/Backend/SSHv2/Duplicati.Library.Backend.SSHv2.csproj +++ b/Duplicati/Library/Backend/SSHv2/Duplicati.Library.Backend.SSHv2.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/SharePoint/Duplicati.Library.Backend.SharePoint.csproj b/Duplicati/Library/Backend/SharePoint/Duplicati.Library.Backend.SharePoint.csproj index 3f7c8fc82..aa277f0a7 100644 --- a/Duplicati/Library/Backend/SharePoint/Duplicati.Library.Backend.SharePoint.csproj +++ b/Duplicati/Library/Backend/SharePoint/Duplicati.Library.Backend.SharePoint.csproj @@ -1,7 +1,7 @@  - net45 + net462 2.0.0.7 true Duplicati.snk @@ -17,7 +17,7 @@ - + diff --git a/Duplicati/Library/Backend/Sia/Duplicati.Library.Backend.Sia.csproj b/Duplicati/Library/Backend/Sia/Duplicati.Library.Backend.Sia.csproj index 73ee68db7..facffe5b9 100644 --- a/Duplicati/Library/Backend/Sia/Duplicati.Library.Backend.Sia.csproj +++ b/Duplicati/Library/Backend/Sia/Duplicati.Library.Backend.Sia.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/TahoeLAFS/Duplicati.Library.Backend.TahoeLAFS.csproj b/Duplicati/Library/Backend/TahoeLAFS/Duplicati.Library.Backend.TahoeLAFS.csproj index 8a90a381f..837b69fc8 100644 --- a/Duplicati/Library/Backend/TahoeLAFS/Duplicati.Library.Backend.TahoeLAFS.csproj +++ b/Duplicati/Library/Backend/TahoeLAFS/Duplicati.Library.Backend.TahoeLAFS.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Backend/WEBDAV/Duplicati.Library.Backend.WEBDAV.csproj b/Duplicati/Library/Backend/WEBDAV/Duplicati.Library.Backend.WEBDAV.csproj index 02091ed51..3a801b162 100644 --- a/Duplicati/Library/Backend/WEBDAV/Duplicati.Library.Backend.WEBDAV.csproj +++ b/Duplicati/Library/Backend/WEBDAV/Duplicati.Library.Backend.WEBDAV.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Compression/Duplicati.Library.Compression.csproj b/Duplicati/Library/Compression/Duplicati.Library.Compression.csproj index 86ae3443e..5272c206f 100644 --- a/Duplicati/Library/Compression/Duplicati.Library.Compression.csproj +++ b/Duplicati/Library/Compression/Duplicati.Library.Compression.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/DynamicLoader/Duplicati.Library.DynamicLoader.csproj b/Duplicati/Library/DynamicLoader/Duplicati.Library.DynamicLoader.csproj index 7624b1424..1253a98c5 100644 --- a/Duplicati/Library/DynamicLoader/Duplicati.Library.DynamicLoader.csproj +++ b/Duplicati/Library/DynamicLoader/Duplicati.Library.DynamicLoader.csproj @@ -12,7 +12,7 @@ 3.5 - v4.5 + v4.6.2 diff --git a/Duplicati/Library/Encryption/Duplicati.Library.Encryption.csproj b/Duplicati/Library/Encryption/Duplicati.Library.Encryption.csproj index 82439179a..bc60c1df1 100644 --- a/Duplicati/Library/Encryption/Duplicati.Library.Encryption.csproj +++ b/Duplicati/Library/Encryption/Duplicati.Library.Encryption.csproj @@ -12,7 +12,7 @@ 3.5 - v4.5 + v4.6.2 diff --git a/Duplicati/Library/Interface/Duplicati.Library.Interface.csproj b/Duplicati/Library/Interface/Duplicati.Library.Interface.csproj index 6a50ae3ef..005bc81c7 100644 --- a/Duplicati/Library/Interface/Duplicati.Library.Interface.csproj +++ b/Duplicati/Library/Interface/Duplicati.Library.Interface.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Localization/Duplicati.Library.Localization.csproj b/Duplicati/Library/Localization/Duplicati.Library.Localization.csproj index 81d79a927..43d12e342 100644 --- a/Duplicati/Library/Localization/Duplicati.Library.Localization.csproj +++ b/Duplicati/Library/Localization/Duplicati.Library.Localization.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net45 + netstandard2.0 2.0.0.7 true Duplicati.snk diff --git a/Duplicati/Library/Logging/Duplicati.Library.Logging.csproj b/Duplicati/Library/Logging/Duplicati.Library.Logging.csproj index 512a87951..04fc4bcb4 100644 --- a/Duplicati/Library/Logging/Duplicati.Library.Logging.csproj +++ b/Duplicati/Library/Logging/Duplicati.Library.Logging.csproj @@ -12,7 +12,7 @@ 3.5 - v4.5 + v4.6.2 diff --git a/Duplicati/Library/Main/Duplicati.Library.Main.csproj b/Duplicati/Library/Main/Duplicati.Library.Main.csproj index 657f584aa..3b7deddb8 100644 --- a/Duplicati/Library/Main/Duplicati.Library.Main.csproj +++ b/Duplicati/Library/Main/Duplicati.Library.Main.csproj @@ -12,7 +12,7 @@ 3.5 - v4.5 + v4.6.2 diff --git a/Duplicati/Library/Modules/Builtin/Duplicati.Library.Modules.Builtin.csproj b/Duplicati/Library/Modules/Builtin/Duplicati.Library.Modules.Builtin.csproj index a23687eed..4ebcae093 100644 --- a/Duplicati/Library/Modules/Builtin/Duplicati.Library.Modules.Builtin.csproj +++ b/Duplicati/Library/Modules/Builtin/Duplicati.Library.Modules.Builtin.csproj @@ -14,7 +14,7 @@ 3.5 - v4.5 + v4.6.2 false diff --git a/Duplicati/Library/SQLiteHelper/Duplicati.Library.SQLiteHelper.csproj b/Duplicati/Library/SQLiteHelper/Duplicati.Library.SQLiteHelper.csproj index f6f01f7d9..a1824b73b 100644 --- a/Duplicati/Library/SQLiteHelper/Duplicati.Library.SQLiteHelper.csproj +++ b/Duplicati/Library/SQLiteHelper/Duplicati.Library.SQLiteHelper.csproj @@ -8,7 +8,7 @@ Duplicati.Library.SQLiteHelper SQLiteHelper ..\..\GUI\Duplicati.GUI.TrayIcon\Duplicati.snk - v4.5 + v4.6.2 false diff --git a/Duplicati/Library/Snapshots/Duplicati.Library.Snapshots.csproj b/Duplicati/Library/Snapshots/Duplicati.Library.Snapshots.csproj index c8aeceac0..b23fb672f 100644 --- a/Duplicati/Library/Snapshots/Duplicati.Library.Snapshots.csproj +++ b/Duplicati/Library/Snapshots/Duplicati.Library.Snapshots.csproj @@ -15,7 +15,7 @@ 3.5 - v4.5 + v4.6.2 false diff --git a/Duplicati/Library/UsageReporter/Duplicati.Library.UsageReporter.csproj b/Duplicati/Library/UsageReporter/Duplicati.Library.UsageReporter.csproj index b00614bad..b1ee90b19 100644 --- a/Duplicati/Library/UsageReporter/Duplicati.Library.UsageReporter.csproj +++ b/Duplicati/Library/UsageReporter/Duplicati.Library.UsageReporter.csproj @@ -7,7 +7,7 @@ Library Duplicati.Library.UsageReporter Duplicati.Library.UsageReporter - v4.5 + v4.6.2 Duplicati.snk false diff --git a/Duplicati/Library/Utility/Duplicati.Library.Utility.csproj b/Duplicati/Library/Utility/Duplicati.Library.Utility.csproj index 5ed6a76b1..a9f019889 100644 --- a/Duplicati/Library/Utility/Duplicati.Library.Utility.csproj +++ b/Duplicati/Library/Utility/Duplicati.Library.Utility.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -12,7 +12,7 @@ 3.5 - v4.5 + v4.6.2 @@ -35,6 +35,9 @@ prompt 4 + + true + diff --git a/Duplicati/License/Duplicati.License.csproj b/Duplicati/License/Duplicati.License.csproj index 58e85d010..ed5b000f4 100644 --- a/Duplicati/License/Duplicati.License.csproj +++ b/Duplicati/License/Duplicati.License.csproj @@ -14,7 +14,7 @@ 3.5 - v4.5 + v4.6.2 false @@ -37,6 +37,9 @@ 4 false + + true +