Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Libraries missing when running 2.117.1-avalonia11 on macOS M1 #318

Open
hallivia opened this issue Nov 16, 2023 · 15 comments
Open

Libraries missing when running 2.117.1-avalonia11 on macOS M1 #318

hallivia opened this issue Nov 16, 2023 · 15 comments

Comments

@hallivia
Copy link

Hi there,

I noticed that when running on macOS M1, I get this error messages upon building:
4>Microsoft.Common.CurrentVersion.targets(5150,5): Error MSB3030 : Could not copy the file "/Debug/net7.0/libGLESv2.dylib" because it was not found.
4>Microsoft.Common.CurrentVersion.targets(5150,5): Error MSB3030 : Could not copy the file "
/Debug/net7.0/libEGL.dylib" because it was not found.
4>Microsoft.Common.CurrentVersion.targets(5150,5): Error MSB3030 : Could not copy the file "*/Debug/net7.0/libvk_swiftshader.dylib" because it was not found.

I removed the full path for privacy reasons.

Thank you

@beeradmoore
Copy link

beeradmoore commented Mar 3, 2024

I got the same error but on Intel Mac and .NET 8 and WebViewControl-Avalonia v2.121.100

0>Microsoft.Common.CurrentVersion.targets(5198,5): Error MSB3030 : Could not copy the file "AvaloniaApplication1/bin/Debug/net8.0/libvk_swiftshader.dylib" because it was not found.
0>Microsoft.Common.CurrentVersion.targets(5198,5): Error MSB3030 : Could not copy the file "AvaloniaApplication1/bin/Debug/net8.0/libGLESv2.dylib" because it was not found.
0>Microsoft.Common.CurrentVersion.targets(5198,5): Error MSB3030 : Could not copy the file "AvaloniaApplication1/bin/Debug/net8.0/libEGL.dylib" because it was not found.

Did you ever manage to find a solution?

@JaggerJo
Copy link

Same here

@joaompneves joaompneves closed this as not planned Won't fix, can't repro, duplicate, stale Jul 31, 2024
@beeradmoore
Copy link

@joaompneves can you elaborate on the "not planned" status of this issue?

I believe my issue above predates getting my M3, so it was an issue on an Intel Mac. Both are fully supported according to the readme.

@joaompneves
Copy link
Collaborator

Well, I can't reproduce and its been more than 3 months since the last report.

@beeradmoore
Copy link

I have created a repro here.

When I open that and try build I get the compile errors of

0>Microsoft.Common.CurrentVersion.targets(5270,5): Error MSB3030 : Could not copy the file "/Users/beeradmoore/git/AvaloniaWebViewTest/src/AvaloniaWebViewTest/bin/Debug/net8.0/libEGL.dylib" because it was not found.
0>Microsoft.Common.CurrentVersion.targets(5270,5): Error MSB3030 : Could not copy the file "/Users/beeradmoore/git/AvaloniaWebViewTest/src/AvaloniaWebViewTest/bin/Debug/net8.0/libGLESv2.dylib" because it was not found.
0>Microsoft.Common.CurrentVersion.targets(5270,5): Error MSB3030 : Could not copy the file "/Users/beeradmoore/git/AvaloniaWebViewTest/src/AvaloniaWebViewTest/bin/Debug/net8.0/libvk_swiftshader.dylib" because it was not found.
0>------- Finished building project: AvaloniaWebViewTest. Succeeded: False. Errors: 3. Warnings: 0
Build completed in 00:00:00.767

My initial comment was in March on my Intel Mac Mini. I am now on an M3 MacBook Pro which I got in June (to confirm my previous issue was not ARM64 related). If you have Intel Mac hardware does the above fail in the same way or does it compile fine?

Now I am on ARM64 I assume I am meant to install both WebViewControl-Avalonia and WebViewControl-Avalonia-ARM64? Can this be a single package with multi targeting?

With that second package I get a runtime error of

System.IO.FileNotFoundException: Could not load file or assembly 'WebViewControl.Avalonia, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.

I couldn't see any other initialize code in the samples so I think its all setup correctly, I assume this is a different issue as it at least now compiles?

@joaompneves
Copy link
Collaborator

Check the latest version: 3.120.5. We removed the support for dotnet 6 which was causing some build issues.

@beeradmoore
Copy link

beeradmoore commented Sep 4, 2024

Hey @joaompneves , this does not appear to be fixed.

I updated nuget packages in this commit, but it still produces

0>Microsoft.Common.CurrentVersion.targets(5321,5): Error MSB3030 : Could not copy the file "[gitpath]/AvaloniaWebViewTest/src/AvaloniaWebViewTest/bin/Debug/net8.0/libGLESv2.dylib" because it was not found.
0>Microsoft.Common.CurrentVersion.targets(5321,5): Error MSB3030 : Could not copy the file "[gitpath]/AvaloniaWebViewTest/src/AvaloniaWebViewTest/bin/Debug/net8.0/libEGL.dylib" because it was not found.
0>Microsoft.Common.CurrentVersion.targets(5321,5): Error MSB3030 : Could not copy the file "[gitpath]/AvaloniaWebViewTest/src/AvaloniaWebViewTest/bin/Debug/net8.0/libvk_swiftshader.dylib" because it was not found.

