Closed kpreisser closed 2 years ago
I think we should rename it to D3DCompiler_47_cor3.dll
in arm64
Thank you for the report, @kpreisser. Does the failure only occur when publishing as a self-contained application?
Because ARM64 WPF support doesn't include operating system versions that don't contain inbox d3dcompiler_47.dll (the shader compiler), d3dcompiler_47.dll can be excluded from the ARM64 WindowsDesktop SDK. It will always be in system32 on Windows10+.
It looks this property was meant to exclude d3dcompiler_47.dll from being copied and included in the package: https://github.com/dotnet/wpf/blob/main/src/Microsoft.DotNet.Wpf/redist/D3DCompiler/D3DCompiler.vcxproj#L52
Setting IsRedistProject
to false will exclude files from CopyRedistFile
but not CopyPackageAssets
.
Hi @ryalanms,
Yes, it seems the failure only occurs when publishing as self-contained app (when D3DCompiler_47.dll
is copied to the application directory). When I set SelfContained
as false, I can't reproduce the issue.
d3dcompiler_47.dll can be excluded from the ARM64 WindowsDesktop SDK. It will always be in system32 on Windows10+.
👍
Additionally, the current Windows 11 SDK (22000) seems to only include redistributables of D3DCompiler_47.dll
for x64
and x86
but not arm64
, so it seems to be intended to not redistribute this DLL for ARM64 and instead always use the system32
one.
Thank you!
This commit successfully removes the dll from the transport package for ARM64.
https://github.com/dotnet/wpf/commit/438d70ed139badb8400a2414db660858ae268b1f
(originally commented in #5747) I'm having issues with this on my app. Can this be back-ported to .NET 6.0.4? I'm going to wait until next LTS for upgrade so I would be stuck not being able to support arm64 users until .NET 8 (~1.5 years).
@hamarb123 Could you see https://github.com/dotnet/wpf/pull/5747 ?
@hamarb123 Could you see #5747 ?
You mean see the PR? Yes, I commented on it.
@hamarb123 Sorry, I thought this issue was fixed.
It's fixed in .NET 7 (apparently), but not for .NET 6 (I'm using 6.0.3).
@hamarb123 I remember it was merged into 6.0.3, let me check. Sorry.
The bad news is it do not merge to 6.0.3...
Okay. Will it be in 6.0.4?
@hamarb123 I ask @singhashish-wpf in https://github.com/dotnet/wpf/pull/5747#issuecomment-1074699704
And If you can't wait, you can try building the private version.
build.cmd -pack -ci -configuration Release -prepareMachine /p:Platform=x86
We are in process of pushing this to 6.0 servicing, earliest you can expect it to be in June servicing release. https://github.com/dotnet/wpf/pull/6496
Okay, thanks!
.Net 6.0.6 was just released and contains the fix for this issue: https://github.com/dotnet/wpf/releases/tag/v6.0.6
Thank you for fixing this issue and back-porting it to 6.0.6! I can confirm that Microsoft.WindowsDesktop.App.Runtime.win-arm64 6.0.6 no longer contains the stub D3DCompiler_47.dll
.
It think this issue can be closed now.
Does the bug reproduce also in WPF for .NET Framework 4.8?: No
Problem description:
When publishing a WPF app targeting .NET 5.0/6.0 for
win-arm64
(self-contained), aD3DCompiler_47.dll
file is deployed in the application directory. However, in contrast to the file from the WindowsSystem32
directory which has ~7 MB and has exports likeD3DCompile
, the file deployed by the .NET SDK has only ~23 KB and doesn't seem to have exports (it comes from the Microsoft.WindowsDesktop.App.Runtime.win-arm64 package).Apparently, the presence of this stub DLL can cause issues with 3rd party libraries like CefSharp (embedded Chromium browser), because CEF also depends on
D3DCompiler_47.dll
. In some cases when starting the application, the chromium browser hangs, and the log file contains an error that it cannot find theD3DCompile
entry point:Note: This doesn't occur when publishing the application for
win-x86
andwin-x64
, because there, a file with a different nameD3DCompiler_47_cor3.dll
is deployed instead ofD3DCompiler_47.dll
(https://github.com/dotnet/wpf/issues/37#issuecomment-494984585), and that file seems to be a copy from the Windows SDK redist files with all the necessary exports.See also https://github.com/cefsharp/CefSharp/issues/2944#issuecomment-937595542.
Minimal repro:
dotnet publish -f net5.0-windows -r win-arm64
.D3DCompile
entry point) are logged toTestCefSharpChromiumLog.txt
.D3DCompiler_47.dll
from the app's directory and also remove the corresponding entry in theTestCefSharpWpf.deps.json
file, and start the app again.D3DCompiler_47.dll
from the Windowssystem32
directory).Is this stub
D3DCompiler_47.dll
file forwin-arm64
really needed?Actual behavior: A stub
D3DCompiler_47.dll
is deployed when publishing the application, which can cause an issue in CEF as it may load that stub file instead of the one from the Windowssystem32
directory.Expected behavior: No
D3DCompiler_47.dll
file is deployed, so that CEF can load the file from the Windowssystem32
directory (or, a file with a different name likeD3DCompiler_47_cor3.dll
like in thewin-x86
andwin-arm64
packages is deployed; although that file would probably be superfluous forwin-arm64
).Thank you!