Closed whodges closed 1 week ago
Hi I'm an AI powered bot that finds similar issues based off the issue title.
Please view the issues below to see if they solve your problem, and if the issue describes your problem please consider closing this one and thumbs upping the other issue to help us prioritize it. Thank you!
Note: You can give me feedback by thumbs upping or thumbs downing this comment.
I dug in a bit more, trying different versions. Everything builds fine with 8.0.70, and then this rebuild issue appears with 9.0.0-preview.1.9973.
Can you create and attach a binlog please? https://github.com/dotnet/maui/wiki/Capturing-Binary-Logs
@jonathanpeppers ?
Yep, np. I editted in two attached two binlogs: binlog_success is from the first rebuild, and binlog_fail is from the subsequent rebuilds.
EDIT: Added a third one, which is when I try and deploy the second build. It's the same UnauthorizedAccessException error, but involving different files.
This issue has been verified using Visual Studio 17.11.0 Preview 3 (9.0.0-preview.1.9973 & 9.0.0-preview.6.24327.7). Cannot repro it. I followed the steps to reproduce, but the problem did not reoccur on both machines (17.11.0 Preview 3+Net 9 preview 5, 17.11.0 Preview 3 +NET9 preview 6). Are there any other special steps? If so, please let me know.
Ok - I just tried it on a completely different computer that I installed the latest .NET 9 SDK on, along with the latest preview version of VS 2022 (9.0.0-preview.6.24327.7 and 17.11.0 Preview 3.0, respectively), and I got the exact same UnauthorizedAccessException involving 'GoogleGson.dll'.
I just made a github of the .NET 9.0 MAUI app itself, but again, it's just the default app that VS creates for you: https://github.com/whodges/mauiapp1.git. Not sure if that helps.
I'm 100% open to doing anything that would shed more light on this for you all. I was going to chalk this up to something involving my environment, but reproducing it on a separate machine concerns me. I totally get though that this is something that would've been noticed early on your end, so why I seem to be the only one experiencing it is definitely odd.
EDIT: Here's the binlog from the other machine:
EDIT2: A screenshot just because:
EDIT3: And again, if I switch to .NET 8 (MAUI 8.0.70), everything is fine.
Just tried again with 17.11.0 Preview 4.0. Same issue: the first build works, then 'Rebuild Solution' results in Access to the path 'GoogleGson.dll' is denied
. Following it with 'Build Solution' results in Access to the path 'D:\Projects\MauiApp1\obj\Debug\net9.0-android\android\assets\armeabi-v7a\MauiApp1.dll is denied
.
Note that this only happens with Debug builds. Everything is fine with Release.
I get the same error in a MAUI Project with .NET9 and with Visual Studio 17.11 Preview 2.1. With NET8 everything works without problems
The last error:
Error XA0127: Error deploying 'files/.__override__/arm64-v8a/ar//Microsoft.Maui.Controls.resources.dll' using 'xamarin.sync: error: could not open 'files/.__override__/arm64-v8a/ar//Microsoft.Maui.Controls.resources.dll'.'.
Please set the 'EmbedAssembliesIntoApk' MSBuild property to 'true' to disable Fast Deployment in the Visual Studio project property pages, or edit the project file in a text editor.
Should be fixed in:
Which should hopefully be in .NET 9 Preview 7.
I tried with the .NET 9 Preview 7 build we are working on, I can't seem to reproduce the UnauthorizedAccessException
even with 4 Rebuilds:
If you are having this issue, can you use a tool like ProcessExplorer to find out what process is locking the file:
System.UnauthorizedAccessException: Access to the path 'GoogleGson.dll' is denied.
I tried both procexp and tasklist; unfortunately neither reports that any program currently has the file in use. I dug in a bit more though and found that every file in obj\Debug\net9.0-android\android\assets\armeabi-v7a
is locked (that is, if you try and delete it via Explorer, you'll get a "the file is open in another program" error, though any unlocking utility will report the file as being unlocked). That program is obvious either VS or related to VS, as closing VS unlocks that directory and its files (and a Rebuild will then work - but just once because then obj\Debug\net9.0-android\android\assets\armeabi-v7a
gets locked again).
EDIT: I tried this using 17.11.0 Preview 7.0.
@whodges
Do you have any third party Visual Studio extensions installed (just trying to eliminate causes) for things like code formatting or intellisense. What kind of Anti Virus do you have installed? Do you use hot reload?
Those files are clearly being locked by VS but its odd that it does not show up in the procexp 🤔
The only non-MS extensions I have are Multiline Search and Replace (Helixsoft) and Xamarin.Android SDK. AV is just MS Defender. But on the other Win 10 system I tried this on, there's no AV and no extensions installed. Yes I have Hot Reload active on both, but just tried disabling it to no avail; the same error occurs.
I tested this on a DevBox/Virtual Machine, and I noticed the project by default is saved on a Dev Drive.
Let me just check if anything different happens on a regular drive where Windows Defender will do its standard scanning on file writes.
@whodges does anything different happen if you have a Windows Defender exclusion for the folder where the project is saved?
Just tried the exclusion; no luck
Still occurs on version 17.12.0 Preview 1.0
I've got similar issue.
17.12.0 Preview 1.0/.NET9 Preview 7 -> New MAUI project -> Build:
Output: System.UnauthorizedAccessException: Access to the path is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.File.InternalDelete(String path, Boolean checkHost) at Microsoft.Android.Build.Tasks.Files.CopyIfChanged(String source, String destination) in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/Files.cs:line 125 at Xamarin.Android.Tasks.MonoAndroidHelper.CopyAssemblyAndSymbols(String source, String destination) in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs:line 344 at Xamarin.Android.Tasks.LinkAssembliesNoShrink.CopyIfChanged(ITaskItem source, ITaskItem destination) in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Tasks/LinkAssembliesNoShrink.cs:line 161 at Xamarin.Android.Tasks.LinkAssembliesNoShrink.RunTask() in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Tasks/LinkAssembliesNoShrink.cs:line 76 at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 25
It works when I start VS as Administrator. But after a few builds and run it appears again. So it looks like file handler is not closed/some process is still running.
Interesting - it happens for me running VS as admin no matter what after the first build.
I also wonder if it could be some regional settings for whatever weird reason? I’m in Canada.
This will help diagnose these types of issues:
But it looks like I should add UnauthorizedAccessException
, which is perhaps thrown by File.Delete()
?
Hi! In my situation, MsBuild.exe holds onto .dll files. If I kill that specific MsBuild instance (identified using Process Explorer), I can build the app again. Additionally, I’ve noticed that if I wait for a minute or so, the process eventually releases the .dll files, allowing me to build once more. While there’s no specific reproducible scenario, I’ve observed that certain workflows trigger this issue with locked app .dll files (it's not always the app dll, for example once it was the CommunityToolkit.Mvvm.dll):
Case 1:
Case 2:
Case 3:
Important Note: I’ve tried the mentioned scenarios with a blank/sample app using .NET 8.0 LTS, and it works perfectly. Additionally, deployment to the emulator also seems faster.
TargetFrameworks: net9.0-android;net9.0-ios;net9.0-maccatalyst VS: 17.12.0 Preview 1.0 Emulator: Pixel 5- API 34 (Android 14.0 - API 34) dotnet --version : 9.0.100-preview.7.24407.12
Exception:
System.UnauthorizedAccessException: Access to the path '<MY PATH :)>\repos\MauiApp2\MauiApp2\obj\Debug\net9.0-android\android\assets\armeabi-v7a\MauiApp2.dll' is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.File.InternalDelete(String path, Boolean checkHost) at Microsoft.Android.Build.Tasks.Files.CopyIfChanged(String source, String destination) in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/Files.cs:line 125 at Xamarin.Android.Tasks.MonoAndroidHelper.CopyAssemblyAndSymbols(String source, String destination) in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs:line 344 at Xamarin.Android.Tasks.LinkAssembliesNoShrink.CopyIfChanged(ITaskItem source, ITaskItem destination) in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Tasks/LinkAssembliesNoShrink.cs:line 161 at Xamarin.Android.Tasks.LinkAssembliesNoShrink.RunTask() in /Users/runner/work/1/s/xamarin-android/src/Xamarin.Android.Build.Tasks/Tasks/LinkAssembliesNoShrink.cs:line 76 at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 25
@pjeremic can you share a .binlog
of either 1) a build that worked (but must be locking a file), and 2) the build that locked the file? https://aka.ms/binlog
I've done the scenarios you've listed above, and they work for me, but .NET 9 RC 1 was released the other day, you might also give it a try.
@jonathanpeppers
Sorry for the late reply. I’ve updated Visual Studio and .NET, but unfortunately, it hasn’t resolved the issue.
In your case, the file is: obj\Debug\net9.0-android\android\assets\x86_64\MauiApp2.dll
Seems like only two tasks would touch it, looking at these logs:
<LinkAssembliesNoShrink/>
would do Files.CopyIfChanged()
<FastDeploy/>
would open the file for reading, and deployThere are some changes to how the DirectoryAssemblyResolver
is Dispose()
d in .NET 9:
This is running for a single architecture, x86_64
, but I don't think I see an issue in here offhand. It looks like it would be Dispose()
d.
/cc @grendello @dellis1972
My guess is with the IDE closed and building from the command line this is not happening. There is something in the IDE probably a Design Time build which is locking these files it seems.
The reporting for this issue may be improved due to dotnet/android-tools@ab2165da. (Does it work for directories as well as files?)
Maybe this also needs to check Directory.Exists()
:
I would also need to test in what ways that could happen. I don't offhand remember if .NET has an easy API that locks a directory (like Directory.OpenHandle()
???), but there are definitely Windows p/invoke's that could be used.
If it helps, here are my latest success (1st rebuild) and failure (2nd rebuild) binlogs using the latest MAUI workload and VS 17.12.0 Preview 2.1.
@whodges can you install Project System Tools extension and capture the design time bin logs as well? Also have you tried to reproduce from just the command line (i.e no IDE open).
The command line (dotnet build --no-incremental
) works perfectly fine on its own. If, however, I have the IDE open, and have used it to build the solution once, both the IDE and the command line will fail with the same UnauthorizedAccessException
, suggesting that it is indeed the IDE that's locking the Android files.
Design binlogs attached (not sure if I captured them right but I think I did)
@whodges Thanks for the logs. Unfortunately they do not have the error in them? Both the android based logs have succeeded. If you get a moment try to repo it with the logger on.
The design time logs or the build logs? It seems like the design time logs get generated when you open the solution rather than when you build it?
The design time logs or the build logs? It seems like the design time logs get generated when you open the solution rather than when you build it?
So what we need is all the logs. So open the IDE and kick of the binlogs collection tool. Open your solution and try to repo the issue. Once you get the UnauthorizedAccessException, then stop the logging and send us all the logs. We need to get an idea of which design time were running at the time the error occured.
Same here, it can't delete the main project dll. It is blocker by an instance of MsBuild
Workaround for now is to keep killing the lingering msbuild processes.
I wonder if there is a way to set the start arguments for the msbuild process which is causing the issue?
I also encountered almost the same problem, but my current solution is to switch to Windows Machine, stop it and switch back to Android, and it will return to normal. In addition, this problem happens occasionally, even if I don't modify any code. I am currently using Visual Studio 2022 v17.12 preview 2, .net 9 rc2, and the project was created using the "maui-blazor-web" template
Corrected logs attached - sorry for the wait
The issue still exists with the final versions of .NET 9 and Visual Studio 17.12. Why was this closed, when it is still not fixed?
Yeah. Still happens for me too. I can't use .NET 9 because of it; stuck on 8.
The issue here is Defender is locking these files. We added some additional handling in .net 9 which should report which program has the file or directory locked.
So please reopen this issue. With previous version everything is working fine, after upgrading you have to restart Visual Studio or kill hundreds of msbuild processes EVERYTIME you change your code und build your solution... so it is impossible to work anymore and this issue happens for everyone, this is a BIG ISSUE which needs an urgent Hot Fix!
This still happens in the latest VS 17.12 and it is frustrating. Every edit seems to cause the error and you can't run your MAUI project smoothly. It only works once/twice when you close VS.
@Sascha-L @arahmancsd do you have the logs for the errors you are seeing? We need to collect data
@dellis1972 Create a MAUI project, start debugging with Android Emulator, stop, change code, run again. That's it. It will happen to you too. So no logs are needed, when this issue happens for everyone.
@Sascha-L I have never been able to repo this on the devbox's I have access to, and it does not happen on macos.
Also there are various points in the build where this issue might happen unless you are getting the exact XARDF7019
error?
So you can try to set the following environment variables these control how we try to retry file writes in .net 9 android.
DOTNET_ANDROID_FILE_WRITE_RETRY_ATTEMPTS=10
DOTNET_ANDROID_FILE_WRITE_RETRY_DELAY_MS=1000
The defaults as as above. You can try to change these to see if they make any difference.
I've tried to repeat the build process with Windows Defender disabled and this file locking still occurs, so I don't think it's the culprit. Nor do I believe the retry attempts/delays will accomplish anything as this isn't a timing issue: the files are locked and they'll continue to be locked until the IDE is closed and restarted.
I appreciate it's very, very difficult to diagnose/solve a problem when you can't reproduce it. I've been there many times myself. I'm happy to help in anyway possible to help solve this, either by following whatever debugging ideas you may have, or even granting you remote access to my system for testing. Like I said before, I'm running Windows 10 on a physical machine (not a VM).
What do we know: this only happens with .NET 9, and not with 8 and earlier. It's also tied to Android. So what's changed in .NET 9 with the Android build process?
I've attached the latest binlog the build failure.
MauiApp1_Debug_AnyCPU_Build_2024-11-19T11_36_59.0220817-05_00.zip
To clarify my previous comment: if you uncheck 'Enable targeting of the Android platform' in the project properties, these locking errors go away.
Ok, so the initial investigation led us to believe that it was Defender causing this issue and that the retry code we put in place would help. I'm going to re-open this issue since this does not appear to be the case.
@jonathanpeppers can you remember the url for the instructions to install the System tools which allow users to see which processes have files locked?
I think Sysinternals Process Explorer is the easiest one to use:
Description
I just moved to MAUI 9 this morning (specifically 9.0.0-preview.6.24327.7). I was using .NET 8.0 prior to this and everything was fine. I noticed that the first build of solution would work fine, but if I did a rebuild all, the build would fail with an UnauthorizedAccessException. The only way I can get it to go away is to close and reopen VS (I'm using 17.11.0 Preview 3.0, for the record, running in admin mode on Win 10). After that, it builds again, but only once before I start getting the UnauthorizedAccessExceptions.
To investigate, I made a blank .NET MAUI 8 app and tried it - everything builds fine. You can 'Rebuild All' as many times as you want and it'll compete successfully.
Then I made a blank .NET MAUI 9 app and built it - it was fine the first time. Then I tried 'Rebuild All' and, unfortunately, ran into the same UnauthorizedAccessExceptions during the build:
and
These all seem to be Android-releated. And when I try to deploy the successful build to my Android device, I get this error:
I never got this error with .NET 8.0. Again, this is a fresh MAUI 9.0 app.
Steps to Reproduce
Link to public reproduction project repository
https://github.com/whodges/mauiapp1
Version with bug
9.0.0-preview.1.9973
Is this a regression from previous behavior?
Yes, this used to work in .NET MAUI
Last version that worked well
8.0.70
Affected platforms
Android
Affected platform versions
Android 31
Did you find any workaround?
Close and restart Visual Studio (but you'll only get one build out of it).
Relevant log output
binlog_success.zip binlog_fail.zip binlog_deploy_fail.zip