From 1e3b15dd072b21eada20d67f262e35fca17390ab Mon Sep 17 00:00:00 2001 From: James Charters Date: Tue, 12 May 2026 12:58:16 +1000 Subject: [PATCH 1/3] Core - Update to support ARM64 for .Net 4.8.1 --- .../CefSharp.BrowserSubprocess.Core.vcxproj | 77 +++++++++++++++ .../CefSharp.BrowserSubprocess.csproj | 5 +- .../CefSharp.Core.Runtime.vcxproj | 99 +++++++++++++++++++ CefSharp.Native.props | 11 +++ .../CefSharp.OffScreen.Example.csproj | 6 +- .../CefSharp.OffScreen.Example.netcore.csproj | 2 +- CefSharp.Test/CefSharp.Test.csproj | 9 +- CefSharp.Test/CefSharp.Test.netcore.csproj | 2 +- .../CefSharp.WinForms.Example.csproj | 6 +- .../CefSharp.WinForms.Example.netcore.csproj | 2 +- .../CefSharp.Wpf.Example.csproj | 6 +- .../CefSharp.Wpf.Example.netcore.csproj | 2 +- .../CefSharp.Wpf.HwndHost.Example.csproj | 2 +- ...fSharp.Wpf.HwndHost.Example.netcore.csproj | 2 +- CefSharp/CefRuntime.cs | 16 +-- CefSharp/CefSharp.csproj | 1 + CefSharp/DependencyChecker.cs | 2 +- CefSharp3.sln | 58 +++++++++++ NuGet/CefSharp.Common.nuspec | 11 +++ NuGet/CefSharp.Common.props | 2 + NuGet/CefSharp.Common.targets | 48 +++++++++ build.ps1 | 3 +- 22 files changed, 345 insertions(+), 27 deletions(-) diff --git a/CefSharp.BrowserSubprocess.Core/CefSharp.BrowserSubprocess.Core.vcxproj b/CefSharp.BrowserSubprocess.Core/CefSharp.BrowserSubprocess.Core.vcxproj index 9dc3d9306a..3a5cd3c57f 100644 --- a/CefSharp.BrowserSubprocess.Core/CefSharp.BrowserSubprocess.Core.vcxproj +++ b/CefSharp.BrowserSubprocess.Core/CefSharp.BrowserSubprocess.Core.vcxproj @@ -13,6 +13,10 @@ Debug x64 + + Debug + arm64 + Release Win32 @@ -21,6 +25,10 @@ Release x64 + + Release + arm64 + {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C} @@ -43,6 +51,12 @@ true Unicode + + DynamicLibrary + true + true + Unicode + DynamicLibrary false @@ -55,6 +69,12 @@ true Unicode + + DynamicLibrary + false + true + Unicode + @@ -64,12 +84,18 @@ + + + + + + true @@ -87,6 +113,14 @@ obj\$(Platform)\$(Configuration)\ $(SolutionDir)packages\$(CefSdkVer)\CEF;$(SourcePath) + + true + ..\CefSharp.snk + true + bin\$(Platform)\$(Configuration)\ + obj\$(Platform)\$(Configuration)\ + $(SolutionDir)packages\$(CefSdkVer)\CEF;$(SourcePath) + false ..\CefSharp.snk @@ -101,6 +135,13 @@ obj\$(Platform)\$(Configuration)\ $(SolutionDir)packages\$(CefSdkVer)\CEF;$(SourcePath) + + false + ..\CefSharp.snk + bin\$(Platform)\$(Configuration)\ + obj\$(Platform)\$(Configuration)\ + $(SolutionDir)packages\$(CefSdkVer)\CEF;$(SourcePath) + Level3 @@ -138,6 +179,24 @@ /ignore:4099 %(AdditionalOptions) + + + Level3 + $(SolutionDir)packages\$(CefSdkVer)\CEF;%(AdditionalIncludeDirectories);$(ProjectDir) + Disabled + WIN32;_DEBUG;EXPORT;%(PreprocessorDefinitions) + Use + true + stdcpp20 + CompileAsCpp + + + true + libcef.lib;libcef_dll_wrapper.lib;User32.lib + $(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration);$(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration)\VS$(VisualStudioProductVersion); + /ignore:4099 %(AdditionalOptions) + + Level3 @@ -171,6 +230,22 @@ $(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration);$(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration)\VS$(VisualStudioProductVersion) + + + Level3 + $(SolutionDir)packages\$(CefSdkVer)\CEF;%(AdditionalIncludeDirectories);$(ProjectDir) + WIN32;NDEBUG;EXPORT;%(PreprocessorDefinitions) + Use + true + stdcpp20 + CompileAsCpp + + + true + libcef.lib;libcef_dll_wrapper.lib + $(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration);$(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration)\VS$(VisualStudioProductVersion) + + @@ -245,8 +320,10 @@ Create Create + Create Create Create + Create diff --git a/CefSharp.BrowserSubprocess/CefSharp.BrowserSubprocess.csproj b/CefSharp.BrowserSubprocess/CefSharp.BrowserSubprocess.csproj index 3641cb9b33..dfa703168d 100644 --- a/CefSharp.BrowserSubprocess/CefSharp.BrowserSubprocess.csproj +++ b/CefSharp.BrowserSubprocess/CefSharp.BrowserSubprocess.csproj @@ -2,14 +2,15 @@ net462 WinExe - x86;x64 + x86;x64;arm64 + arm64 false false true ..\CefSharp.snk app.manifest CefSharp.BrowserSubprocess.Program - win-x86;win-x64 + win-x86;win-x64;win-arm64 diff --git a/CefSharp.Core.Runtime/CefSharp.Core.Runtime.vcxproj b/CefSharp.Core.Runtime/CefSharp.Core.Runtime.vcxproj index a741fdba49..020a60ea6d 100644 --- a/CefSharp.Core.Runtime/CefSharp.Core.Runtime.vcxproj +++ b/CefSharp.Core.Runtime/CefSharp.Core.Runtime.vcxproj @@ -13,6 +13,10 @@ Debug x64 + + Debug + arm64 + Release Win32 @@ -21,6 +25,10 @@ Release x64 + + Release + arm64 + {7B495581-2271-4F41-9476-ACB86E8C864F} @@ -42,6 +50,12 @@ true true + + DynamicLibrary + Unicode + true + true + DynamicLibrary Unicode @@ -52,6 +66,11 @@ Unicode true + + DynamicLibrary + Unicode + true + @@ -61,12 +80,18 @@ + + + + + + <_ProjectFileVersion>11.0.51106.1 @@ -95,6 +120,18 @@ obj\$(Platform)\$(Configuration)\ $(SolutionDir)packages\$(CefSdkVer)\CEF;$(SourcePath) + + false + false + ..\CefSharp.snk + AllRules.ruleset + + + CefSharp.Core.Runtime + bin\$(Platform)\$(Configuration)\ + obj\$(Platform)\$(Configuration)\ + $(SolutionDir)packages\$(CefSdkVer)\CEF;$(SourcePath) + bin\$(Platform)\$(Configuration)\ false @@ -117,6 +154,17 @@ obj\$(Platform)\$(Configuration)\ $(SolutionDir)packages\$(CefSdkVer)\CEF;$(SourcePath) + + false + AllRules.ruleset + + + CefSharp.Core.Runtime + ..\CefSharp.snk + bin\$(Platform)\$(Configuration)\ + obj\$(Platform)\$(Configuration)\ + $(SolutionDir)packages\$(CefSdkVer)\CEF;$(SourcePath) + Disabled @@ -179,6 +227,35 @@ $(LinkKeyFile) + + + Disabled + $(SolutionDir)packages\$(CefSdkVer)\CEF;%(AdditionalIncludeDirectories);$(ProjectDir) + _DEBUG;_WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;WIN32_LEAN_AND_MEAN;USING_CEF_SHARED;_CRT_SECURE_NO_WARNINGS;EXPORT;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Use + true + Level3 + ProgramDatabase + Stdafx.h + true + stdcpp20 + CompileAsCpp + + + false + + + opengl32.lib;glu32.lib;libcef.lib;libcef_dll_wrapper.lib;%(AdditionalDependencies) + $(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration);$(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration)\VS$(VisualStudioProductVersion) + false + true + true + false + false + $(LinkKeyFile) + + $(SolutionDir)packages\$(CefSdkVer)\CEF;%(AdditionalIncludeDirectories);$(ProjectDir) @@ -222,6 +299,26 @@ $(LinkKeyFile) + + + $(SolutionDir)packages\$(CefSdkVer)\CEF;%(AdditionalIncludeDirectories);$(ProjectDir) + _NDEBUG;_WIN32_WINNT=0x0600;WINVER=0x0600;WIN32;_WINDOWS;WIN32_LEAN_AND_MEAN;USING_CEF_SHARED;_CRT_SECURE_NO_WARNINGS;EXPORT;%(PreprocessorDefinitions) + MultiThreadedDLL + Use + Level3 + ProgramDatabase + true + true + stdcpp20 + CompileAsCpp + + + opengl32.lib;glu32.lib;libcef.lib;libcef_dll_wrapper.lib;%(AdditionalDependencies) + $(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration);$(SolutionDir)packages\$(CefSdkVer)\CEF\$(Platform)\$(Configuration)\VS$(VisualStudioProductVersion) + true + $(LinkKeyFile) + + true @@ -264,8 +361,10 @@ Create Create + Create Create Create + Create diff --git a/CefSharp.Native.props b/CefSharp.Native.props index 7f59ab51cb..0d13a38d2a 100644 --- a/CefSharp.Native.props +++ b/CefSharp.Native.props @@ -12,6 +12,17 @@ Include locales in the Example projects --> + + + + locales\%(RecursiveDir)%(FileName)%(Extension) + PreserveNewest + Included + false + true + + + diff --git a/CefSharp.OffScreen.Example/CefSharp.OffScreen.Example.csproj b/CefSharp.OffScreen.Example/CefSharp.OffScreen.Example.csproj index 4095b19203..2bd543cec5 100644 --- a/CefSharp.OffScreen.Example/CefSharp.OffScreen.Example.csproj +++ b/CefSharp.OffScreen.Example/CefSharp.OffScreen.Example.csproj @@ -2,12 +2,14 @@ net472 Exe - x86;x64 + x86;x64;arm64 + arm64 MinimumRecommendedRules.ruleset app.manifest false false - win-x86;win-x64 + win-x86;win-x64;win-arm64 + win-arm64 diff --git a/CefSharp.OffScreen.Example/CefSharp.OffScreen.Example.netcore.csproj b/CefSharp.OffScreen.Example/CefSharp.OffScreen.Example.netcore.csproj index 3d37367b51..ec0aeb3dbe 100644 --- a/CefSharp.OffScreen.Example/CefSharp.OffScreen.Example.netcore.csproj +++ b/CefSharp.OffScreen.Example/CefSharp.OffScreen.Example.netcore.csproj @@ -26,7 +26,7 @@ https://github.com/dotnet/docs/issues/12237 --> Major - win-x86;win-x64 + win-x86;win-x64;win-arm64 win-x86 win-x64 win-arm64 diff --git a/CefSharp.Test/CefSharp.Test.csproj b/CefSharp.Test/CefSharp.Test.csproj index 15974c96dd..e64e135217 100644 --- a/CefSharp.Test/CefSharp.Test.csproj +++ b/CefSharp.Test/CefSharp.Test.csproj @@ -2,8 +2,9 @@ net472 Library - x86;x64 - win-x86;win-x64 + x86;x64;arm64 + arm64 + win-x86;win-x64;win-arm64 false true true @@ -19,6 +20,10 @@ win-x64 + + + win-arm64 + diff --git a/CefSharp.Test/CefSharp.Test.netcore.csproj b/CefSharp.Test/CefSharp.Test.netcore.csproj index 60cad2b66d..8f6747fc62 100644 --- a/CefSharp.Test/CefSharp.Test.netcore.csproj +++ b/CefSharp.Test/CefSharp.Test.netcore.csproj @@ -20,7 +20,7 @@ x86;x64;arm64 arm64 - win-x86;win-x64 + win-x86;win-x64;win-arm64 win-x86 win-x64 win-arm64 diff --git a/CefSharp.WinForms.Example/CefSharp.WinForms.Example.csproj b/CefSharp.WinForms.Example/CefSharp.WinForms.Example.csproj index fbfba459e4..c3a5479d06 100644 --- a/CefSharp.WinForms.Example/CefSharp.WinForms.Example.csproj +++ b/CefSharp.WinForms.Example/CefSharp.WinForms.Example.csproj @@ -2,14 +2,16 @@ net472 WinExe - x86;x64 + x86;x64;arm64 + arm64 false true MinimumRecommendedRules.ruleset app.manifest CefSharp.WinForms.Example.Program false - win-x86;win-x64 + win-x86;win-x64;win-arm64 + win-arm64 diff --git a/CefSharp.WinForms.Example/CefSharp.WinForms.Example.netcore.csproj b/CefSharp.WinForms.Example/CefSharp.WinForms.Example.netcore.csproj index 959b4109a6..39a39a9d02 100644 --- a/CefSharp.WinForms.Example/CefSharp.WinForms.Example.netcore.csproj +++ b/CefSharp.WinForms.Example/CefSharp.WinForms.Example.netcore.csproj @@ -26,7 +26,7 @@ https://github.com/dotnet/docs/issues/12237 --> Major - win-x86;win-x64 + win-x86;win-x64;win-arm64 win-x86 win-x64 win-arm64 diff --git a/CefSharp.Wpf.Example/CefSharp.Wpf.Example.csproj b/CefSharp.Wpf.Example/CefSharp.Wpf.Example.csproj index 056a4f5cc2..a5a6f3ff20 100644 --- a/CefSharp.Wpf.Example/CefSharp.Wpf.Example.csproj +++ b/CefSharp.Wpf.Example/CefSharp.Wpf.Example.csproj @@ -2,14 +2,16 @@ net472 WinExe - x86;x64 + x86;x64;arm64 + arm64 false true AllRules.ruleset app.manifest CefSharp.Wpf.Example.Program false - win-x86;win-x64 + win-x86;win-x64;win-arm64 + win-arm64 diff --git a/CefSharp.Wpf.Example/CefSharp.Wpf.Example.netcore.csproj b/CefSharp.Wpf.Example/CefSharp.Wpf.Example.netcore.csproj index 66a61e95b0..678ac75012 100644 --- a/CefSharp.Wpf.Example/CefSharp.Wpf.Example.netcore.csproj +++ b/CefSharp.Wpf.Example/CefSharp.Wpf.Example.netcore.csproj @@ -27,7 +27,7 @@ https://github.com/dotnet/docs/issues/12237 --> Major - win-x86;win-x64 + win-x86;win-x64;win-arm64 win-x86 win-x64 win-arm64 diff --git a/CefSharp.Wpf.HwndHost.Example/CefSharp.Wpf.HwndHost.Example.csproj b/CefSharp.Wpf.HwndHost.Example/CefSharp.Wpf.HwndHost.Example.csproj index 939fa403bc..aac1507f27 100644 --- a/CefSharp.Wpf.HwndHost.Example/CefSharp.Wpf.HwndHost.Example.csproj +++ b/CefSharp.Wpf.HwndHost.Example/CefSharp.Wpf.HwndHost.Example.csproj @@ -2,7 +2,7 @@ net472 WinExe - x86;x64 + x86;x64;arm64 false true AllRules.ruleset diff --git a/CefSharp.Wpf.HwndHost.Example/CefSharp.Wpf.HwndHost.Example.netcore.csproj b/CefSharp.Wpf.HwndHost.Example/CefSharp.Wpf.HwndHost.Example.netcore.csproj index 6bc6e96bc6..1bbdc5994f 100644 --- a/CefSharp.Wpf.HwndHost.Example/CefSharp.Wpf.HwndHost.Example.netcore.csproj +++ b/CefSharp.Wpf.HwndHost.Example/CefSharp.Wpf.HwndHost.Example.netcore.csproj @@ -28,7 +28,7 @@ https://github.com/dotnet/docs/issues/12237 --> Major - win-x86;win-x64 + win-x86;win-x64;win-arm64 win-x86 win-x64 win-arm64 diff --git a/CefSharp/CefRuntime.cs b/CefSharp/CefRuntime.cs index 52301b9e35..6ba4cfe76b 100644 --- a/CefSharp/CefRuntime.cs +++ b/CefSharp/CefRuntime.cs @@ -5,6 +5,7 @@ using System; using System.IO; using System.Reflection; +using System.Runtime.InteropServices; namespace CefSharp { @@ -18,10 +19,10 @@ public static class CefRuntime /// /// When using AnyCPU the architecture specific version of CefSharp.Core.Runtime.dll - /// needs to be loaded (x64/x86). + /// needs to be loaded (x64/x86/arm64). /// This method subscribes to the event /// for and loads the CefSharp.Core.Runtime.dll - /// based on . + /// based on the current process architecture. /// This method MUST be called before you call Cef.Initialize, create your first ChromiumWebBrowser instance, basically /// before anything CefSharp related happens. This method is part of CefSharp.dll which is an AnyCPU library and /// doesn't have any references to the CefSharp.Core.Runtime.dll so it's safe to use. @@ -48,7 +49,7 @@ public static void SubscribeAnyCpuAssemblyResolver(string basePath = null) { string assemblyName = args.Name.Split(new[] { ',' }, 2)[0] + ".dll"; string archSpecificPath = Path.Combine(basePath, - Environment.Is64BitProcess ? "x64" : "x86", + RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant(), assemblyName); return File.Exists(archSpecificPath) @@ -75,9 +76,9 @@ public static void UnsubscribeAnyCpuAssemblyResolver() /// /// When using AnyCPU the architecture specific version of CefSharp.Core.Runtime.dll - /// needs to be loaded (x64/x86). + /// needs to be loaded (x64/x86/arm64). /// This method calls to immediately load CefSharp.Core.Runtime.dll - /// based on . + /// based on the current process architecture. /// This method MUST be called before you call Cef.Initialize, create your first ChromiumWebBrowser instance, basically /// before anything CefSharp related happens. This method is part of CefSharp.dll which is an AnyCPU library and /// doesn't have any references to the CefSharp.Core.Runtime.dll so it's safe to use. @@ -95,9 +96,8 @@ public static void LoadCefSharpCoreRuntimeAnyCpu(string basePath = null) basePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; } - var env = Environment.Is64BitProcess ? "x64" : "x86"; string archSpecificPath = Path.Combine(basePath, - env, + RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant(), assemblyName); if (File.Exists(archSpecificPath)) @@ -106,7 +106,7 @@ public static void LoadCefSharpCoreRuntimeAnyCpu(string basePath = null) } else { - throw new FileNotFoundException("Unable to load for arch " + env, archSpecificPath); + throw new FileNotFoundException("Unable to load for arch " + RuntimeInformation.ProcessArchitecture, archSpecificPath); } } } diff --git a/CefSharp/CefSharp.csproj b/CefSharp/CefSharp.csproj index e9103e6517..0778d7a2d5 100644 --- a/CefSharp/CefSharp.csproj +++ b/CefSharp/CefSharp.csproj @@ -22,6 +22,7 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CefSharp/DependencyChecker.cs b/CefSharp/DependencyChecker.cs index 41ea796cc6..a47e7d09b5 100644 --- a/CefSharp/DependencyChecker.cs +++ b/CefSharp/DependencyChecker.cs @@ -76,7 +76,7 @@ public static class DependencyChecker /// /// List of CefSharp Arch Specific Dependencies /// Those that are arch specific, - /// distributed as x86, x64 and ARM64 (coming soon for .Net 5.0 only) + /// distributed as x86, x64 and ARM64. /// public static string[] CefSharpArchSpecificDependencies = { diff --git a/CefSharp3.sln b/CefSharp3.sln index 14092052a6..6566aa3802 100644 --- a/CefSharp3.sln +++ b/CefSharp3.sln @@ -89,8 +89,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CefSharp.Wpf.HwndHost.Examp EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|arm64 = Debug|arm64 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release|arm64 = Release|arm64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection @@ -98,115 +100,171 @@ Global {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Debug|Win32.ActiveCfg = Debug|Any CPU {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Debug|Win32.Build.0 = Debug|Any CPU {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Debug|x64.ActiveCfg = Debug|Any CPU + {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Debug|arm64.ActiveCfg = Debug|Any CPU {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Debug|x64.Build.0 = Debug|Any CPU + {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Debug|arm64.Build.0 = Debug|Any CPU {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Release|Win32.ActiveCfg = Release|Any CPU {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Release|Win32.Build.0 = Release|Any CPU {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Release|x64.ActiveCfg = Release|Any CPU + {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Release|arm64.ActiveCfg = Release|Any CPU {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Release|x64.Build.0 = Release|Any CPU + {A4394E7B-1155-43A6-989E-8AB72DDDC9E4}.Release|arm64.Build.0 = Release|Any CPU {4828DAEC-EF99-4553-B674-4374F77C6D66}.Debug|Win32.ActiveCfg = Debug|x86 {4828DAEC-EF99-4553-B674-4374F77C6D66}.Debug|Win32.Build.0 = Debug|x86 {4828DAEC-EF99-4553-B674-4374F77C6D66}.Debug|x64.ActiveCfg = Debug|x64 + {4828DAEC-EF99-4553-B674-4374F77C6D66}.Debug|arm64.ActiveCfg = Debug|arm64 {4828DAEC-EF99-4553-B674-4374F77C6D66}.Debug|x64.Build.0 = Debug|x64 + {4828DAEC-EF99-4553-B674-4374F77C6D66}.Debug|arm64.Build.0 = Debug|arm64 {4828DAEC-EF99-4553-B674-4374F77C6D66}.Release|Win32.ActiveCfg = Release|x86 {4828DAEC-EF99-4553-B674-4374F77C6D66}.Release|Win32.Build.0 = Release|x86 {4828DAEC-EF99-4553-B674-4374F77C6D66}.Release|x64.ActiveCfg = Release|x64 + {4828DAEC-EF99-4553-B674-4374F77C6D66}.Release|arm64.ActiveCfg = Release|arm64 {4828DAEC-EF99-4553-B674-4374F77C6D66}.Release|x64.Build.0 = Release|x64 + {4828DAEC-EF99-4553-B674-4374F77C6D66}.Release|arm64.Build.0 = Release|arm64 {E6CB3790-F267-4AC7-892C-2620737682CA}.Debug|Win32.ActiveCfg = Debug|Any CPU {E6CB3790-F267-4AC7-892C-2620737682CA}.Debug|Win32.Build.0 = Debug|Any CPU {E6CB3790-F267-4AC7-892C-2620737682CA}.Debug|x64.ActiveCfg = Debug|Any CPU + {E6CB3790-F267-4AC7-892C-2620737682CA}.Debug|arm64.ActiveCfg = Debug|Any CPU {E6CB3790-F267-4AC7-892C-2620737682CA}.Debug|x64.Build.0 = Debug|Any CPU + {E6CB3790-F267-4AC7-892C-2620737682CA}.Debug|arm64.Build.0 = Debug|Any CPU {E6CB3790-F267-4AC7-892C-2620737682CA}.Release|Win32.ActiveCfg = Release|Any CPU {E6CB3790-F267-4AC7-892C-2620737682CA}.Release|Win32.Build.0 = Release|Any CPU {E6CB3790-F267-4AC7-892C-2620737682CA}.Release|x64.ActiveCfg = Release|Any CPU + {E6CB3790-F267-4AC7-892C-2620737682CA}.Release|arm64.ActiveCfg = Release|Any CPU {E6CB3790-F267-4AC7-892C-2620737682CA}.Release|x64.Build.0 = Release|Any CPU + {E6CB3790-F267-4AC7-892C-2620737682CA}.Release|arm64.Build.0 = Release|Any CPU {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Debug|Win32.ActiveCfg = Debug|x86 {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Debug|Win32.Build.0 = Debug|x86 {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Debug|x64.ActiveCfg = Debug|x64 + {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Debug|arm64.ActiveCfg = Debug|arm64 {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Debug|x64.Build.0 = Debug|x64 + {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Debug|arm64.Build.0 = Debug|arm64 {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Release|Win32.ActiveCfg = Release|x86 {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Release|Win32.Build.0 = Release|x86 {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Release|x64.ActiveCfg = Release|x64 + {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Release|arm64.ActiveCfg = Release|arm64 {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Release|x64.Build.0 = Release|x64 + {23EE5140-2C2C-4B53-A954-10B08DCA6BD6}.Release|arm64.Build.0 = Release|arm64 {882505AD-246D-402A-8414-347EFB8E2C8D}.Debug|Win32.ActiveCfg = Debug|Any CPU {882505AD-246D-402A-8414-347EFB8E2C8D}.Debug|Win32.Build.0 = Debug|Any CPU {882505AD-246D-402A-8414-347EFB8E2C8D}.Debug|x64.ActiveCfg = Debug|Any CPU + {882505AD-246D-402A-8414-347EFB8E2C8D}.Debug|arm64.ActiveCfg = Debug|Any CPU {882505AD-246D-402A-8414-347EFB8E2C8D}.Debug|x64.Build.0 = Debug|Any CPU + {882505AD-246D-402A-8414-347EFB8E2C8D}.Debug|arm64.Build.0 = Debug|Any CPU {882505AD-246D-402A-8414-347EFB8E2C8D}.Release|Win32.ActiveCfg = Release|Any CPU {882505AD-246D-402A-8414-347EFB8E2C8D}.Release|Win32.Build.0 = Release|Any CPU {882505AD-246D-402A-8414-347EFB8E2C8D}.Release|x64.ActiveCfg = Release|Any CPU + {882505AD-246D-402A-8414-347EFB8E2C8D}.Release|arm64.ActiveCfg = Release|Any CPU {882505AD-246D-402A-8414-347EFB8E2C8D}.Release|x64.Build.0 = Release|Any CPU + {882505AD-246D-402A-8414-347EFB8E2C8D}.Release|arm64.Build.0 = Release|Any CPU {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|Win32.ActiveCfg = Debug|x86 {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|Win32.Build.0 = Debug|x86 {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|x64.ActiveCfg = Debug|x64 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|arm64.ActiveCfg = Debug|arm64 {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|x64.Build.0 = Debug|x64 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Debug|arm64.Build.0 = Debug|arm64 {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|Win32.ActiveCfg = Release|x86 {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|Win32.Build.0 = Release|x86 {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|x64.ActiveCfg = Release|x64 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|arm64.ActiveCfg = Release|arm64 {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|x64.Build.0 = Release|x64 + {C043FFF7-5F71-4FFC-989A-E09E18548589}.Release|arm64.Build.0 = Release|arm64 {7B495581-2271-4F41-9476-ACB86E8C864F}.Debug|Win32.ActiveCfg = Debug|Win32 {7B495581-2271-4F41-9476-ACB86E8C864F}.Debug|Win32.Build.0 = Debug|Win32 {7B495581-2271-4F41-9476-ACB86E8C864F}.Debug|x64.ActiveCfg = Debug|x64 + {7B495581-2271-4F41-9476-ACB86E8C864F}.Debug|arm64.ActiveCfg = Debug|arm64 {7B495581-2271-4F41-9476-ACB86E8C864F}.Debug|x64.Build.0 = Debug|x64 + {7B495581-2271-4F41-9476-ACB86E8C864F}.Debug|arm64.Build.0 = Debug|arm64 {7B495581-2271-4F41-9476-ACB86E8C864F}.Release|Win32.ActiveCfg = Release|Win32 {7B495581-2271-4F41-9476-ACB86E8C864F}.Release|Win32.Build.0 = Release|Win32 {7B495581-2271-4F41-9476-ACB86E8C864F}.Release|x64.ActiveCfg = Release|x64 + {7B495581-2271-4F41-9476-ACB86E8C864F}.Release|arm64.ActiveCfg = Release|arm64 {7B495581-2271-4F41-9476-ACB86E8C864F}.Release|x64.Build.0 = Release|x64 + {7B495581-2271-4F41-9476-ACB86E8C864F}.Release|arm64.Build.0 = Release|arm64 {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Debug|Win32.ActiveCfg = Debug|Any CPU {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Debug|Win32.Build.0 = Debug|Any CPU {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Debug|x64.ActiveCfg = Debug|Any CPU + {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Debug|arm64.ActiveCfg = Debug|Any CPU {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Debug|x64.Build.0 = Debug|Any CPU + {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Debug|arm64.Build.0 = Debug|Any CPU {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Release|Win32.ActiveCfg = Release|Any CPU {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Release|Win32.Build.0 = Release|Any CPU {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Release|x64.ActiveCfg = Release|Any CPU + {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Release|arm64.ActiveCfg = Release|Any CPU {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Release|x64.Build.0 = Release|Any CPU + {A55848CC-10E7-40CB-ADDB-04740B16DD43}.Release|arm64.Build.0 = Release|Any CPU {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Debug|Win32.ActiveCfg = Debug|Win32 {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Debug|Win32.Build.0 = Debug|Win32 {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Debug|x64.ActiveCfg = Debug|x64 + {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Debug|arm64.ActiveCfg = Debug|arm64 {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Debug|x64.Build.0 = Debug|x64 + {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Debug|arm64.Build.0 = Debug|arm64 {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Release|Win32.ActiveCfg = Release|Win32 {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Release|Win32.Build.0 = Release|Win32 {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Release|x64.ActiveCfg = Release|x64 + {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Release|arm64.ActiveCfg = Release|arm64 {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Release|x64.Build.0 = Release|x64 + {6C4BB501-2F8E-48AC-9AB5-8CFB2D74185C}.Release|arm64.Build.0 = Release|arm64 {483B158D-F57D-49D9-9046-31E6A73F8A53}.Debug|Win32.ActiveCfg = Debug|Any CPU {483B158D-F57D-49D9-9046-31E6A73F8A53}.Debug|Win32.Build.0 = Debug|Any CPU {483B158D-F57D-49D9-9046-31E6A73F8A53}.Debug|x64.ActiveCfg = Debug|Any CPU + {483B158D-F57D-49D9-9046-31E6A73F8A53}.Debug|arm64.ActiveCfg = Debug|Any CPU {483B158D-F57D-49D9-9046-31E6A73F8A53}.Debug|x64.Build.0 = Debug|Any CPU + {483B158D-F57D-49D9-9046-31E6A73F8A53}.Debug|arm64.Build.0 = Debug|Any CPU {483B158D-F57D-49D9-9046-31E6A73F8A53}.Release|Win32.ActiveCfg = Release|Any CPU {483B158D-F57D-49D9-9046-31E6A73F8A53}.Release|Win32.Build.0 = Release|Any CPU {483B158D-F57D-49D9-9046-31E6A73F8A53}.Release|x64.ActiveCfg = Release|Any CPU + {483B158D-F57D-49D9-9046-31E6A73F8A53}.Release|arm64.ActiveCfg = Release|Any CPU {483B158D-F57D-49D9-9046-31E6A73F8A53}.Release|x64.Build.0 = Release|Any CPU + {483B158D-F57D-49D9-9046-31E6A73F8A53}.Release|arm64.Build.0 = Release|Any CPU {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Debug|Win32.ActiveCfg = Debug|x86 {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Debug|Win32.Build.0 = Debug|x86 {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Debug|x64.ActiveCfg = Debug|x64 + {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Debug|arm64.ActiveCfg = Debug|arm64 {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Debug|x64.Build.0 = Debug|x64 + {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Debug|arm64.Build.0 = Debug|arm64 {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Release|Win32.ActiveCfg = Release|x86 {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Release|Win32.Build.0 = Release|x86 {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Release|x64.ActiveCfg = Release|x64 + {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Release|arm64.ActiveCfg = Release|arm64 {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Release|x64.Build.0 = Release|x64 + {A4DEB90C-A529-4A93-ACE3-226A39EFCB00}.Release|arm64.Build.0 = Release|arm64 {7A4D5447-183B-4A11-8E63-9848991B46FF}.Debug|Win32.ActiveCfg = Debug|x86 {7A4D5447-183B-4A11-8E63-9848991B46FF}.Debug|Win32.Build.0 = Debug|x86 {7A4D5447-183B-4A11-8E63-9848991B46FF}.Debug|x64.ActiveCfg = Debug|x64 + {7A4D5447-183B-4A11-8E63-9848991B46FF}.Debug|arm64.ActiveCfg = Debug|arm64 {7A4D5447-183B-4A11-8E63-9848991B46FF}.Debug|x64.Build.0 = Debug|x64 + {7A4D5447-183B-4A11-8E63-9848991B46FF}.Debug|arm64.Build.0 = Debug|arm64 {7A4D5447-183B-4A11-8E63-9848991B46FF}.Release|Win32.ActiveCfg = Release|x86 {7A4D5447-183B-4A11-8E63-9848991B46FF}.Release|Win32.Build.0 = Release|x86 {7A4D5447-183B-4A11-8E63-9848991B46FF}.Release|x64.ActiveCfg = Release|x64 + {7A4D5447-183B-4A11-8E63-9848991B46FF}.Release|arm64.ActiveCfg = Release|arm64 {7A4D5447-183B-4A11-8E63-9848991B46FF}.Release|x64.Build.0 = Release|x64 + {7A4D5447-183B-4A11-8E63-9848991B46FF}.Release|arm64.Build.0 = Release|arm64 {B760B002-D277-4525-9F63-67ED2065034A}.Debug|Win32.ActiveCfg = Debug|Any CPU {B760B002-D277-4525-9F63-67ED2065034A}.Debug|Win32.Build.0 = Debug|Any CPU {B760B002-D277-4525-9F63-67ED2065034A}.Debug|x64.ActiveCfg = Debug|Any CPU + {B760B002-D277-4525-9F63-67ED2065034A}.Debug|arm64.ActiveCfg = Debug|Any CPU {B760B002-D277-4525-9F63-67ED2065034A}.Debug|x64.Build.0 = Debug|Any CPU + {B760B002-D277-4525-9F63-67ED2065034A}.Debug|arm64.Build.0 = Debug|Any CPU {B760B002-D277-4525-9F63-67ED2065034A}.Release|Win32.ActiveCfg = Release|Any CPU {B760B002-D277-4525-9F63-67ED2065034A}.Release|Win32.Build.0 = Release|Any CPU {B760B002-D277-4525-9F63-67ED2065034A}.Release|x64.ActiveCfg = Release|Any CPU + {B760B002-D277-4525-9F63-67ED2065034A}.Release|arm64.ActiveCfg = Release|Any CPU {B760B002-D277-4525-9F63-67ED2065034A}.Release|x64.Build.0 = Release|Any CPU + {B760B002-D277-4525-9F63-67ED2065034A}.Release|arm64.Build.0 = Release|Any CPU {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Debug|Win32.ActiveCfg = Debug|x86 {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Debug|Win32.Build.0 = Debug|x86 {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Debug|x64.ActiveCfg = Debug|x64 + {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Debug|arm64.ActiveCfg = Debug|arm64 {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Debug|x64.Build.0 = Debug|x64 + {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Debug|arm64.Build.0 = Debug|arm64 {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Release|Win32.ActiveCfg = Release|x86 + {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Release|arm64.ActiveCfg = Release|arm64 {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Release|Win32.Build.0 = Release|x86 {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Release|x64.ActiveCfg = Release|x64 {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Release|x64.Build.0 = Release|x64 + {B019C1F9-3015-4B7B-B4A4-B07DF4220CD3}.Release|arm64.Build.0 = Release|arm64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/NuGet/CefSharp.Common.nuspec b/NuGet/CefSharp.Common.nuspec index 5fdcf8ee3d..73297e95da 100644 --- a/NuGet/CefSharp.Common.nuspec +++ b/NuGet/CefSharp.Common.nuspec @@ -16,6 +16,8 @@ + + @@ -38,6 +40,10 @@ + + + + @@ -49,6 +55,11 @@ + + + + + diff --git a/NuGet/CefSharp.Common.props b/NuGet/CefSharp.Common.props index 60d131fbb4..f9b3b2f870 100644 --- a/NuGet/CefSharp.Common.props +++ b/NuGet/CefSharp.Common.props @@ -4,6 +4,7 @@ + @@ -13,5 +14,6 @@ + diff --git a/NuGet/CefSharp.Common.targets b/NuGet/CefSharp.Common.targets index 203ba21424..883c593fcb 100644 --- a/NuGet/CefSharp.Common.targets +++ b/NuGet/CefSharp.Common.targets @@ -186,6 +186,22 @@ + + + + $(CefSharpTargetDir)%(RecursiveDir)%(FileName)%(Extension) + PreserveNewest + Included + false + + + $(CefSharpTargetDir)%(RecursiveDir)%(FileName)%(Extension) + PreserveNewest + Included + false + + + @@ -267,6 +283,24 @@ + + + + $(CefSharpTargetDir)%(RecursiveDir)%(FileName)%(Extension) + PreserveNewest + Included + false + true + + + $(CefSharpTargetDir)%(RecursiveDir)%(FileName)%(Extension) + PreserveNewest + Included + false + true + + + @@ -388,6 +422,7 @@ + @@ -411,6 +446,17 @@ + + + + + + + + + + + @@ -423,6 +469,7 @@ $(TargetDir)$(CefSharpTargetDir) $(TargetDir)$(CefSharpTargetDir) + $(TargetDir)$(CefSharpTargetDir) $(CefRedist32TargetDir)x86\ $(CefRedist64TargetDir)x64\ @@ -430,6 +477,7 @@ <_CefSharpCommonManagedDll Include="$(MSBuildThisFileDirectory)..\lib\net462\CefSharp.dll" /> <_CefSharpCommonBinaries32 Include="$(MSBuildThisFileDirectory)..\CefSharp\x86\*.*" /> <_CefSharpCommonBinaries64 Include="$(MSBuildThisFileDirectory)..\CefSharp\x64\*.*" /> + <_CefSharpCommonBinariesArm64 Include="$(MSBuildThisFileDirectory)..\CefSharp\arm64\*.*" /> diff --git a/build.ps1 b/build.ps1 index 4204ca377d..9e1e4b00de 100644 --- a/build.ps1 +++ b/build.ps1 @@ -492,12 +492,11 @@ if($IsNetCoreBuild) } else { - $ARCHES.Remove("arm64") $CefSln = Join-Path $WorkingDir 'CefSharp3.sln' $NugetPackagePath = "nuget"; $NupkgFiles = @('CefSharp.Common.nuspec', 'CefSharp.WinForms.nuspec', 'CefSharp.Wpf.nuspec', 'CefSharp.OffScreen.nuspec') $VCXProjPackageConfigFiles = @('CefSharp.Core.Runtime\packages.CefSharp.Core.Runtime.config', 'CefSharp.BrowserSubprocess.Core\packages.CefSharp.BrowserSubprocess.Core.config'); - $SupportedArches.AddRange(@("x86", "x64")); + $SupportedArches.AddRange(@("x86", "x64", "arm64")); } # Extract the current CEF Redist version from the CefSharp.Core.Runtime\packages.CefSharp.Core.Runtime.config file From df49b958982fb20324da32560dc66012290e58b7 Mon Sep 17 00:00:00 2001 From: amaitland <307872+amaitland@users.noreply.github.com> Date: Fri, 26 Jun 2026 19:53:23 +1000 Subject: [PATCH 2/3] CefSharp.BrowserSubprocess.csproj - update for arm64 --- CefSharp.BrowserSubprocess/CefSharp.BrowserSubprocess.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CefSharp.BrowserSubprocess/CefSharp.BrowserSubprocess.csproj b/CefSharp.BrowserSubprocess/CefSharp.BrowserSubprocess.csproj index dfa703168d..a2f810e9a3 100644 --- a/CefSharp.BrowserSubprocess/CefSharp.BrowserSubprocess.csproj +++ b/CefSharp.BrowserSubprocess/CefSharp.BrowserSubprocess.csproj @@ -1,4 +1,4 @@ - + net462 WinExe @@ -42,6 +42,6 @@ - + \ No newline at end of file From 6bf720ea13860bd56a9b13eaecd9a5ec90c099d8 Mon Sep 17 00:00:00 2001 From: amaitland <307872+amaitland@users.noreply.github.com> Date: Sat, 27 Jun 2026 08:27:58 +1000 Subject: [PATCH 3/3] CefSharp.Common.targets - fix arm64 AnyCPU copy target --- NuGet/CefSharp.Common.targets | 1 + 1 file changed, 1 insertion(+) diff --git a/NuGet/CefSharp.Common.targets b/NuGet/CefSharp.Common.targets index 883c593fcb..3a54a6a0b3 100644 --- a/NuGet/CefSharp.Common.targets +++ b/NuGet/CefSharp.Common.targets @@ -472,6 +472,7 @@ $(TargetDir)$(CefSharpTargetDir) $(CefRedist32TargetDir)x86\ $(CefRedist64TargetDir)x64\ + $(CefRedistArm64TargetDir)arm64\ <_CefSharpCommonManagedDll Include="$(MSBuildThisFileDirectory)..\lib\net462\CefSharp.dll" />