I accidentally found an option in JetBrains Rider to build with diagnostic. There is some things in here that may be useful and/or make sense to you.

JetBrainsLog.ReSharperBuild_2024_09_04_22_13_58_6956.log.zip

         Output Item(s): 
             _NoneWithTargetPath=
                 app.manifest
                         OriginalItemSpec=app.manifest
                         TargetPath=app.manifest
                 bin/Debug/net8.0//libEGL.dylib
                         CopyToOutputDirectory=PreserveNewest
                         CopyToPublishDirectory=PreserveNewest
                         Link=CefGlueBrowserProcess\libEGL.dylib
                         OriginalItemSpec=bin/Debug/net8.0//libEGL.dylib
                         PublishState=Included
                         TargetPath=CefGlueBrowserProcess\libEGL.dylib
                         Visible=false

I don't think this is related, but it seems odd to be missing something in bin/Debug/net8.0//libEGL.dylib. I think a pathname like that is allowed I did initially think that maybe there is no runtime identifier (which looking back wouldn't be added there AFAIK).

I also saw some places referencing bin/Debug/net8.0/CefGlueBrowserProcess/libvk_swiftshader.dylib which is in a sub-folder so I went to have a look at that and see what's in it. It does not exist. The only folder is runtimes.

Screenshot 2024-09-05 at 8 24 55 AM

osx is sitting there without a seperate folder for osx-x64 and osx-arm64 which I would expect. Unless this is doing a universal build or something 🤷‍♂️

The next folder I clicked on was win-x64 and there were a bunch of files in there. But looking further the osx folder looks similar to linux-x64 and win-arm64. So either they are not building fine either and only win-x64 is building correctly or this is completely unrelated and I am chasing ghosts looking in here. win-x64 does have the dll variants of all the missing files though.

Screenshot 2024-09-05 at 8 28 41 AM

EDIT: I remembered earlier it did work with WebViewControl-Avalonia-ARM64 nuget package. I thought this would be a dependency of WebViewControl-Avalonia but it is not. Removing WebViewControl-Avalonia and adding WebViewControl-Avalonia-ARM64 causes the build to work again. Checking runtimes/ folder it is the same layout as before. So that is unrelated.

BUT that CefGlueBrowserProcess folder does appear now.

Screenshot 2024-09-05 at 8 33 14 AM

I don't know if as a user building a multi-platform app if I am meant to have both packages, or just the ARM64, or if the normal one is meant to do what the ARM64 one is doing.

Hopefully that is some info that you may know what is going on and advise how to use it as intended.

@joaompneves
Copy link
Collaborator

Hi,

I suggest 2 things:

  • start from a clean checkout
  • use either WebViewControl-Avalonia-ARM64 or WebViewControl-Avalonia depending on the target architecture you want to run on.

@beeradmoore
Copy link

My final target is both Windows (x64) and macOS (x64 and arm64)

I guess I just need to get funky with some conditions in the csproj and change what nuget is being used at that particular time.

I also have not tried what happens if I have both 👀

Is there any technical reason why there is 2 nugets, or is it just that you don't have arm64 to test with correctly so it's left as a seperate nuget?

@joaompneves
Copy link
Collaborator

Yeah you will need 2 different builds.

CEF binaries are architecture and platform dependant, so we opted for 2 different nugets (x64 and ARM64), instead of a single MSIL one. At the end of the day if you want a smaller deploy package you should have different installation packages for your app depending on the arch and platform (windows, ox, linux).

@beeradmoore
Copy link

Ah yep, that makes sense.

Just to confirm, that means linux-arm64 and win-arm64 will be in the same boat and require the different nuget for their platform?

@joaompneves
Copy link
Collaborator

joaompneves commented Sep 5, 2024

The ARM64 nuget will bring the arm64 libs for win, osx and linux.
The non ARM64 nuget will bring the x64 libs for win, osx and linux.

@beeradmoore
Copy link

beeradmoore commented Sep 6, 2024

I updated my repro project here so it now works. I also updated the readme to what I did.

In short it's changing from building Any CPU to instead explicitly x64 and arm64. And then finally including the nugets like this.

<ItemGroup Condition="'$(Platform)' == 'x64'">
    <PackageReference Include="WebViewControl-Avalonia" Version="3.120.5" />
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'arm64'">
    <PackageReference Include="WebViewControl-Avalonia-ARM64" Version="3.120.5" />
</ItemGroup>

I built and run my test project on macOS arm64 machine, then went over to my Windows x64 machine, pulled the repo and it also run fine.

If the above is the correct way to use the library would It be possible to get the readme updated to add that in somehow? Readme currently says to go to the same project on how to use it. But the sample project references the project directly, not consuming one or the other nuget packages.

I was going to do a PR but after I wrote in my readme how I got it to work I wasn't sure if that is the correct wording to use to have it make sense to people.

Other than that, I think this issue can be closed as it is working once you setup your project correctly.

@joaompneves
Copy link
Collaborator

Would you mind creating a PR with just the appropriate changes to the readme?

@beeradmoore
Copy link

I am not a good wordsmith, but I'll give it a shot over the next few days

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants