diff --git a/.editorconfig b/.editorconfig
index 8b11b7e73cf..e056e378136 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -12,7 +12,7 @@ insert_final_newline = true
charset = utf-8-bom
# XML project files
-[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj,wixproj,msbuildproj}]
+[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj,wixproj,ikvmproj}]
indent_size = 2
# XML config files
diff --git a/Cyberduck.sln b/Cyberduck.sln
index a7a00c5df4f..432b0e0c6a6 100644
--- a/Cyberduck.sln
+++ b/Cyberduck.sln
@@ -1,67 +1,67 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.0.31825.309
+# Visual Studio Version 18
+VisualStudioVersion = 18.2.11415.280
MinimumVisualStudioVersion = 15.0.26124.0
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core.Native", "core\src\main\csharp\Cyberduck.Core.Native.csproj", "{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Bonjour.Native", "bonjour\src\main\csharp\Cyberduck.Bonjour.Native.csproj", "{1926AB55-690C-4081-99D5-170847C206D9}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core.Test", "core\src\test\csharp\Cyberduck.Core.Test.csproj", "{581C7683-D22D-4346-B3BF-DC2936231C46}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "duck", "cli\src\main\csharp\duck.csproj", "{2287E64E-3515-4324-9833-553348295C15}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8B08EF96-10D6-4F35-94C1-986F9F0F1506}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libs", "libs", "{72B4BA09-65D8-4C49-930E-B14104B2AB1B}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck", "windows\src\main\csharp\Cyberduck.csproj", "{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Test", "windows\src\test\csharp\Cyberduck.Test.csproj", "{B5565834-1164-4858-AF50-AE89CFC9BDD2}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "installer", "installer", "{0DF59FB4-AEA9-4213-A935-6DB851411B67}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "duck", "duck", "{457F1D6D-8AEC-42E2-9211-2A8405C95019}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cyberduck", "Cyberduck", "{7D32EE61-B6F0-4978-B500-45172B181283}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WindowsVersionCustomAction", "windows\src\main\wix\WindowsVersionCustomAction\WindowsVersionCustomAction.vcxproj", "{FBA5EFE2-362B-4BAD-A748-3248F79468AC}"
-EndProject
-Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Cyberduck.Bootstrapper", "windows\src\main\wix\Bootstrapper\Cyberduck.Bootstrapper.wixproj", "{00858CE5-437F-46BE-8A2E-519B552DBF7D}"
-EndProject
-Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Cyberduck.Bundle", "windows\src\main\wix\Bundle\Cyberduck.Bundle.wixproj", "{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}"
-EndProject
-Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "duck.bootstrapper", "cli\src\main\wix\Bootstrapper\duck.bootstrapper.wixproj", "{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}"
-EndProject
-Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "duck.bundle", "cli\src\main\wix\Bundle\duck.bundle.wixproj", "{F6975079-F730-4A31-9909-DE536E524764}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core.Refresh", "core\native\refresh\src\main\csharp\Cyberduck.Core.Refresh.csproj", "{D1286C4A-9D6A-4904-B9AD-CB7688483EDB}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B9726AB9-4100-4499-A9CF-78167CC27024}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
Directory.Build.props = Directory.Build.props
Directory.Build.targets = Directory.Build.targets
+ Directory.Packages.props = Directory.Packages.props
global.json = global.json
- Packages.props = Packages.props
EndProjectSection
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core.Native", "core\src\main\csharp\Cyberduck.Core.Native.csproj", "{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Bonjour.Native", "bonjour\src\main\csharp\Cyberduck.Bonjour.Native.csproj", "{1926AB55-690C-4081-99D5-170847C206D9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core.Test", "core\src\test\csharp\Cyberduck.Core.Test.csproj", "{581C7683-D22D-4346-B3BF-DC2936231C46}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "duck", "cli\src\main\csharp\duck.csproj", "{2287E64E-3515-4324-9833-553348295C15}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck", "windows\src\main\csharp\Cyberduck.csproj", "{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Test", "windows\src\test\csharp\Cyberduck.Test.csproj", "{B5565834-1164-4858-AF50-AE89CFC9BDD2}"
+EndProject
+Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "Cyberduck.Bootstrapper", "windows\src\main\wix\Bootstrapper\Cyberduck.Bootstrapper.wixproj", "{00858CE5-437F-46BE-8A2E-519B552DBF7D}"
+EndProject
+Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "Cyberduck.Bundle", "windows\src\main\wix\Bundle\Cyberduck.Bundle.wixproj", "{65AB4CE3-5AF4-411A-928C-7FFD250C6D85}"
+EndProject
+Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "duck.bootstrapper", "cli\src\main\wix\Bootstrapper\duck.bootstrapper.wixproj", "{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}"
+EndProject
+Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "duck.bundle", "cli\src\main\wix\Bundle\duck.bundle.wixproj", "{F6975079-F730-4A31-9909-DE536E524764}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core.Refresh", "core\native\refresh\src\main\csharp\Cyberduck.Core.Refresh.csproj", "{D1286C4A-9D6A-4904-B9AD-CB7688483EDB}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "i18n-gen", "core\i18n-gen\i18n-gen.csproj", "{ABB0D3AD-BCDA-4F73-88C3-C67B76AAB6FE}"
EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "package", "windows\src\main\package\package.wapproj", "{55CDD736-9A8A-4091-AC99-60E2F9C73269}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Core", "core\dll\Cyberduck.Core.msbuildproj", "{1B4DFDAD-C676-4338-B435-F2F62D79E096}"
+Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Core", "core\dll\Cyberduck.Core.ikvmproj", "{1B4DFDAD-C676-4338-B435-F2F62D79E096}"
+EndProject
+Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Bonjour", "bonjour\dll\Cyberduck.Bonjour.ikvmproj", "{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Bonjour", "bonjour\dll\Cyberduck.Bonjour.msbuildproj", "{B31E6C36-D710-443F-8ED7-16BE3BD51FC4}"
+Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Importer", "importer\dll\Cyberduck.Importer.ikvmproj", "{C9B1C169-1354-4348-9938-7892399C6336}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Importer", "importer\dll\Cyberduck.Importer.msbuildproj", "{C9B1C169-1354-4348-9938-7892399C6336}"
+Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Protocols", "protocols\dll\Cyberduck.Protocols.ikvmproj", "{9C7B827F-AE30-44C4-A210-E49DF883C720}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Protocols", "protocols\dll\Cyberduck.Protocols.msbuildproj", "{9C7B827F-AE30-44C4-A210-E49DF883C720}"
+Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Cryptomator", "cryptomator\dll\Cyberduck.Cryptomator.ikvmproj", "{7EFC0398-8F4D-4850-BBE3-A0CC85410559}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Cryptomator", "cryptomator\dll\Cyberduck.Cryptomator.msbuildproj", "{7EFC0398-8F4D-4850-BBE3-A0CC85410559}"
+Project("{DAEA77DE-8320-43BA-BA7C-EF5C12478AB5}") = "Cyberduck.Cli", "cli\dll\Cyberduck.Cli.ikvmproj", "{2D33598A-21A1-4117-82DC-250F4CE8D5E5}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cyberduck.Cli", "cli\dll\Cyberduck.Cli.msbuildproj", "{2D33598A-21A1-4117-82DC-250F4CE8D5E5}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "test-utils", "windows\src\test\utils\test-utils.csproj", "{BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -69,18 +69,6 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {1B4DFDAD-C676-4338-B435-F2F62D79E096}.Debug|x64.ActiveCfg = Debug|Any CPU
- {1B4DFDAD-C676-4338-B435-F2F62D79E096}.Debug|x64.Build.0 = Debug|Any CPU
- {1B4DFDAD-C676-4338-B435-F2F62D79E096}.Release|x64.ActiveCfg = Release|Any CPU
- {1B4DFDAD-C676-4338-B435-F2F62D79E096}.Release|x64.Build.0 = Release|Any CPU
- {2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Debug|x64.ActiveCfg = Debug|Any CPU
- {2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Debug|x64.Build.0 = Debug|Any CPU
- {2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Release|x64.ActiveCfg = Release|Any CPU
- {2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Release|x64.Build.0 = Release|Any CPU
- {7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Debug|x64.ActiveCfg = Debug|Any CPU
- {7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Debug|x64.Build.0 = Debug|Any CPU
- {7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Release|x64.ActiveCfg = Release|Any CPU
- {7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Release|x64.Build.0 = Release|Any CPU
{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766}.Debug|x64.ActiveCfg = Debug|x64
{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766}.Debug|x64.Build.0 = Debug|x64
{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766}.Release|x64.ActiveCfg = Release|x64
@@ -101,42 +89,22 @@ Global
{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Debug|x64.Build.0 = Debug|x64
{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|x64.ActiveCfg = Release|x64
{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}.Release|x64.Build.0 = Release|x64
- {9C7B827F-AE30-44C4-A210-E49DF883C720}.Debug|x64.ActiveCfg = Debug|Any CPU
- {9C7B827F-AE30-44C4-A210-E49DF883C720}.Debug|x64.Build.0 = Debug|Any CPU
- {9C7B827F-AE30-44C4-A210-E49DF883C720}.Release|x64.ActiveCfg = Release|Any CPU
- {9C7B827F-AE30-44C4-A210-E49DF883C720}.Release|x64.Build.0 = Release|Any CPU
- {B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Debug|x64.ActiveCfg = Debug|Any CPU
- {B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Debug|x64.Build.0 = Debug|Any CPU
- {B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Release|x64.ActiveCfg = Release|Any CPU
- {B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Release|x64.Build.0 = Release|Any CPU
{B5565834-1164-4858-AF50-AE89CFC9BDD2}.Debug|x64.ActiveCfg = Debug|x64
{B5565834-1164-4858-AF50-AE89CFC9BDD2}.Debug|x64.Build.0 = Debug|x64
{B5565834-1164-4858-AF50-AE89CFC9BDD2}.Release|x64.ActiveCfg = Release|x64
{B5565834-1164-4858-AF50-AE89CFC9BDD2}.Release|x64.Build.0 = Release|x64
- {C9B1C169-1354-4348-9938-7892399C6336}.Debug|x64.ActiveCfg = Debug|Any CPU
- {C9B1C169-1354-4348-9938-7892399C6336}.Debug|x64.Build.0 = Debug|Any CPU
- {C9B1C169-1354-4348-9938-7892399C6336}.Release|x64.ActiveCfg = Release|Any CPU
- {C9B1C169-1354-4348-9938-7892399C6336}.Release|x64.Build.0 = Release|Any CPU
- {FBA5EFE2-362B-4BAD-A748-3248F79468AC}.Debug|x64.ActiveCfg = Debug|Win32
- {FBA5EFE2-362B-4BAD-A748-3248F79468AC}.Debug|x64.Build.0 = Debug|Win32
- {FBA5EFE2-362B-4BAD-A748-3248F79468AC}.Release|x64.ActiveCfg = Release|Win32
- {FBA5EFE2-362B-4BAD-A748-3248F79468AC}.Release|x64.Build.0 = Release|Win32
- {00858CE5-437F-46BE-8A2E-519B552DBF7D}.Debug|x64.ActiveCfg = Debug|x86
- {00858CE5-437F-46BE-8A2E-519B552DBF7D}.Debug|x64.Build.0 = Debug|x86
- {00858CE5-437F-46BE-8A2E-519B552DBF7D}.Release|x64.ActiveCfg = Release|x86
- {00858CE5-437F-46BE-8A2E-519B552DBF7D}.Release|x64.Build.0 = Release|x86
- {65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Debug|x64.ActiveCfg = Debug|x86
- {65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Debug|x64.Build.0 = Debug|x86
- {65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Release|x64.ActiveCfg = Release|x86
- {65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Release|x64.Build.0 = Release|x86
- {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x64.ActiveCfg = Debug|x86
- {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x64.Build.0 = Debug|x86
- {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x64.ActiveCfg = Release|x86
- {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x64.Build.0 = Release|x86
- {F6975079-F730-4A31-9909-DE536E524764}.Debug|x64.ActiveCfg = Debug|x86
- {F6975079-F730-4A31-9909-DE536E524764}.Debug|x64.Build.0 = Debug|x86
- {F6975079-F730-4A31-9909-DE536E524764}.Release|x64.ActiveCfg = Release|x86
- {F6975079-F730-4A31-9909-DE536E524764}.Release|x64.Build.0 = Release|x86
+ {00858CE5-437F-46BE-8A2E-519B552DBF7D}.Debug|x64.ActiveCfg = Debug|x64
+ {00858CE5-437F-46BE-8A2E-519B552DBF7D}.Debug|x64.Build.0 = Debug|x64
+ {00858CE5-437F-46BE-8A2E-519B552DBF7D}.Release|x64.ActiveCfg = Release|x64
+ {00858CE5-437F-46BE-8A2E-519B552DBF7D}.Release|x64.Build.0 = Release|x64
+ {65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Debug|x64.ActiveCfg = Debug|x64
+ {65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Debug|x64.Build.0 = Debug|x64
+ {65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Release|x64.ActiveCfg = Release|x64
+ {65AB4CE3-5AF4-411A-928C-7FFD250C6D85}.Release|x64.Build.0 = Release|x64
+ {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Debug|x64.ActiveCfg = Debug|x64
+ {EF87DE0E-BC36-4D3C-8852-C8AD11D01F04}.Release|x64.ActiveCfg = Release|x64
+ {F6975079-F730-4A31-9909-DE536E524764}.Debug|x64.ActiveCfg = Debug|x64
+ {F6975079-F730-4A31-9909-DE536E524764}.Release|x64.ActiveCfg = Release|x64
{D1286C4A-9D6A-4904-B9AD-CB7688483EDB}.Debug|x64.ActiveCfg = Debug|x64
{D1286C4A-9D6A-4904-B9AD-CB7688483EDB}.Debug|x64.Build.0 = Debug|x64
{D1286C4A-9D6A-4904-B9AD-CB7688483EDB}.Release|x64.ActiveCfg = Release|x64
@@ -151,27 +119,48 @@ Global
{55CDD736-9A8A-4091-AC99-60E2F9C73269}.Release|x64.ActiveCfg = Release|x64
{55CDD736-9A8A-4091-AC99-60E2F9C73269}.Release|x64.Build.0 = Release|x64
{55CDD736-9A8A-4091-AC99-60E2F9C73269}.Release|x64.Deploy.0 = Release|x64
+ {1B4DFDAD-C676-4338-B435-F2F62D79E096}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1B4DFDAD-C676-4338-B435-F2F62D79E096}.Debug|x64.Build.0 = Debug|Any CPU
+ {1B4DFDAD-C676-4338-B435-F2F62D79E096}.Release|x64.ActiveCfg = Release|Any CPU
+ {1B4DFDAD-C676-4338-B435-F2F62D79E096}.Release|x64.Build.0 = Release|Any CPU
+ {B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Debug|x64.Build.0 = Debug|Any CPU
+ {B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Release|x64.ActiveCfg = Release|Any CPU
+ {B31E6C36-D710-443F-8ED7-16BE3BD51FC4}.Release|x64.Build.0 = Release|Any CPU
+ {C9B1C169-1354-4348-9938-7892399C6336}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C9B1C169-1354-4348-9938-7892399C6336}.Debug|x64.Build.0 = Debug|Any CPU
+ {C9B1C169-1354-4348-9938-7892399C6336}.Release|x64.ActiveCfg = Release|Any CPU
+ {C9B1C169-1354-4348-9938-7892399C6336}.Release|x64.Build.0 = Release|Any CPU
+ {9C7B827F-AE30-44C4-A210-E49DF883C720}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9C7B827F-AE30-44C4-A210-E49DF883C720}.Debug|x64.Build.0 = Debug|Any CPU
+ {9C7B827F-AE30-44C4-A210-E49DF883C720}.Release|x64.ActiveCfg = Release|Any CPU
+ {9C7B827F-AE30-44C4-A210-E49DF883C720}.Release|x64.Build.0 = Release|Any CPU
+ {7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Debug|x64.Build.0 = Debug|Any CPU
+ {7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Release|x64.ActiveCfg = Release|Any CPU
+ {7EFC0398-8F4D-4850-BBE3-A0CC85410559}.Release|x64.Build.0 = Release|Any CPU
+ {2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Debug|x64.Build.0 = Debug|Any CPU
+ {2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Release|x64.ActiveCfg = Release|Any CPU
+ {2D33598A-21A1-4117-82DC-250F4CE8D5E5}.Release|x64.Build.0 = Release|Any CPU
+ {BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}.Debug|x64.Build.0 = Debug|Any CPU
+ {BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}.Release|x64.ActiveCfg = Release|Any CPU
+ {BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {1B4DFDAD-C676-4338-B435-F2F62D79E096} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
- {2D33598A-21A1-4117-82DC-250F4CE8D5E5} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
- {7EFC0398-8F4D-4850-BBE3-A0CC85410559} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
+ {72B4BA09-65D8-4C49-930E-B14104B2AB1B} = {3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}
+ {457F1D6D-8AEC-42E2-9211-2A8405C95019} = {0DF59FB4-AEA9-4213-A935-6DB851411B67}
+ {7D32EE61-B6F0-4978-B500-45172B181283} = {0DF59FB4-AEA9-4213-A935-6DB851411B67}
{89D94AC6-3D04-4B67-A39B-C1DEFB8A1766} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{1926AB55-690C-4081-99D5-170847C206D9} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{581C7683-D22D-4346-B3BF-DC2936231C46} = {8B08EF96-10D6-4F35-94C1-986F9F0F1506}
{2287E64E-3515-4324-9833-553348295C15} = {3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}
- {72B4BA09-65D8-4C49-930E-B14104B2AB1B} = {3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}
{04AFCFBB-97D5-44EA-B087-F0CFAEB51E30} = {3FAE38FB-24D9-4F8C-81BA-68BAD19FC81D}
- {9C7B827F-AE30-44C4-A210-E49DF883C720} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
- {B31E6C36-D710-443F-8ED7-16BE3BD51FC4} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{B5565834-1164-4858-AF50-AE89CFC9BDD2} = {8B08EF96-10D6-4F35-94C1-986F9F0F1506}
- {457F1D6D-8AEC-42E2-9211-2A8405C95019} = {0DF59FB4-AEA9-4213-A935-6DB851411B67}
- {7D32EE61-B6F0-4978-B500-45172B181283} = {0DF59FB4-AEA9-4213-A935-6DB851411B67}
- {C9B1C169-1354-4348-9938-7892399C6336} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
- {FBA5EFE2-362B-4BAD-A748-3248F79468AC} = {7D32EE61-B6F0-4978-B500-45172B181283}
{00858CE5-437F-46BE-8A2E-519B552DBF7D} = {7D32EE61-B6F0-4978-B500-45172B181283}
{65AB4CE3-5AF4-411A-928C-7FFD250C6D85} = {7D32EE61-B6F0-4978-B500-45172B181283}
{EF87DE0E-BC36-4D3C-8852-C8AD11D01F04} = {457F1D6D-8AEC-42E2-9211-2A8405C95019}
@@ -179,6 +168,13 @@ Global
{D1286C4A-9D6A-4904-B9AD-CB7688483EDB} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{ABB0D3AD-BCDA-4F73-88C3-C67B76AAB6FE} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
{55CDD736-9A8A-4091-AC99-60E2F9C73269} = {7D32EE61-B6F0-4978-B500-45172B181283}
+ {1B4DFDAD-C676-4338-B435-F2F62D79E096} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
+ {B31E6C36-D710-443F-8ED7-16BE3BD51FC4} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
+ {C9B1C169-1354-4348-9938-7892399C6336} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
+ {9C7B827F-AE30-44C4-A210-E49DF883C720} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
+ {7EFC0398-8F4D-4850-BBE3-A0CC85410559} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
+ {2D33598A-21A1-4117-82DC-250F4CE8D5E5} = {72B4BA09-65D8-4C49-930E-B14104B2AB1B}
+ {BBCC0F0C-0135-AAAB-DB32-CC4E28BC88E0} = {8B08EF96-10D6-4F35-94C1-986F9F0F1506}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {289E6003-15D5-4377-ADA6-2E7093785BCD}
diff --git a/Directory.Build.props b/Directory.Build.props
index 8ef4e8dfcfd..7cd498cbc8f 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -16,46 +16,11 @@
-
- iterate GmbH
- Libre FTP, SFTP, WebDAV, S3 and OpenStack Swift browser for Mac and Windows.
-
-
$(MSBuildThisFileDirectory)
$(CyberduckDir)src\main\msbuild\
- $(ModulePath)target\
- $(TargetBuildDir)lib\
- $(TargetBuildDir)generated\msbuild\
-
- $(TargetBuildDir)
- false
-
- $(ArtifactsPath)obj\$(MSBuildProjectName)\
- $(ArtifactsPath)
- $(BaseIntermediateOutputPath)$(Configuration)\
- $(BaseOutputPath)
-
- false
- 12
-
- false
-
-
-
-
-
-
-
-
-
-
-
- $(PATH)
-
-
-
+
-
\ No newline at end of file
+
diff --git a/Directory.Build.targets b/Directory.Build.targets
index bda255d49f3..bb8c9469a1c 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -16,124 +16,6 @@
-
-
-
- $(LibDir);$(AssemblySearchPaths)
-
-
-
- net472
- net8.0
- $(LibDir)$(LibDirFramework)\;$(AssemblySearchPaths)
-
-
-
- $(DefaultItemExcludes);**/*net472*
-
-
- $(DefaultItemExcludes);**/*net8.0*
-
-
-
-
- $(CyberduckDir)bonjour\dll\Cyberduck.Bonjour.msbuildproj
-
-
- $(CyberduckDir)bonjour\src\main\csharp\Cyberduck.Bonjour.Native.csproj
-
-
- $(CyberduckDir)cli\dll\Cyberduck.Cli.msbuildproj
-
-
- $(CyberduckDir)core\dll\Cyberduck.Core.msbuildproj
-
-
- $(CyberduckDir)core\src\main\csharp\Cyberduck.Core.Native.csproj
-
-
- $(CyberduckDir)core\native\refresh\src\main\csharp\Cyberduck.Core.Refresh.csproj
-
-
- $(CyberduckDir)cryptomator\dll\Cyberduck.Cryptomator.msbuildproj
-
-
- $(CyberduckDir)importer\dll\Cyberduck.Importer.msbuildproj
-
-
- $(CyberduckDir)protocols\dll\Cyberduck.Protocols.msbuildproj
-
-
-
-
-
- Cyberduck.%(Identity)
-
-
- \\?\
-
-
-
-
-
- win-x86
- win-x64
-
-
-
-
- $([MSBuild]::VersionLessThanOrEquals('$(NETCoreSdkVersion)', '6.0.301'))
- $([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '6.0.401'))
- SDKFix_RemoveDuplicateAnalyzers;$(CoreCompileDependsOn)
-
-
-
-
-
-
-
-
-
-
-
-
- <_SignToolArgs Condition="'$(SignTool)'=='cng'">_SignToolArgsCNG
- <_SignToolArgs Condition="'$(_SignToolArgs)'==''">_SignToolArgsCertificateStore
-
- $(_SignToolArgs);SignToolExecutablePath
-
-
-
-
- SignTool.exe
- $(WindowsSdk_ExecutablePath);$(SignToolExecutablePath)
-
-
-
-
-
- sign /d "Cyberduck" /fd sha256 /tr "http://timestamp.acs.microsoft.com" /td "sha256" /a
-
-
-
-
-
-
- "$(SignToolExecutable)" $(SignToolArgsBase)
-
-
-
-
-
-
-
- $(SignToolArgsBase) /sm /n "iterate GmbH"
-
-
-
-
- $(SignToolArgsBase) /f "$(CyberduckDir)setup\cert\certificate.crt" /csp "$(SignToolCSP)" /kc "$(SignToolKC)"
-
-
+
\ No newline at end of file
diff --git a/Directory.Packages.props b/Directory.Packages.props
new file mode 100644
index 00000000000..d16e1d5ab6c
--- /dev/null
+++ b/Directory.Packages.props
@@ -0,0 +1,60 @@
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @(PackageVersion->'%(Identity)'->Replace('.', '_')->'Pkg%(Identity)Version=%(Version)')
+
+
diff --git a/Packages.props b/Packages.props
deleted file mode 100644
index 87aeddb46a7..00000000000
--- a/Packages.props
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/bonjour/dll/Cyberduck.Bonjour.msbuildproj b/bonjour/dll/Cyberduck.Bonjour.ikvmproj
similarity index 67%
rename from bonjour/dll/Cyberduck.Bonjour.msbuildproj
rename to bonjour/dll/Cyberduck.Bonjour.ikvmproj
index 4efb34d915e..c36747ad83f 100644
--- a/bonjour/dll/Cyberduck.Bonjour.msbuildproj
+++ b/bonjour/dll/Cyberduck.Bonjour.ikvmproj
@@ -1,5 +1,4 @@
-
-
+
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bonjour/dll/pom.xml b/bonjour/dll/pom.xml
index 9c0769809f8..df05293ca49 100644
--- a/bonjour/dll/pom.xml
+++ b/bonjour/dll/pom.xml
@@ -50,17 +50,16 @@
build-helper-maven-plugin
- install-dll
- verify
+ install-nupkg
+ package
attach-artifact
- net472
- dll
- ${project.build.directory}/net472/Cyberduck.Bonjour.dll
+ nupkg
+ ${project.build.directory}/Cyberduck.Bonjour.${project.version}.nupkg
@@ -76,9 +75,8 @@
ch.cyberduck
Cyberduck.Core
- net472
+ nupkg
${project.version}
- dll
diff --git a/bonjour/native/Directory.Build.props b/bonjour/native/Directory.Build.props
index ae8c28c65de..17adff8d341 100644
--- a/bonjour/native/Directory.Build.props
+++ b/bonjour/native/Directory.Build.props
@@ -15,10 +15,11 @@
-
- $(MSBuildThisFileDirectory)
-
+
+ Cyberduck.Bonjour.Native
+ $(MSBuildThisFileDirectory)
+
-
+
-
+
\ No newline at end of file
diff --git a/bonjour/native/build.xml b/bonjour/native/build.xml
index fd59646a58f..6dfdf913695 100644
--- a/bonjour/native/build.xml
+++ b/bonjour/native/build.xml
@@ -37,4 +37,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/bonjour/native/pom.xml b/bonjour/native/pom.xml
index 0554869abcc..ab6099abb02 100644
--- a/bonjour/native/pom.xml
+++ b/bonjour/native/pom.xml
@@ -28,7 +28,7 @@
build-helper-maven-plugin
- install-dll
+ install-nupkg
package
attach-artifact
@@ -36,9 +36,8 @@
- net472
- dll
- ${project.build.directory}/net472/Cyberduck.Bonjour.Native.dll
+ nupkg
+ ${project.build.directory}/Cyberduck.Bonjour.Native.${project.version}.nupkg
@@ -54,8 +53,7 @@
ch.cyberduck
Cyberduck.Bonjour
- net472
- dll
+ nupkg
${project.version}
diff --git a/bonjour/native/src/main/nuget/Cyberduck.Bonjour.Native.nuspec b/bonjour/native/src/main/nuget/Cyberduck.Bonjour.Native.nuspec
new file mode 100644
index 00000000000..9134c53240f
--- /dev/null
+++ b/bonjour/native/src/main/nuget/Cyberduck.Bonjour.Native.nuspec
@@ -0,0 +1,20 @@
+
+
+
+ $id$
+ $version$
+ $description$
+ $authors$
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bonjour/native/src/main/nuget/nuget.proj b/bonjour/native/src/main/nuget/nuget.proj
new file mode 100644
index 00000000000..f5a01498fce
--- /dev/null
+++ b/bonjour/native/src/main/nuget/nuget.proj
@@ -0,0 +1,9 @@
+
+
+
+ netstandard2.0
+ true
+ false
+ Cyberduck.Bonjour.Native.nuspec
+
+
diff --git a/bonjour/src/main/csharp/Directory.Build.props b/bonjour/src/main/Directory.Build.props
similarity index 100%
rename from bonjour/src/main/csharp/Directory.Build.props
rename to bonjour/src/main/Directory.Build.props
diff --git a/bonjour/src/main/csharp/Cyberduck.Bonjour.Native.csproj b/bonjour/src/main/csharp/Cyberduck.Bonjour.Native.csproj
index f26981c6860..62132827907 100644
--- a/bonjour/src/main/csharp/Cyberduck.Bonjour.Native.csproj
+++ b/bonjour/src/main/csharp/Cyberduck.Bonjour.Native.csproj
@@ -13,7 +13,6 @@
-
diff --git a/bonjour/src/main/csharp/nuget.proj b/bonjour/src/main/csharp/nuget.proj
new file mode 100644
index 00000000000..6b158b5b195
--- /dev/null
+++ b/bonjour/src/main/csharp/nuget.proj
@@ -0,0 +1,8 @@
+
+
+ netstandard2.0
+ true
+ false
+ Cyberduck.Core.Native.nuspec
+
+
diff --git a/build.xml b/build.xml
index 51454c418da..a5984b2466b 100644
--- a/build.xml
+++ b/build.xml
@@ -127,9 +127,13 @@
-
+
+
+
-
+
@@ -137,20 +141,35 @@
-
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
diff --git a/cli/dll/Cyberduck.Cli.ikvmproj b/cli/dll/Cyberduck.Cli.ikvmproj
new file mode 100644
index 00000000000..7af58505026
--- /dev/null
+++ b/cli/dll/Cyberduck.Cli.ikvmproj
@@ -0,0 +1,15 @@
+
+
+ net8.0
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
diff --git a/cli/dll/Cyberduck.Cli.msbuildproj b/cli/dll/Cyberduck.Cli.msbuildproj
deleted file mode 100644
index 80b06bc152b..00000000000
--- a/cli/dll/Cyberduck.Cli.msbuildproj
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
- net472
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/cli/dll/build.xml b/cli/dll/build.xml
index 68d88d0cf85..d26f3e01fc0 100644
--- a/cli/dll/build.xml
+++ b/cli/dll/build.xml
@@ -16,17 +16,25 @@
-->
-
+
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cli/dll/pom.xml b/cli/dll/pom.xml
index 5d7c0e4f654..20eca8d4c3c 100644
--- a/cli/dll/pom.xml
+++ b/cli/dll/pom.xml
@@ -70,9 +70,8 @@
- net472
- dll
- ${project.build.directory}/net472/Cyberduck.Cli.dll
+ nupkg
+ ${project.build.directory}/Cyberduck.Cli.${project.version}.nupkg
@@ -91,29 +90,19 @@
ch.cyberduck
Cyberduck.Core
- net472
- dll
- ${project.version}
-
-
- ch.cyberduck
- Cyberduck.Core.Native
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Protocols
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Cryptomator
- net472
- dll
+ nupkg
${project.version}
@@ -141,5 +130,21 @@
+
+ org.fusesource.jansi
+ jansi
+ ${jansi.version}
+ x86_64
+ dll
+ runtime
+
+
+ org.fusesource.jansi
+ jansi
+ ${jansi.version}
+ arm64
+ dll
+ runtime
+
diff --git a/cli/linux/pom.xml b/cli/linux/pom.xml
index 13163576f61..c334880e6dd 100644
--- a/cli/linux/pom.xml
+++ b/cli/linux/pom.xml
@@ -81,6 +81,14 @@
${jna-version}
runtime
+
+ org.fusesource.jansi
+ jansi
+ ${jansi.version}
+ arm64
+ so
+ runtime
+
@@ -99,6 +107,14 @@
${jna-version}
runtime
+
+ org.fusesource.jansi
+ jansi
+ ${jansi.version}
+ ${os.arch}
+ so
+ runtime
+
@@ -117,6 +133,14 @@
${jna-version}
runtime
+
+ org.fusesource.jansi
+ jansi
+ ${jansi.version}
+ x86_64
+ so
+ runtime
+
diff --git a/cli/osx/build.xml b/cli/osx/build.xml
index 3fbdc051e19..ed291d181ec 100644
--- a/cli/osx/build.xml
+++ b/cli/osx/build.xml
@@ -23,7 +23,7 @@
+ value="-client --add-opens=java.base/sun.security.ssl=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED -Djava.library.path=$APP_PACKAGE/Contents/Frameworks -Dlibrary.jansi.path=$APP_PACKAGE/Contents/Frameworks -Djna.boot.library.path=$APP_PACKAGE/Contents/Frameworks -Djna.library.path=$APP_PACKAGE/Contents/Frameworks -Djna.nounpack=true -Djava.awt.headless=true -Dsun.jnu.encoding=utf-8 -Dfile.encoding=utf-8 -Dsun.io.useCanonCaches=false -DLog4jContextSelector=org.apache.logging.log4j.core.selector.BasicContextSelector -XX:+UseG1GC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:+UseStringDeduplication"/>
diff --git a/cli/osx/pom.xml b/cli/osx/pom.xml
index 7cd6227438e..c0d5fa7b557 100644
--- a/cli/osx/pom.xml
+++ b/cli/osx/pom.xml
@@ -81,7 +81,7 @@
${project.build.directory}/duck.bundle/Contents/Frameworks
- dylib
+ dylib,jnilib
runtime
true
true
@@ -226,5 +226,12 @@
test
${project.version}
+
+ org.fusesource.jansi
+ libjansi
+ ${jansi.version}
+ jnilib
+ runtime
+
diff --git a/cli/pom.xml b/cli/pom.xml
index 53cbc98eef4..80b3f6a43ed 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -79,8 +79,8 @@
org.fusesource.jansi
- jansi
- 2.4.0
+ jansi-min
+ ${jansi.version}
diff --git a/cli/src/main/csharp/Properties/PublishProfiles/win-arm64.pubxml b/cli/src/main/csharp/Properties/PublishProfiles/win-arm64.pubxml
new file mode 100644
index 00000000000..b7028ce11ac
--- /dev/null
+++ b/cli/src/main/csharp/Properties/PublishProfiles/win-arm64.pubxml
@@ -0,0 +1,7 @@
+
+
+
+ win-arm64
+ true
+
+
\ No newline at end of file
diff --git a/cli/src/main/csharp/Properties/PublishProfiles/win-x64.pubxml b/cli/src/main/csharp/Properties/PublishProfiles/win-x64.pubxml
new file mode 100644
index 00000000000..3bab3131c94
--- /dev/null
+++ b/cli/src/main/csharp/Properties/PublishProfiles/win-x64.pubxml
@@ -0,0 +1,7 @@
+
+
+
+ win-x64
+ true
+
+
\ No newline at end of file
diff --git a/cli/src/main/csharp/ch/cyberduck/cli/WindowsTerminalPreferences.cs b/cli/src/main/csharp/ch/cyberduck/cli/WindowsTerminalPreferences.cs
index e4cadaf6cb6..641979ee41c 100644
--- a/cli/src/main/csharp/ch/cyberduck/cli/WindowsTerminalPreferences.cs
+++ b/cli/src/main/csharp/ch/cyberduck/cli/WindowsTerminalPreferences.cs
@@ -16,6 +16,7 @@
// feedback@cyberduck.io
//
+using System;
using ch.cyberduck.cli;
using ch.cyberduck.core.cryptomator;
using ch.cyberduck.core.serviceloader;
@@ -28,6 +29,7 @@
using Ch.Cyberduck.Core.Proxy;
using java.security;
using sun.security.mscapi;
+using JavaSystem = java.lang.System;
namespace Ch.Cyberduck.Cli
{
@@ -48,6 +50,8 @@ protected override void setDefaults()
{
base.setDefaults();
+ JavaSystem.setProperty("library.jansi.path", AppContext.BaseDirectory);
+
this.setDefault("application.language", "en");
Security.addProvider(new SunMSCAPI());
diff --git a/cli/src/main/csharp/duck.csproj b/cli/src/main/csharp/duck.csproj
index f8a05377bed..de33d9492d4 100644
--- a/cli/src/main/csharp/duck.csproj
+++ b/cli/src/main/csharp/duck.csproj
@@ -2,9 +2,10 @@
Exe
- net472
- x64
- win-x64
+ net8.0-windows10.0.26100.0
+ win-x64;win-arm64
+ x64;arm64
+ win-$(Platform)
@@ -12,22 +13,10 @@
-
- $(Filename)$(Extension)
- PreserveNewest
-
-
- $(Filename)$(Extension)
- PreserveNewest
-
-
- PreserveNewest
- $(Filename)$(Extension)
-
-
- PreserveNewest
- $(Filename)$(Extension)
-
+
+
+
+
bookmarks/%(Filename)%(Extension)
@@ -43,9 +32,4 @@
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/cli/src/main/java/ch/cyberduck/cli/LinuxTerminalPreferences.java b/cli/src/main/java/ch/cyberduck/cli/LinuxTerminalPreferences.java
index e3fe8cf2bce..2c82309e44f 100644
--- a/cli/src/main/java/ch/cyberduck/cli/LinuxTerminalPreferences.java
+++ b/cli/src/main/java/ch/cyberduck/cli/LinuxTerminalPreferences.java
@@ -45,6 +45,9 @@ public LinuxTerminalPreferences() {
protected void setDefaults() {
super.setDefaults();
+ this.setProperty("library.jansi.path", new ClasspathResourcesFinder().find().getAbsolute());
+ this.setProperty("jna.boot.library.path", new ClasspathResourcesFinder().find().getAbsolute());
+
try {
final Process echo = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "echo ~"});
this.setDefault("local.user.home", StringUtils.strip(IOUtils.toString(echo.getInputStream(), Charset.defaultCharset())));
diff --git a/cli/src/main/wix/Bootstrapper/Cyberduck CLI Bundle.wxs b/cli/src/main/wix/Bootstrapper/Cyberduck CLI Bundle.wxs
index a82786ba8aa..b5c4c215679 100644
--- a/cli/src/main/wix/Bootstrapper/Cyberduck CLI Bundle.wxs
+++ b/cli/src/main/wix/Bootstrapper/Cyberduck CLI Bundle.wxs
@@ -1,29 +1,21 @@
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
- = v10.0 AND CBNumber >= 14393]]>
-
+
-
-
-
+
+
+
+
+
+
diff --git a/cli/src/main/wix/Bootstrapper/InstallerTheme.xml b/cli/src/main/wix/Bootstrapper/InstallerTheme.xml
new file mode 100644
index 00000000000..50f697be9fa
--- /dev/null
+++ b/cli/src/main/wix/Bootstrapper/InstallerTheme.xml
@@ -0,0 +1,134 @@
+
+
+
+
+
+ Segoe UI
+ Segoe UI
+ Segoe UI
+ Segoe UI
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #(loc.InstallLicenseLinkText)
+
+ #(loc.InstallAcceptCheckbox)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #(loc.FailureHyperlinkLogText)
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cli/src/main/wix/Bootstrapper/duck.bootstrapper.wixproj b/cli/src/main/wix/Bootstrapper/duck.bootstrapper.wixproj
index 9e1f9f8b742..c4db4bd4c61 100644
--- a/cli/src/main/wix/Bootstrapper/duck.bootstrapper.wixproj
+++ b/cli/src/main/wix/Bootstrapper/duck.bootstrapper.wixproj
@@ -1,74 +1,14 @@
-
-
-
+
- 3.14
- ef87de0e-bc36-4d3c-8852-c8ad11d01f04
- 2.0
- duck-$(Version)
+ duck-$(FileVersion)
Bundle
- CyberduckDir=$(CyberduckDir);SetupDir=$(SetupDir)
+ CyberduckDir=$(CyberduckDir);SetupDir=$(SetupDir);ProductVersion=$(FileVersion);$(DefineConstants)
-
- false
- Debug;$(DefineConstants)
-
-
- true
-
-
-
-
-
-
- x64
-
-
-
-
-
-
-
-
-
-
- $(WixExtDir)\WixNetFxExtension.dll
- WixNetFxExtension
-
-
- $(WixExtDir)\WixBalExtension.dll
- WixBalExtension
-
-
- $(WixExtDir)\WixUtilExtension.dll
- WixUtilExtension
-
+
+
-
- CLI-WiX
- {f6975079-f730-4a31-9909-de536e524764}
- True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
-
+
-
-
-
-
-
-
-
-
-
diff --git a/cli/src/main/wix/Bundle/Cyberduck CLI-WiX.wxs b/cli/src/main/wix/Bundle/Cyberduck CLI-WiX.wxs
index 6c4740ae08f..747ba9d2120 100644
--- a/cli/src/main/wix/Bundle/Cyberduck CLI-WiX.wxs
+++ b/cli/src/main/wix/Bundle/Cyberduck CLI-WiX.wxs
@@ -1,132 +1,29 @@
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
- = 14393]]>
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/cli/src/main/wix/Bundle/duck.bundle.wixproj b/cli/src/main/wix/Bundle/duck.bundle.wixproj
index d550427f8d0..4519fc0fbd4 100644
--- a/cli/src/main/wix/Bundle/duck.bundle.wixproj
+++ b/cli/src/main/wix/Bundle/duck.bundle.wixproj
@@ -1,112 +1,13 @@
-
-
-
+
- 3.11
- f6975079-f730-4a31-9909-de536e524764
- 2.0
- duck-$(Version)
- Package
- x64
+ duck-$(FileVersion)-$(Platform)
+ x64;arm64
- CyberduckDir=$(CyberduckDir);
- ProfilesDir=$(CyberduckDir)profiles\default\;
- LicenseFile=$(CyberduckDir)i18n/src/main/resources/en.lproj/License.txt;
- $(DefineConstants)
-
-
-
- false
- Debug;$(DefineConstants)
-
-
- true
-
-
-
-
-
-
-
- $(WixExtDir)\WixNetFxExtension.dll
- WixNetFxExtension
-
-
-
-
-
- Profiles
- PROFILES
- ProfileComponents
- var.ProfilesDir
-
-
-
-
- x64
-
-
-
-
-
-
-
-
-
-
-
- $(IntermediateOutputPath)CLI\
-
- CLIPublishDir=$(CLIPublishDir);
- IkvmRuntimeDir=$(CLIPublishDir)\ikvm;
+ ProductVersion=$(FileVersion);
$(DefineConstants)
-
- CLI
- {4b14000d-f435-4eca-a119-7aef03792dee}
- Publish
- True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
- PublishDir=$(CLIPublishDir);RuntimeIdentifier=win-x64
-
-
- ikvm
- INSTALLLOCATION
- IkvmRuntime
- var.IkvmRuntimeDir
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/cli/src/main/wix/Directory.Build.props b/cli/src/main/wix/Directory.Build.props
index 73156ad64d5..aaea473a943 100644
--- a/cli/src/main/wix/Directory.Build.props
+++ b/cli/src/main/wix/Directory.Build.props
@@ -15,15 +15,14 @@
-
- <_CliBasePath>$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/
-
-
+
+ <_CliBasePath>$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/
+
+
-
- $(OutputPath)$(Configuration)
- $(CyberduckDir)setup\wix\
- $(OutputPath)
-
+
+ $(BaseOutputPath)$(Configuration)\
+ $(CyberduckDir)setup\wix\
+
diff --git a/cli/windows/Directory.Build.props b/cli/windows/Directory.Build.props
index 345496fbdd4..446ced77aa6 100644
--- a/cli/windows/Directory.Build.props
+++ b/cli/windows/Directory.Build.props
@@ -17,7 +17,6 @@
$(MSBuildThisFileDirectory)
- false
diff --git a/cli/windows/build.xml b/cli/windows/build.xml
index fb00f208fbc..8c2d98d1fcb 100644
--- a/cli/windows/build.xml
+++ b/cli/windows/build.xml
@@ -23,7 +23,7 @@
-
+
@@ -32,7 +32,7 @@
-
+
@@ -40,11 +40,10 @@
-
-
+
+
-
diff --git a/cli/windows/build.proj b/cli/windows/dirs.proj
similarity index 63%
rename from cli/windows/build.proj
rename to cli/windows/dirs.proj
index 9d4e4035e57..c498d1a49d5 100644
--- a/cli/windows/build.proj
+++ b/cli/windows/dirs.proj
@@ -2,10 +2,12 @@
+
-
+
+
diff --git a/cli/windows/pom.xml b/cli/windows/pom.xml
index 724d54ac7ba..4460cb4cca3 100644
--- a/cli/windows/pom.xml
+++ b/cli/windows/pom.xml
@@ -40,37 +40,8 @@
maven-antrun-plugin
- run-ant-installer-target
- package
-
- run
-
-
-
-
-
-
-
-
-
-
-
-
- run-ant-deploy-target
- deploy
-
- run
-
-
-
-
-
-
-
-
-
-
-
+ pack-nupkg
+ none
@@ -83,40 +54,88 @@
ch.cyberduck
Cyberduck.Core
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Core.Native
- net472
- dll
+ nupkg
${project.version}
runtime
ch.cyberduck
Cyberduck.Protocols
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Cryptomator
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Cli
- net472
- dll
+ nupkg
${project.version}
+
+ installer
+
+
+ env.JENKINS_HOME
+
+
+ Windows
+
+
+
+
+
+ maven-antrun-plugin
+
+
+ run-ant-installer-target
+ package
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+ run-ant-deploy-target
+ deploy
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/core/dll/Cyberduck.Core.msbuildproj b/core/dll/Cyberduck.Core.ikvmproj
similarity index 61%
rename from core/dll/Cyberduck.Core.msbuildproj
rename to core/dll/Cyberduck.Core.ikvmproj
index 39d59a7e8fb..936ec724fc1 100644
--- a/core/dll/Cyberduck.Core.msbuildproj
+++ b/core/dll/Cyberduck.Core.ikvmproj
@@ -4,10 +4,11 @@
net472;net8.0
-
-
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/core/dll/Directory.Build.props b/core/dll/Directory.Build.props
index 415d5cdf9b5..08574032576 100644
--- a/core/dll/Directory.Build.props
+++ b/core/dll/Directory.Build.props
@@ -15,10 +15,10 @@
-
- $(MSBuildThisFileDirectory)
-
+
+ $(MSBuildThisFileDirectory)
+
-
+
-
+
\ No newline at end of file
diff --git a/core/dll/build.xml b/core/dll/build.xml
index c49487124ed..3d0f208acbb 100644
--- a/core/dll/build.xml
+++ b/core/dll/build.xml
@@ -24,13 +24,21 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/core/dll/pom.xml b/core/dll/pom.xml
index 5fce1a80260..f73ced8b472 100644
--- a/core/dll/pom.xml
+++ b/core/dll/pom.xml
@@ -50,22 +50,16 @@
build-helper-maven-plugin
- install-dll
- verify
+ install-nupkg
+ package
attach-artifact
- net472
- dll
- ${project.build.directory}/net472/Cyberduck.Core.dll
-
-
- net8.0
- dll
- ${project.build.directory}/net8.0/Cyberduck.Core.dll
+ nupkg
+ ${project.build.directory}/Cyberduck.Core.${project.version}.nupkg
@@ -103,19 +97,11 @@
runtime
- com.microsoft
- vcruntime140
- x64
- dll
- 14.44.35211
- runtime
-
-
- com.microsoft
- vcruntime140_1
- x64
+ net.java.dev.jna
+ jnidispatch
+ aarch64
dll
- 14.44.35211
+ ${jna-version}
runtime
@@ -130,4 +116,4 @@
provided
-
\ No newline at end of file
+
diff --git a/core/i18n-gen/i18n-gen.csproj b/core/i18n-gen/i18n-gen.csproj
index c6589fd79fb..48ab06f0c85 100644
--- a/core/i18n-gen/i18n-gen.csproj
+++ b/core/i18n-gen/i18n-gen.csproj
@@ -5,6 +5,7 @@
9.0
i18n_gen
True
+ false
diff --git a/core/i18n-gen/i18n-gen.targets b/core/i18n-gen/i18n-gen.targets
index ff9b37d2bfa..07430771edb 100644
--- a/core/i18n-gen/i18n-gen.targets
+++ b/core/i18n-gen/i18n-gen.targets
@@ -1,18 +1,19 @@
- $(CyberduckDir)core\target\netstandard2.0\i18n-gen.dll
+ $(CyberduckDir)core\target\i18n-gen.dll
+ AssemblyFile="$(i18n_gen_dll)"
+ TaskFactory="TaskHostFactory" />
+ AssemblyFile="$(i18n_gen_dll)"
+ TaskFactory="TaskHostFactory" />
-
+
+ OutputItemType="Analyzer"
+ ReferenceOutputAssembly="False"
+ SetPlatform="Platform=" />
-
+
\ No newline at end of file
diff --git a/core/native/Directory.Build.props b/core/native/Directory.Build.props
index 415d5cdf9b5..08574032576 100644
--- a/core/native/Directory.Build.props
+++ b/core/native/Directory.Build.props
@@ -15,10 +15,10 @@
-
- $(MSBuildThisFileDirectory)
-
+
+ $(MSBuildThisFileDirectory)
+
-
+
-
+
\ No newline at end of file
diff --git a/core/native/build.xml b/core/native/build.xml
index 914ac71531e..1eca549a17f 100644
--- a/core/native/build.xml
+++ b/core/native/build.xml
@@ -21,27 +21,34 @@
-->
-
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
-
+
+
-
+
\ No newline at end of file
diff --git a/core/native/build.proj b/core/native/dirs.proj
similarity index 74%
rename from core/native/build.proj
rename to core/native/dirs.proj
index 0f8972db81a..9ee449db01a 100644
--- a/core/native/build.proj
+++ b/core/native/dirs.proj
@@ -2,6 +2,7 @@
+
-
+
\ No newline at end of file
diff --git a/core/native/pom.xml b/core/native/pom.xml
index a9289ab75ea..420ccb6c18e 100644
--- a/core/native/pom.xml
+++ b/core/native/pom.xml
@@ -32,7 +32,7 @@
build-helper-maven-plugin
- install-dll
+ install-nupkg
package
attach-artifact
@@ -40,14 +40,8 @@
- net472
- dll
- ${project.build.directory}/net472/Cyberduck.Core.Native.dll
-
-
- net8.0
- dll
- ${project.build.directory}/net8.0-windows10.0.22621.0/Cyberduck.Core.Native.dll
+ nupkg
+ ${project.build.directory}/Cyberduck.Core.Native.${project.version}.nupkg
@@ -83,15 +77,7 @@
ch.cyberduck
Cyberduck.Core
- net472
- dll
- ${project.version}
-
-
- ch.cyberduck
- Cyberduck.Core
- net8.0
- dll
+ nupkg
${project.version}
@@ -108,4 +94,4 @@
test
-
+
\ No newline at end of file
diff --git a/core/native/refresh/Directory.Build.props b/core/native/refresh/Directory.Build.props
index 415d5cdf9b5..05a101d4b82 100644
--- a/core/native/refresh/Directory.Build.props
+++ b/core/native/refresh/Directory.Build.props
@@ -15,10 +15,11 @@
-
- $(MSBuildThisFileDirectory)
-
+
+ Cyberduck.Core.Refresh
+ $(MSBuildThisFileDirectory)
+
-
+
-
+
\ No newline at end of file
diff --git a/core/native/refresh/build.xml b/core/native/refresh/build.xml
index 90d718df519..8e018ae69c5 100644
--- a/core/native/refresh/build.xml
+++ b/core/native/refresh/build.xml
@@ -24,18 +24,24 @@
-
+
-
+
-
+
+
+
+
+
+
+
diff --git a/core/native/refresh/dirs.proj b/core/native/refresh/dirs.proj
new file mode 100644
index 00000000000..14980442909
--- /dev/null
+++ b/core/native/refresh/dirs.proj
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/core/native/refresh/pom.xml b/core/native/refresh/pom.xml
index 210a2016273..3db6bc66772 100644
--- a/core/native/refresh/pom.xml
+++ b/core/native/refresh/pom.xml
@@ -28,7 +28,7 @@
build-helper-maven-plugin
- install-dll
+ install-nupkg
package
attach-artifact
@@ -36,14 +36,8 @@
- net472
- dll
- ${project.build.directory}/net472/Cyberduck.Core.Refresh.dll
-
-
- net8.0
- dll
- ${project.build.directory}/net8.0-windows10.0.22621.0/Cyberduck.Core.Refresh.dll
+ nupkg
+ ${project.build.directory}/Cyberduck.Core.Refresh.${project.version}.nupkg
@@ -59,15 +53,7 @@
ch.cyberduck
Cyberduck.Core.Native
- net472
- dll
- ${project.version}
-
-
- ch.cyberduck
- Cyberduck.Core.Native
- net8.0
- dll
+ nupkg
${project.version}
diff --git a/core/native/refresh/src/main/csharp/Cyberduck.Core.Refresh.csproj b/core/native/refresh/src/main/csharp/Cyberduck.Core.Refresh.csproj
index b2429b5cd3a..b93bb79f1fc 100644
--- a/core/native/refresh/src/main/csharp/Cyberduck.Core.Refresh.csproj
+++ b/core/native/refresh/src/main/csharp/Cyberduck.Core.Refresh.csproj
@@ -18,7 +18,7 @@
net472;net8.0-windows10.0.22621.0
10.0.14393.0
- x64
+ x64;arm64
12.0
true
true
@@ -31,7 +31,6 @@
-
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -41,10 +40,13 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
+
+
+
diff --git a/core/native/refresh/src/main/nuget/Cyberduck.Core.Refresh.nuspec b/core/native/refresh/src/main/nuget/Cyberduck.Core.Refresh.nuspec
new file mode 100644
index 00000000000..67229ab9bd5
--- /dev/null
+++ b/core/native/refresh/src/main/nuget/Cyberduck.Core.Refresh.nuspec
@@ -0,0 +1,34 @@
+
+
+
+ $id$
+ $version$
+ $description$
+ $authors$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/native/refresh/src/main/nuget/build/net8.0-windows10.0.22621.0/Cyberduck.Core.Refresh.targets b/core/native/refresh/src/main/nuget/build/net8.0-windows10.0.22621.0/Cyberduck.Core.Refresh.targets
new file mode 100644
index 00000000000..a6c412e656a
--- /dev/null
+++ b/core/native/refresh/src/main/nuget/build/net8.0-windows10.0.22621.0/Cyberduck.Core.Refresh.targets
@@ -0,0 +1,7 @@
+
+
+
+ $(MSBuildThisFileDirectory)../../lib/net8.0-windows10.0.22621.0/win-$(Platform)/Cyberduck.Core.Refresh.dll
+
+
+
\ No newline at end of file
diff --git a/core/native/refresh/src/main/nuget/nuget.proj b/core/native/refresh/src/main/nuget/nuget.proj
new file mode 100644
index 00000000000..b67ea958fcf
--- /dev/null
+++ b/core/native/refresh/src/main/nuget/nuget.proj
@@ -0,0 +1,8 @@
+
+
+ netstandard2.0
+ true
+ false
+ Cyberduck.Core.Refresh.nuspec
+
+
diff --git a/core/native/src/main/Cyberduck.Core.Native.nuspec b/core/native/src/main/Cyberduck.Core.Native.nuspec
new file mode 100644
index 00000000000..0a672abe1e8
--- /dev/null
+++ b/core/native/src/main/Cyberduck.Core.Native.nuspec
@@ -0,0 +1,34 @@
+
+
+
+ $id$
+ $version$
+ $description$
+ $authors$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/native/src/main/Directory.Build.props b/core/native/src/main/Directory.Build.props
new file mode 100644
index 00000000000..f09eb05b706
--- /dev/null
+++ b/core/native/src/main/Directory.Build.props
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/native/src/main/build/net8.0-windows10.0.22621.0/Cyberduck.Core.Native.targets b/core/native/src/main/build/net8.0-windows10.0.22621.0/Cyberduck.Core.Native.targets
new file mode 100644
index 00000000000..bc0498253ee
--- /dev/null
+++ b/core/native/src/main/build/net8.0-windows10.0.22621.0/Cyberduck.Core.Native.targets
@@ -0,0 +1,7 @@
+
+
+
+ $(MSBuildThisFileDirectory)../../lib/net8.0-windows10.0.22621.0/win-$(Platform)/Cyberduck.Core.Native.dll
+
+
+
\ No newline at end of file
diff --git a/core/native/src/main/nuget.proj b/core/native/src/main/nuget.proj
new file mode 100644
index 00000000000..6b158b5b195
--- /dev/null
+++ b/core/native/src/main/nuget.proj
@@ -0,0 +1,8 @@
+
+
+ netstandard2.0
+ true
+ false
+ Cyberduck.Core.Native.nuspec
+
+
diff --git a/core/src/main/csharp/Cyberduck.Core.Native.csproj b/core/src/main/csharp/Cyberduck.Core.Native.csproj
index dcc4bd19b4e..68c217be6fa 100644
--- a/core/src/main/csharp/Cyberduck.Core.Native.csproj
+++ b/core/src/main/csharp/Cyberduck.Core.Native.csproj
@@ -18,7 +18,7 @@
net472;net8.0-windows10.0.22621.0
10.0.14393.0
- x64
+ x64;arm64
true
@@ -27,7 +27,6 @@
-
all
@@ -40,13 +39,13 @@
-
+
-
+
@@ -76,4 +75,4 @@
Ch.Cyberduck.Properties
-
\ No newline at end of file
+
diff --git a/core/src/main/csharp/Directory.Build.props b/core/src/main/csharp/Directory.Build.props
index 4a975e0eebb..64e75b0a913 100644
--- a/core/src/main/csharp/Directory.Build.props
+++ b/core/src/main/csharp/Directory.Build.props
@@ -16,9 +16,10 @@
+ Cyberduck.Core.Native
<_CoreBasePath>$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/
-
-
+
+
\ No newline at end of file
diff --git a/core/src/main/csharp/ch/cyberduck/core/preferences/ApplicationPreferences.cs b/core/src/main/csharp/ch/cyberduck/core/preferences/ApplicationPreferences.cs
index 2efd5499a34..dd35f30991f 100644
--- a/core/src/main/csharp/ch/cyberduck/core/preferences/ApplicationPreferences.cs
+++ b/core/src/main/csharp/ch/cyberduck/core/preferences/ApplicationPreferences.cs
@@ -45,8 +45,6 @@ public ApplicationPreferences(Locales locales, IPropertyStoreFactory propertySto
this.locales = locales;
SetEnvironmentInfo();
this.propertyStore = propertyStore.New();
-
- JavaSystem.setProperty("jna.boot.library.path", AppContext.BaseDirectory);
}
public override List applicationLocales() => locales.applicationLocales();
@@ -147,6 +145,8 @@ protected override void setDefaults()
{
base.setDefaults();
+ JavaSystem.setProperty("jna.boot.library.path", AppContext.BaseDirectory);
+
this.setDefault("os.version", Environment.OSVersion.Version.ToString());
this.setDefault("oauth.handler.scheme",
diff --git a/cryptomator/dll/Cyberduck.Cryptomator.msbuildproj b/cryptomator/dll/Cyberduck.Cryptomator.ikvmproj
similarity index 64%
rename from cryptomator/dll/Cyberduck.Cryptomator.msbuildproj
rename to cryptomator/dll/Cyberduck.Cryptomator.ikvmproj
index 8622a7d14bd..fed598227d2 100644
--- a/cryptomator/dll/Cyberduck.Cryptomator.msbuildproj
+++ b/cryptomator/dll/Cyberduck.Cryptomator.ikvmproj
@@ -1,16 +1,15 @@
-
net472;net8.0
-
-
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
-
\ No newline at end of file
diff --git a/cryptomator/dll/build.xml b/cryptomator/dll/build.xml
index f5d9e5435cf..da5be489dd3 100644
--- a/cryptomator/dll/build.xml
+++ b/cryptomator/dll/build.xml
@@ -15,18 +15,26 @@
-->
-
+
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cryptomator/dll/pom.xml b/cryptomator/dll/pom.xml
index b4a3355c92d..1f316460ef1 100644
--- a/cryptomator/dll/pom.xml
+++ b/cryptomator/dll/pom.xml
@@ -62,7 +62,7 @@
build-helper-maven-plugin
- install-dll
+ install-nupkg
verify
attach-artifact
@@ -70,14 +70,8 @@
- net472
- dll
- ${project.build.directory}/net472/Cyberduck.Cryptomator.dll
-
-
- net8.0
- dll
- ${project.build.directory}/net8.0/Cyberduck.Cryptomator.dll
+ nupkg
+ ${project.build.directory}/Cyberduck.Cryptomator.${project.version}.nupkg
@@ -96,15 +90,7 @@
ch.cyberduck
Cyberduck.Core
- net472
- dll
- ${project.version}
-
-
- ch.cyberduck
- Cyberduck.Core
- net8.0
- dll
+ nupkg
${project.version}
diff --git a/global.json b/global.json
index f121e3673fa..e70bdcde325 100644
--- a/global.json
+++ b/global.json
@@ -2,6 +2,7 @@
"msbuild-sdks": {
"IKVM.NET.Sdk": "8.13.3",
"Microsoft.Build.NoTargets": "3.7.56",
- "Microsoft.Build.Traversal": "4.1.0"
+ "Microsoft.Build.Traversal": "4.1.0",
+ "WixToolset.Sdk": "5.0.2"
}
}
diff --git a/protocols/dll/Cyberduck.Protocols.msbuildproj b/importer/dll/Cyberduck.Importer.ikvmproj
similarity index 63%
rename from protocols/dll/Cyberduck.Protocols.msbuildproj
rename to importer/dll/Cyberduck.Importer.ikvmproj
index 8622a7d14bd..4ce368a9902 100644
--- a/protocols/dll/Cyberduck.Protocols.msbuildproj
+++ b/importer/dll/Cyberduck.Importer.ikvmproj
@@ -1,16 +1,15 @@
-
net472;net8.0
-
-
-
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
-
\ No newline at end of file
diff --git a/importer/dll/build.xml b/importer/dll/build.xml
index 547ea69d8d0..2a108355914 100644
--- a/importer/dll/build.xml
+++ b/importer/dll/build.xml
@@ -24,13 +24,21 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/importer/dll/pom.xml b/importer/dll/pom.xml
index 08e7bdc6937..c00c5c36edf 100644
--- a/importer/dll/pom.xml
+++ b/importer/dll/pom.xml
@@ -47,7 +47,7 @@
build-helper-maven-plugin
- install-dll
+ install-nupkg
verify
attach-artifact
@@ -55,14 +55,8 @@
- net472
- dll
- ${project.build.directory}/net472/Cyberduck.Importer.dll
-
-
- net8.0
- dll
- ${project.build.directory}/net8.0/Cyberduck.Importer.dll
+ nupkg
+ ${project.build.directory}/Cyberduck.Importer.${project.version}.nupkg
@@ -81,15 +75,7 @@
ch.cyberduck
Cyberduck.Core
- net472
- dll
- ${project.version}
-
-
- ch.cyberduck
- Cyberduck.Core
- net8.0
- dll
+ nupkg
${project.version}
diff --git a/nuget.config b/nuget.config
index 2a93883a26e..dd70b0b80a4 100644
--- a/nuget.config
+++ b/nuget.config
@@ -7,13 +7,13 @@
+
+
+
-
-
-
diff --git a/pom.xml b/pom.xml
index 97c7ae22a7c..ad7116e63cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -93,6 +93,7 @@
4.5.0
8u312b07
0.10.0
+ 2.4.2
ch.cyberduck.test.IntegrationTest
@@ -639,35 +640,35 @@
${project.build.directory}/lib
- net472,net8.0
+ net472,net8.0,net8.0-x64,net8.0-arm64,aarch64,arm64,x86_64
dll
true
true
- copy-dependencies-dll-net472-target
+ copy-dependencies-dll-x64-target
generate-sources
copy-dependencies
- ${project.build.directory}/lib/net472
- net472
+ ${project.build.directory}/lib/x64
+ x86_64
dll
true
true
- copy-dependencies-dll-net8.0-target
+ copy-dependencies-dll-arm64-target
generate-sources
copy-dependencies
- ${project.build.directory}/lib/net8.0
- net8.0
+ ${project.build.directory}/lib/arm64
+ aarch64,arm64
dll
true
true
@@ -1068,6 +1069,18 @@
maven-dependency-plugin
+
+ generate-nupkgs
+ generate-sources
+
+ resolve
+
+
+ ${project.build.directory}/.nuget/packages.list
+ true
+ nupkg
+
+
copy-dependencies-jar-target
@@ -1078,9 +1091,57 @@
+
+ maven-antrun-plugin
+
+
+ unpack-nupkg
+ process-sources
+
+ run
+
+
+
+
+
+
+
+
+
+ run-msbuild-props-target
+ generate-sources
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
+ pack-nupkg
+ package
+
+ run
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/importer/dll/Cyberduck.Importer.msbuildproj b/protocols/dll/Cyberduck.Protocols.ikvmproj
similarity index 62%
rename from importer/dll/Cyberduck.Importer.msbuildproj
rename to protocols/dll/Cyberduck.Protocols.ikvmproj
index 8622a7d14bd..9dfd61f01d3 100644
--- a/importer/dll/Cyberduck.Importer.msbuildproj
+++ b/protocols/dll/Cyberduck.Protocols.ikvmproj
@@ -1,16 +1,15 @@
-
net472;net8.0
-
-
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
-
-
\ No newline at end of file
+
diff --git a/protocols/dll/build.xml b/protocols/dll/build.xml
index 296b9012ad0..4cdf34143f5 100644
--- a/protocols/dll/build.xml
+++ b/protocols/dll/build.xml
@@ -21,17 +21,25 @@
-->
-
+
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/protocols/dll/pom.xml b/protocols/dll/pom.xml
index 1bfb159fb21..c3b572391ad 100644
--- a/protocols/dll/pom.xml
+++ b/protocols/dll/pom.xml
@@ -47,7 +47,7 @@
build-helper-maven-plugin
- install-dll
+ install-nupkg
verify
attach-artifact
@@ -55,14 +55,8 @@
- net472
- dll
- ${project.build.directory}/net472/Cyberduck.Protocols.dll
-
-
- net8.0
- dll
- ${project.build.directory}/net8.0/Cyberduck.Protocols.dll
+ nupkg
+ ${project.build.directory}/Cyberduck.Protocols.${project.version}.nupkg
@@ -81,15 +75,7 @@
ch.cyberduck
Cyberduck.Core
- net472
- dll
- ${project.version}
-
-
- ch.cyberduck
- Cyberduck.Core
- net8.0
- dll
+ nupkg
${project.version}
diff --git a/setup/wix/banner.png b/setup/wix/banner.png
deleted file mode 100644
index d9d35f25ff5..00000000000
Binary files a/setup/wix/banner.png and /dev/null differ
diff --git a/setup/wix/header.bmp b/setup/wix/header.bmp
deleted file mode 100644
index 97acc227567..00000000000
Binary files a/setup/wix/header.bmp and /dev/null differ
diff --git a/setup/wix/side.png b/setup/wix/side.png
new file mode 100644
index 00000000000..d05dca0ca5e
Binary files /dev/null and b/setup/wix/side.png differ
diff --git a/setup/wix/welcome.bmp b/setup/wix/welcome.bmp
deleted file mode 100644
index 9a772f3bff0..00000000000
Binary files a/setup/wix/welcome.bmp and /dev/null differ
diff --git a/src/main/msbuild/Cyberduck.Artifacts.targets b/src/main/msbuild/Cyberduck.Artifacts.targets
new file mode 100644
index 00000000000..e172e0ef3e6
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.Artifacts.targets
@@ -0,0 +1,15 @@
+
+
+
+ $(BaseOutputPath)
+
+
+ false
+
+
+
+ $(BaseOutputPath)
+ $(BaseOutputPath)$(Platform)\
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.Common.props b/src/main/msbuild/Cyberduck.Common.props
new file mode 100644
index 00000000000..114a904e439
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.Common.props
@@ -0,0 +1,56 @@
+
+
+
+ iterate GmbH
+ Libre FTP, SFTP, WebDAV, S3 and OpenStack Swift browser for Mac and Windows.
+
+
+
+ $(ModulePath)target\
+ $(TargetBuildDir)lib\
+ $(TargetBuildDir)generated\msbuild\
+
+ false
+ $(TargetBuildDir)
+
+ $(ArtifactsPath)obj\$(MSBuildProjectName)\
+ $(ArtifactsPath)
+
+ false
+ 12
+
+
+ $(TargetBuildDir).nuget\packages\;$(RestoreAdditionalProjectFallbackFolders)
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ true
+
+
+
+ x64
+
+
+
+
diff --git a/src/main/msbuild/Cyberduck.Common.targets b/src/main/msbuild/Cyberduck.Common.targets
new file mode 100644
index 00000000000..eb4ced02eea
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.Common.targets
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/main/msbuild/Cyberduck.Cpp.props b/src/main/msbuild/Cyberduck.Cpp.props
deleted file mode 100644
index 96185344ba5..00000000000
--- a/src/main/msbuild/Cyberduck.Cpp.props
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- $(OutputPath)
- $(IntermediateOutputPath)
-
-
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.Default.props b/src/main/msbuild/Cyberduck.Default.props
new file mode 100644
index 00000000000..c3a6698c975
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.Default.props
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.Default.targets b/src/main/msbuild/Cyberduck.Default.targets
new file mode 100644
index 00000000000..3119eecee41
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.Default.targets
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.Java.props b/src/main/msbuild/Cyberduck.Java.props
deleted file mode 100644
index 9c3429b2c88..00000000000
--- a/src/main/msbuild/Cyberduck.Java.props
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- <_DirectoryBuildJavaPropsFile>$([MSBuild]::GetPathOfFileAbove('Directory.Build.Java.props', '$(MSBuildProjectDirectory)'))
-
-
-
-
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.MSVC.Toolset.props b/src/main/msbuild/Cyberduck.MSVC.Toolset.props
new file mode 100644
index 00000000000..707c83f52ae
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.MSVC.Toolset.props
@@ -0,0 +1,62 @@
+
+
+
+
+
+ <_LatestWindowsTargetPlatformVersion>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion(Windows, 10.0))
+ $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformSDKLocation(Windows, 10.0))
+ $(WindowsSdkDir)bin\$(_LatestWindowsTargetPlatformVersion)\x86\
+ $(WindowsSdkDir)bin\$(_LatestWindowsTargetPlatformVersion)\x64\
+ $(WindowsSdkDir)bin\$(_LatestWindowsTargetPlatformVersion)\arm64\
+
+
+
+
+
+
+ $(VsInstallRoot)\
+ $(VSInstallDir)Common7\IDE\VC\
+
+
+
+
+
+
+ Native64Bit
+
+
+
+ NativeARM64
+
+
+
+ Native32Bit
+
+
+
+
+ $(VCToolArchitecture)
+
+
+
+ $(WindowsSDK_ExecutablePath_x64);$(WindowsSDK_ExecutablePath_x86)
+
+
+
+ $(WindowsSDK_ExecutablePath_ARM64);$(WindowsSDK_ExecutablePath_x86)
+
+
+
+ $(WindowsSDK_ExecutablePath_x86)
+
+
+
+
+
+ $(WindowsSDK_ExecutablePath);$(MSBuild_ExecutablePath);$(PATH);
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.Net.props b/src/main/msbuild/Cyberduck.Net.props
new file mode 100644
index 00000000000..4823952dcd0
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.Net.props
@@ -0,0 +1,18 @@
+
+
+
+ $(BuildSupportDir)Cyberduck.Artifacts.targets;$(BeforeMicrosoftNETSdkTargets)
+
+
+
+ $(DefaultItemExcludes);**/*net472*
+
+
+ $(DefaultItemExcludes);**/*net8.0*
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.Net.targets b/src/main/msbuild/Cyberduck.Net.targets
new file mode 100644
index 00000000000..192098411a8
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.Net.targets
@@ -0,0 +1,46 @@
+
+
+
+ $(LibDir);$(AssemblySearchPaths)
+
+
+
+ net472
+ net8.0
+
+
+ $(LibDir)$(LibDirFramework)\;$(AssemblySearchPaths)
+ $(LibDir)$(LibDirFramework)\$(Platform)\;$(AssemblySearchpaths)
+
+
+
+
+ win-x86
+ win-x64
+
+
+
+
+
+
+
+
+
+
+
+
+ $([MSBuild]::VersionLessThanOrEquals('$(NETCoreSdkVersion)', '6.0.301'))
+ $([MSBuild]::VersionGreaterThanOrEquals('$(NETCoreSdkVersion)', '6.0.401'))
+ SDKFix_RemoveDuplicateAnalyzers;$(CoreCompileDependsOn)
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.NuGet.targets b/src/main/msbuild/Cyberduck.NuGet.targets
new file mode 100644
index 00000000000..4a7531a769e
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.NuGet.targets
@@ -0,0 +1,22 @@
+
+
+
+ $(GenerateNuspecDependsOn);CyberduckNuspecProperties
+
+
+
+
+
+ $(PackageVersions);
+ id=$(PackageId);
+ version=$(PackageVersion);
+ authors=$(Authors);
+ company=$(Company);
+ description=$(Description);
+ buildDir=$(TargetBuildDir);
+ $(NuspecProperties)
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.References.props b/src/main/msbuild/Cyberduck.References.props
new file mode 100644
index 00000000000..d4ca367ce98
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.References.props
@@ -0,0 +1,52 @@
+
+
+
+
+ $(CyberduckDir)bonjour\dll\Cyberduck.Bonjour.ikvmproj
+
+
+ $(CyberduckDir)bonjour\src\main\csharp\Cyberduck.Bonjour.Native.csproj
+
+
+ $(CyberduckDir)cli\dll\Cyberduck.Cli.ikvmproj
+
+
+ $(CyberduckDir)core\dll\Cyberduck.Core.ikvmproj
+
+
+ $(CyberduckDir)core\src\main\csharp\Cyberduck.Core.Native.csproj
+
+
+ $(CyberduckDir)core\native\refresh\src\main\csharp\Cyberduck.Core.Refresh.csproj
+
+
+ $(CyberduckDir)cryptomator\dll\Cyberduck.Cryptomator.ikvmproj
+
+
+ $(CyberduckDir)importer\dll\Cyberduck.Importer.ikvmproj
+
+
+ $(CyberduckDir)protocols\dll\Cyberduck.Protocols.ikvmproj
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.Sign.targets b/src/main/msbuild/Cyberduck.Sign.targets
new file mode 100644
index 00000000000..d457d7f0dae
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.Sign.targets
@@ -0,0 +1,41 @@
+
+
+
+ <_SignToolArgsTarget Condition="'$(_SignToolArgsTarget)'=='' And '$(SignTool)'=='cng'">_SignToolArgsCNG
+ <_SignToolArgsTarget Condition="'$(_SignToolArgsTarget)'==''">_SignToolArgsCertificateStore
+ $(_SignToolArgsTarget);SignToolExecutableName
+
+
+
+
+ SignTool.exe
+
+
+
+
+
+
+
+
+ sign /d "Cyberduck" /fd sha256 /tr "http://timestamp.acs.microsoft.com" /td "sha256" /a
+
+
+
+
+
+
+ "$(SignToolExecutableName)" $(SignToolArgsBase)
+
+
+
+
+ $(SignToolArgsBase) /sm /n "iterate GmbH"
+
+
+
+
+ $(SignToolArgsBase) /f "$(CyberduckDir)setup\cert\certificate.crt" /csp "$(SignToolCSP)" /kc "$(SignToolKC)"
+
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.java.After.targets b/src/main/msbuild/Cyberduck.java.After.targets
new file mode 100644
index 00000000000..d93c56daf2b
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.java.After.targets
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Directory.Build.Java.props b/src/main/msbuild/Cyberduck.java.props
similarity index 67%
rename from Directory.Build.Java.props
rename to src/main/msbuild/Cyberduck.java.props
index daf82155590..a75866dc4bf 100644
--- a/Directory.Build.Java.props
+++ b/src/main/msbuild/Cyberduck.java.props
@@ -2,6 +2,7 @@
ikvm.runtime.AppDomainAssemblyClassLoader
+ true
false
1.8
@@ -17,6 +18,11 @@
IKVM0111: Emitted NoClassDefFoundError
-->
IKVM0100;IKVM0101;IKVM0105;IKVM0111;$(NoWarn)
+ $(MSBuildThisFileDirectory)Cyberduck.java.After.targets;$(AfterMicrosoftNETSdkTargets)
+
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.wapproj.props b/src/main/msbuild/Cyberduck.wapproj.props
new file mode 100644
index 00000000000..b1d2c94e1e9
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.wapproj.props
@@ -0,0 +1,21 @@
+
+
+
+
+ $(BaseOutputPath)
+ $(OutputPath)$(Configuration)\
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/Cyberduck.wxs.targets b/src/main/msbuild/Cyberduck.wxs.targets
new file mode 100644
index 00000000000..6e71f5321cf
--- /dev/null
+++ b/src/main/msbuild/Cyberduck.wxs.targets
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_SignPayload Include="@(BindPathPayloadExecutable->WithoutMetadataValue('Sign', '0'))" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/msbuild/NuGet-Unpack.ps1 b/src/main/msbuild/NuGet-Unpack.ps1
new file mode 100644
index 00000000000..d4756ce1326
--- /dev/null
+++ b/src/main/msbuild/NuGet-Unpack.ps1
@@ -0,0 +1,32 @@
+[CmdletBinding()]
+param (
+ # Source path, where all .nupkgs are stored.
+ [Parameter()]
+ [string]
+ $PackagesListPath
+)
+
+if (-not (Test-Path -Path $PackagesListPath -PathType Leaf)) {
+ return;
+}
+
+$NugetParent = [System.IO.Path]::GetDirectoryName($PackagesListPath)
+$PackagesPath = "$NugetParent\packages"
+
+foreach ($line in Get-Content $PackagesListPath) {
+ $line = $line.Trim()
+ if ($line -notmatch "\s*(?[^:]+):(?[^:]+):(?[^:]+):(?[^:]+):(?[^:]+):(?.*)$") {
+ continue
+ }
+
+ $artifact = $Matches["artifact"]
+ $version = $Matches["version"]
+
+ $NupkgFile = $Matches["path"]
+ $PackageName = [System.IO.Path]::GetFileNameWithoutExtension((tar.exe tf "$NupkgFile" '*.nuspec'))
+ $TargetDirectory = "$PackagesPath\$PackageName\$version"
+ New-Item -Force -Type Directory $TargetDirectory
+ Get-ChildItem $TargetDirectory | Remove-Item -Recurse -Force
+ tar.exe xf $NupkgFile -C $TargetDirectory
+ Set-Content "$TargetDirectory\.nupkg.metadata" '{}'
+}
diff --git a/src/template/msbuild/Version.props b/src/template/msbuild/Version.props
index 664c70296e2..8d577106637 100644
--- a/src/template/msbuild/Version.props
+++ b/src/template/msbuild/Version.props
@@ -1,11 +1,13 @@
-
-
+ ${version}
${fullversion}
- ${version}.${revision}
- $(AssemblyVersion)
+ ${revision}
+ 0
+ $(AssemblyVersion).$(Revision)
+
+ $(InformationalVersion)
diff --git a/windows/Directory.Build.props b/windows/Directory.Build.props
index 423651ecc5d..a3586910509 100644
--- a/windows/Directory.Build.props
+++ b/windows/Directory.Build.props
@@ -17,7 +17,6 @@
$(MSBuildThisFileDirectory)
- false
diff --git a/windows/build.xml b/windows/build.xml
index 8580638486f..10c76114cb2 100755
--- a/windows/build.xml
+++ b/windows/build.xml
@@ -30,13 +30,13 @@
-
+
-
+
@@ -49,10 +49,11 @@
+
-
+
@@ -69,7 +70,7 @@
-
+
diff --git a/windows/build.proj b/windows/dirs.proj
similarity index 84%
rename from windows/build.proj
rename to windows/dirs.proj
index a8e703d6492..163805f076f 100644
--- a/windows/build.proj
+++ b/windows/dirs.proj
@@ -15,9 +15,8 @@
-
-
-
+
+
diff --git a/windows/pom.xml b/windows/pom.xml
index 73b263347cb..683365da58f 100644
--- a/windows/pom.xml
+++ b/windows/pom.xml
@@ -76,6 +76,10 @@
+
+ pack-nupkg
+ none
+
@@ -84,57 +88,49 @@
ch.cyberduck
Cyberduck.Core
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Core.Native
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Core.Refresh
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Protocols
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Bonjour
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Bonjour.Native
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Importer
- net472
- dll
+ nupkg
${project.version}
ch.cyberduck
Cyberduck.Cryptomator
- net472
- dll
+ nupkg
${project.version}
diff --git a/windows/src/main/csharp/Cyberduck.csproj b/windows/src/main/csharp/Cyberduck.csproj
index ce6364b2fe1..3c1ec3b6e2d 100644
--- a/windows/src/main/csharp/Cyberduck.csproj
+++ b/windows/src/main/csharp/Cyberduck.csproj
@@ -3,8 +3,8 @@
WinExe
net472
- win-x64
x64
+ win-x64
true
true
@@ -19,10 +19,10 @@
-
- PreserveNewest
- $(Filename)$(Extension)
-
+
+
+
+
@@ -90,4 +90,4 @@
-
\ No newline at end of file
+
diff --git a/windows/src/main/package/Directory.Build.props b/windows/src/main/package/Directory.Build.props
deleted file mode 100644
index 5a1f1658923..00000000000
--- a/windows/src/main/package/Directory.Build.props
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
- $(OutputPath)$(Configuration)\
-
-
-
diff --git a/windows/src/main/package/Package.appxmanifest.template b/windows/src/main/package/Package.appxmanifest.template
index 64f5f87622f..df62797cef5 100644
--- a/windows/src/main/package/Package.appxmanifest.template
+++ b/windows/src/main/package/Package.appxmanifest.template
@@ -112,7 +112,7 @@
Cyberduck OAuth
-
diff --git a/windows/src/main/package/package.wapproj b/windows/src/main/package/package.wapproj
index 6fb7d763dc6..f7add900a83 100644
--- a/windows/src/main/package/package.wapproj
+++ b/windows/src/main/package/package.wapproj
@@ -27,18 +27,12 @@
false
-
- False
-
-
- True
-
false
-
+
Package.appxmanifest
Designer
Package.appxmanifest.template
@@ -57,16 +51,21 @@
Images\CyberduckAppx.150x150.png
-
- Profiles\%(Filename)%(Extension)
-
%(Filename)%(Extension)
+
+
+
+ <_FilteredNonWapProjProjectOutput Update="@(_FilteredNonWapProjProjectOutput)" SourceProject="" Condition="'%(SourceProject)'!=''" />
+
+
+
+
@@ -81,13 +80,13 @@
-
+
- $(SignAppxPackageExeFullPath)
+ $(SignAppxPackageExeFullPath)
-
-
+
@@ -101,8 +100,8 @@
BeforeTargets="_GenerateAppxPackageFile"
DependsOnTargets="_CollectSignAppxPackagePayload;SignToolArgs"
Condition="'$(SignOutput)'=='true'">
-
-
+
\ No newline at end of file
diff --git a/windows/src/main/wix/Bootstrapper/Cyberduck Bootstrapper.wxs b/windows/src/main/wix/Bootstrapper/Cyberduck Bootstrapper.wxs
index 4670c451b2e..c0ad20cb7c9 100644
--- a/windows/src/main/wix/Bootstrapper/Cyberduck Bootstrapper.wxs
+++ b/windows/src/main/wix/Bootstrapper/Cyberduck Bootstrapper.wxs
@@ -1,42 +1,29 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
-
- = v10.0 AND CBNumber >= 14393]]>
-
+
-
-
-
-
+
+
+
-
+
diff --git a/windows/src/main/wix/Bootstrapper/Cyberduck.Bootstrapper.wixproj b/windows/src/main/wix/Bootstrapper/Cyberduck.Bootstrapper.wixproj
index 8054ac4edf8..34b5d25ccb6 100644
--- a/windows/src/main/wix/Bootstrapper/Cyberduck.Bootstrapper.wixproj
+++ b/windows/src/main/wix/Bootstrapper/Cyberduck.Bootstrapper.wixproj
@@ -1,76 +1,18 @@
-
-
-
+
- 3.14
- 00858CE5-437F-46BE-8A2E-519B552DBF7D
- 2.0
- Cyberduck-Installer-$(Version)
+ Cyberduck-Installer-$(FileVersion)
Bundle
- CyberduckDir=$(CyberduckDir);SetupDir=$(SetupDir)
+ CyberduckDir=$(CyberduckDir);SetupDir=$(SetupDir);ProductVersion=$(FileVersion);$(DefineConstants)
-
- Debug;$(DefineConstants)
- false
-
-
- true
-
-
-
-
-
-
- x64
-
-
-
-
-
-
-
-
-
-
- $(WixExtDir)\WixNetFxExtension.dll
- WixNetFxExtension
-
-
- $(WixExtDir)\WixBalExtension.dll
- WixBalExtension
-
-
- $(WixExtDir)\WixUtilExtension.dll
- WixUtilExtension
-
+
+
+
-
- cyberduck-installer-msi
- {65ab4ce3-5af4-411a-928c-7ffd250c6d85}
- True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
-
+
-
-
-
-
-
-
-
-
diff --git a/windows/src/main/wix/Bootstrapper/InstallerTheme.xml b/windows/src/main/wix/Bootstrapper/InstallerTheme.xml
index 0955c724043..000efa59c30 100644
--- a/windows/src/main/wix/Bootstrapper/InstallerTheme.xml
+++ b/windows/src/main/wix/Bootstrapper/InstallerTheme.xml
@@ -2,99 +2,135 @@
-
- #(loc.Caption)
- Segoe UI
- Segoe UI
- Segoe UI
- Segoe UI
- Segoe UI
+
+ Segoe UI
+ Segoe UI
+ Segoe UI
+ Segoe UI
-
- #(loc.Title)
-
- #(loc.HelpHeader)
- #(loc.HelpText)
-
-
-
- #(loc.Title)
-
- #(loc.InstallHeader)
- #(loc.InstallMessage)
-
- #(loc.InstallLicenseLinkText)
- #(loc.InstallVersion)
- #(loc.InstallAcceptCheckbox)
-
-
-
-
-
- #(loc.Title)
-
- #(loc.OptionsHeader)
- #(loc.OptionsLocationLabel)
-
-
- Bonjour
-
-
-
-
-
- #(loc.Title)
-
- #(loc.FilesInUseHeader)
- #(loc.FilesInUseLabel)
-
-
-
-
-
-
-
-
-
- #(loc.Title)
-
- #(loc.ProgressHeader)
- #(loc.ProgressLabel)
- #(loc.OverallProgressPackageText)
-
-
-
-
- #(loc.Title)
-
- #(loc.ModifyHeader)
-
-
-
-
-
- #(loc.Title)
-
- #(loc.SuccessHeader)
- #(loc.SuccessInstallHeader)
- #(loc.SuccessRepairHeader)
- #(loc.SuccessUninstallHeader)
-
- #(loc.SuccessRestartText)
-
-
-
-
- #(loc.Title)
-
- #(loc.FailureHeader)
- #(loc.FailureInstallHeader)
- #(loc.FailureUninstallHeader)
- #(loc.FailureRepairHeader)
- #(loc.FailureHyperlinkLogText)
-
- #(loc.FailureRestartText)
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #(loc.InstallLicenseLinkText)
+
+ #(loc.InstallAcceptCheckbox)
+
+
+
+
+
+
+
+
+
+
+
+
+ Bonjour
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #(loc.FailureHyperlinkLogText)
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/windows/src/main/wix/Bundle/Cyberduck.Bundle.wixproj b/windows/src/main/wix/Bundle/Cyberduck.Bundle.wixproj
index 3c7738ea6fb..fb9ece60f38 100644
--- a/windows/src/main/wix/Bundle/Cyberduck.Bundle.wixproj
+++ b/windows/src/main/wix/Bundle/Cyberduck.Bundle.wixproj
@@ -1,125 +1,13 @@
-
-
-
+
- 3.11
- 65ab4ce3-5af4-411a-928c-7ffd250c6d85
- 2.0
- Cyberduck-Installer-$(Version)
- Package
- x64
+ Cyberduck-Installer-$(FileVersion)
+ x64
- CyberduckDir=$(CyberduckDir);
- ProfilesDir=$(CyberduckDir)profiles\default\;
- LicenseFile=$(CyberduckDir)i18n/src/main/resources/en.lproj/License.txt;
- $(DefineConstants)
-
-
-
- Debug;$(DefineConstants)
- false
-
-
- true
-
-
-
-
-
-
- WindowsVersionCustomAction
- {fba5efe2-362b-4bad-a748-3248f79468ac}
- True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
-
-
-
-
- $(WixExtDir)\WixNetFxExtension.dll
- WixNetFxExtension
-
-
- $(WixExtDir)\WixUtilExtension.dll
- WixUtilExtension
-
-
-
-
-
- Profiles
- PROFILES
- ProfileComponents
- var.ProfilesDir
-
-
-
-
- x64
-
-
-
-
-
-
-
-
-
-
-
- $(IntermediateOutputPath)Cyberduck\
-
- CyberduckPublishDir=$(CyberduckPublishDir);
- IkvmRuntimeDir=$(CyberduckPublishDir)\ikvm;
+ ProductVersion=$(FileVersion);
$(DefineConstants)
-
- cyberduck
- {04AFCFBB-97D5-44EA-B087-F0CFAEB51E30}
- Publish
- True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
- PublishDir=$(CyberduckPublishDir);RuntimeIdentifier=win-x64
-
-
- ikvm
- INSTALLLOCATION
- IkvmRuntime
- var.IkvmRuntimeDir
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/windows/src/main/wix/Bundle/Cyberduck.wxs b/windows/src/main/wix/Bundle/Cyberduck.wxs
index f6f6ab57ca4..fb6e8fa5a69 100644
--- a/windows/src/main/wix/Bundle/Cyberduck.wxs
+++ b/windows/src/main/wix/Bundle/Cyberduck.wxs
@@ -1,320 +1,208 @@
-
-
-
-
-
+
+
-
+
-
+
-
- = 14393]]>
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
- AUTOSTART=1
-
-
-
\ No newline at end of file
+
+
diff --git a/windows/src/main/wix/Directory.Build.props b/windows/src/main/wix/Directory.Build.props
index e66b74af7aa..d13e2e3b000 100644
--- a/windows/src/main/wix/Directory.Build.props
+++ b/windows/src/main/wix/Directory.Build.props
@@ -18,9 +18,8 @@
- $(OutputPath)$(Configuration)
- $(CyberduckDir)setup\wix\
- $(OutputPath)
+ $(BaseOutputPath)$(Configuration)\
+ $(CyberduckDir)setup\wix\
diff --git a/windows/src/main/wix/WindowsVersionCustomAction/CustomAction.cpp b/windows/src/main/wix/WindowsVersionCustomAction/CustomAction.cpp
deleted file mode 100644
index b4656568fec..00000000000
--- a/windows/src/main/wix/WindowsVersionCustomAction/CustomAction.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-#include "stdafx.h"
-#include
-#include
-
-BOOL GetKernelVersion(VS_FIXEDFILEINFO& vInfo)
-{
- static const wchar_t kernel32[] = L"\\kernel32.dll";
- wchar_t path[MAX_PATH];
-
- unsigned int n = GetSystemDirectory(path, MAX_PATH);
- memcpy_s(path + n, MAX_PATH, kernel32, sizeof(kernel32));
-
- unsigned int size = GetFileVersionInfoSize(path, NULL);
- if (size == 0)
- {
- return false;
- }
-
- std::vector verionInfo;
- verionInfo.resize(size);
- BOOL result = GetFileVersionInfo(path, 0, size, verionInfo.data());
- if (!result || GetLastError() != S_OK)
- {
- return false;
- }
-
- VS_FIXEDFILEINFO *vinfo;
- result = VerQueryValue(verionInfo.data(), L"\\", (LPVOID *)&vinfo, &size);
- vInfo = *vinfo;
-
- return result;
-}
-
-OSVERSIONINFO GetOSVersionInfo()
-{
- OSVERSIONINFO osvi;
-
- VS_FIXEDFILEINFO vinfo;
- if (GetKernelVersion(vinfo))
- {
- osvi.dwMajorVersion = HIWORD(vinfo.dwProductVersionMS);
- osvi.dwMinorVersion = LOWORD(vinfo.dwProductVersionMS);
- osvi.dwBuildNumber = HIWORD(vinfo.dwProductVersionLS);
- }
-
- return osvi;
-}
-
-bool windows10orGreater()
-{
- static const wchar_t kernel32[] = L"\\kernel32.dll";
- wchar_t path[MAX_PATH];
-
- unsigned int n = GetSystemDirectory(path, MAX_PATH);
- memcpy_s(path + n, MAX_PATH, kernel32, sizeof(kernel32));
-
- unsigned int size = GetFileVersionInfoSize(path, NULL);
- if (size == 0)
- {
- return false;
- }
-
- std::vector verionInfo;
- verionInfo.resize(size);
- BOOL result = GetFileVersionInfo(path, 0, size, verionInfo.data());
- if (!result || GetLastError() != S_OK)
- {
- return false;
- }
-
- VS_FIXEDFILEINFO *vinfo;
- result = VerQueryValue(verionInfo.data(), L"\\", (LPVOID *)&vinfo, &size);
- if (!result || size < sizeof(VS_FIXEDFILEINFO))
- {
- return false;
- }
-
- return HIWORD(vinfo->dwProductVersionMS) >= 10;
-}
-
-UINT __stdcall CustomAction1(
- MSIHANDLE hInstall
-)
-{
- HRESULT hr = S_OK;
- UINT er = ERROR_SUCCESS;
-
- hr = WcaInitialize(hInstall, "CustomAction1");
- ExitOnFailure(hr, "Failed to initialize");
-
- WcaLog(LOGMSG_STANDARD, "Initialized.");
-
- // TODO: Add your custom action code here.
- auto eightOrGreater = IsWindows8OrGreater();
- if (eightOrGreater)
- {
- auto osVersion = GetOSVersionInfo();
- hr = WcaSetIntProperty(L"VersionNT", osVersion.dwMajorVersion * 100 + osVersion.dwMinorVersion);
- ExitOnFailure(hr, "Failed on set VersionNT");
- hr = WcaSetIntProperty(L"WindowsBuild", osVersion.dwBuildNumber);
- ExitOnFailure(hr, "Failed on set WindowsBuild");
- }
-
-LExit:
- er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
- return WcaFinalize(er);
-}
-
-
-// DllMain - Initialize and cleanup WiX custom action utils.
-extern "C" BOOL WINAPI DllMain(
- __in HINSTANCE hInst,
- __in ULONG ulReason,
- __in LPVOID
-)
-{
- switch (ulReason)
- {
- case DLL_PROCESS_ATTACH:
- WcaGlobalInitialize(hInst);
- break;
-
- case DLL_PROCESS_DETACH:
- WcaGlobalFinalize();
- break;
- }
-
- return TRUE;
-}
diff --git a/windows/src/main/wix/WindowsVersionCustomAction/CustomAction.def b/windows/src/main/wix/WindowsVersionCustomAction/CustomAction.def
deleted file mode 100644
index eaa41932285..00000000000
--- a/windows/src/main/wix/WindowsVersionCustomAction/CustomAction.def
+++ /dev/null
@@ -1,4 +0,0 @@
-LIBRARY "WindowsVersionCustomAction"
-
-EXPORTS
- CustomAction1
diff --git a/windows/src/main/wix/WindowsVersionCustomAction/WindowsVersionCustomAction.vcxproj b/windows/src/main/wix/WindowsVersionCustomAction/WindowsVersionCustomAction.vcxproj
deleted file mode 100644
index d75f8a5eb68..00000000000
--- a/windows/src/main/wix/WindowsVersionCustomAction/WindowsVersionCustomAction.vcxproj
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
-
- {fba5efe2-362b-4bad-a748-3248f79468ac}
- Win32Proj
- WindowsVersionCustomAction
- 10.0
-
-
-
-
- DynamicLibrary
- v145
- v143
- DynamicLibrary
- Unicode
-
-
- true
- true
-
-
- false
- true
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
- Use
- Level3
- $(WIX)sdk\$(WixPlatformToolset)\inc;%(AdditionalIncludeDirectories)
- WIN32;_WINDOWS;_USRDLL;CUSTOMACTIONTEST_EXPORTS;%(PreprocessorDefinitions)
-
-
- Windows
- CustomAction.def
- msi.lib;dutil.lib;wcautil.lib;Version.lib;%(AdditionalDependencies)
- $(WIX)sdk\$(WixPlatformToolset)\lib\x86;%(AdditionalLibraryDirectories)
-
-
-
-
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebug
- EditAndContinue
-
-
- true
-
-
-
-
- MaxSpeed
- true
- NDEBUG;%(PreprocessorDefinitions)
- MultiThreaded
- true
- ProgramDatabase
-
-
- true
- true
- true
-
-
-
-
-
- Create
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/windows/src/main/wix/WindowsVersionCustomAction/stdafx.cpp b/windows/src/main/wix/WindowsVersionCustomAction/stdafx.cpp
deleted file mode 100644
index 9a5cc24eaa5..00000000000
--- a/windows/src/main/wix/WindowsVersionCustomAction/stdafx.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "stdafx.h"
-
-// TODO: reference any additional headers you need in STDAFX.H
-// and not in this file
diff --git a/windows/src/main/wix/WindowsVersionCustomAction/stdafx.h b/windows/src/main/wix/WindowsVersionCustomAction/stdafx.h
deleted file mode 100644
index 2a8fcf239f2..00000000000
--- a/windows/src/main/wix/WindowsVersionCustomAction/stdafx.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#pragma once
-
-#include "targetver.h"
-
-#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
-// Windows Header Files:
-#include
-#include
-#include
-
-// WiX Header Files:
-#include
-
-
-// TODO: reference additional headers your program requires here
diff --git a/windows/src/main/wix/WindowsVersionCustomAction/targetver.h b/windows/src/main/wix/WindowsVersionCustomAction/targetver.h
deleted file mode 100644
index c3a06de6f83..00000000000
--- a/windows/src/main/wix/WindowsVersionCustomAction/targetver.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#pragma once
-
-#ifndef WINVER // Specifies that the minimum required platform is Windows XP.
-#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows XP.
-#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 6.0 SP3.
-#define _WIN32_IE 0x0603 // Change this to the appropriate value to target other versions of IE.
-#endif
-
-#ifndef _WIN32_MSI // Specifies that the minimum required MSI version is MSI 3.1
-#define _WIN32_MSI 310 // Change this to the appropriate value to target other versions of MSI.
-#endif
diff --git a/windows/src/test/utils/CredDeleteCommand.cs b/windows/src/test/utils/CredDeleteCommand.cs
new file mode 100644
index 00000000000..dcfe50930b1
--- /dev/null
+++ b/windows/src/test/utils/CredDeleteCommand.cs
@@ -0,0 +1,62 @@
+using System;
+using System.CommandLine;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text.RegularExpressions;
+using Windows.Win32;
+using Windows.Win32.Security.Credentials;
+using static Program;
+
+namespace test_utils;
+
+internal static class CredDeleteCommand
+{
+ internal static unsafe void Invoke(ParseResult result)
+ {
+ var patternValues = result.GetValue(CredMatch);
+ Regex[] patterns = null;
+ if (patternValues is not null)
+ {
+ patterns = new Regex[patternValues.Length];
+ var patternWriter = ((Span)patterns).GetEnumerator();
+ foreach (var item in patternValues)
+ {
+ patternWriter.MoveNext();
+ patternWriter.Current = new Regex(item, RegexOptions.Compiled);
+ }
+ }
+
+ CREDENTIALW** credentials = null;
+ try
+ {
+ if (!PInvoke.CredEnumerate(null, out var count, out credentials))
+ {
+ throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());
+ }
+
+ foreach (ref readonly var credential in new ReadOnlySpan(credentials, (int)count))
+ {
+ bool matched = false;
+ if (patterns.Length > 0 && !(matched = patterns.Any(credential.Value.TargetName.ToString().Match)))
+ {
+ continue;
+ }
+
+ Console.WriteLine($"{credential.Value.TargetName} ({credential.Value.UserName})");
+ if (matched)
+ {
+ if (!PInvoke.CredDelete(credential.Value.TargetName, credential.Value.Type, 0))
+ {
+ Console.WriteLine($" Failure deleting: {Marshal.GetLastPInvokeErrorMessage()}");
+ }
+ }
+ }
+ }
+ finally
+ {
+ PInvoke.CredFree(credentials);
+ }
+ }
+
+ private static bool Match(this string text, Regex pattern) => pattern.IsMatch(text);
+}
diff --git a/windows/src/test/utils/NativeMethods.txt b/windows/src/test/utils/NativeMethods.txt
new file mode 100644
index 00000000000..557f60df4f9
--- /dev/null
+++ b/windows/src/test/utils/NativeMethods.txt
@@ -0,0 +1,3 @@
+CredDelete
+CredEnumerate
+CredFree
diff --git a/windows/src/test/utils/Program.cs b/windows/src/test/utils/Program.cs
new file mode 100644
index 00000000000..d41b3043029
--- /dev/null
+++ b/windows/src/test/utils/Program.cs
@@ -0,0 +1,30 @@
+using System.CommandLine;
+using test_utils;
+using Windows.Win32.Security.Credentials;
+
+RootCommand command = [];
+
+Command credDeleteCommand = new("cred-delete", "Lists Credentials, and optionally deletes them when matching.");
+command.Add(credDeleteCommand);
+credDeleteCommand.SetAction(CredDeleteCommand.Invoke);
+credDeleteCommand.Add(CredMatch = new("--match")
+{
+ AllowMultipleArgumentsPerToken = true,
+ Arity = ArgumentArity.ZeroOrMore,
+ Description = "When specified, Cred-Delete will delete items matching any of the Regex patterns."
+});
+
+
+return command.Parse(args).Invoke();
+
+partial class Program
+{
+ internal static Option CredMatch;
+
+ internal readonly unsafe struct PCREDENTIALW
+ {
+ private readonly CREDENTIALW* _ptr;
+
+ public readonly ref CREDENTIALW Value => ref *_ptr;
+ }
+}
diff --git a/windows/src/test/utils/test-utils.csproj b/windows/src/test/utils/test-utils.csproj
new file mode 100644
index 00000000000..c9c7de15e2b
--- /dev/null
+++ b/windows/src/test/utils/test-utils.csproj
@@ -0,0 +1,13 @@
+
+
+
+ Exe
+ net8.0-win
+
+
+
+
+
+
+
+
\ No newline at end of file