András Tóth‘s professional blog
banditoth.net

Hey there 👋, I’m banditoth a .NET MAUI developer from Hungary.
I write about software development with .NET technologies.

You can find me on:
LinkedIn | Github | StackOverflow | X / Twitter | Threads

Tag: error

  • .NET MAUI: Android Bug – Map’s MoveToRegion Method Not Updating Visible Region

    This content has 2 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    In the realm of software development, encountering bugs is an inevitable part of the process. In this blog post, we will delve into a bug specific to the Android platform in .NET MAUI applications. This bug affects the Map control, where the MoveToRegion method fails to update the visible region under certain circumstances. We will explore the symptoms of this bug and present a workaround that involves creating a custom child class of the Map control and overriding the OnPropertyChanged method of the IsVisible property.

    Symptoms

    The bug we are addressing pertains to the Map control in .NET MAUI applications on the Android platform. In some cases, the MoveToRegion method fails to modify the visible region of the map, resulting in the region staying the same despite the attempted change. This issue can lead to inconsistencies in map display and user experience.

    Workaround

    To overcome this bug, we can implement a workaround that involves creating a custom child class of the Map control and overriding the OnPropertyChanged method of the IsVisible property. By introducing a small delay and invoking the MoveToRegion method on the UI thread, we can ensure that the visible region updates correctly.

    Begin by creating a new class that derives from the Map control. This class will serve as a custom child class that incorporates the necessary workaround logic.

    public class CustomMap : Map
    {
        protected override void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            base.OnPropertyChanged(propertyName);
    
            if (propertyName == nameof(IsVisible))
            {
                if (IsVisible)
                {
                    Task.Run(async () =>
                    {
                        // Introduce a small delay before invoking MoveToRegion
                        await Task.Delay(1500);
    
                        Device.BeginInvokeOnMainThread(() =>
                        {
                            MoveToRegion(...);
                        });
                    });
                }
            }
        }
    }
    

    Replace the Map control instances in your .NET MAUI application with instances of the newly created CustomMap control. This ensures that the workaround logic is applied.

    <ContentPage ...
                 xmlns:local="clr-namespace:YourNamespace"
                 ...>
        <local:CustomMap ... />
    </ContentPage>
    
    

    The bug affecting the Map control on the Android platform in .NET MAUI applications, where the MoveToRegion method fails to update the visible region, can be frustrating for developers and users alike. However, by implementing the workaround provided in this blog post, which involves creating a custom child class of the Map control and overriding the OnPropertyChanged method of the IsVisible property, you can ensure that the visible region updates as intended.

    It’s important to note that while this workaround provides a solution to the bug, it’s advisable to keep track of official .NET MAUI updates and bug resolutions. Check for any fixes or enhancements provided by the .NET MAUI team, as they may address this bug in future releases.

    https://github.com/dotnet/maui/issues/12342

  • .NET Error: “The current NET SDK does not support targeting NET 7.0.”

    This content has 2 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.
    The current NET SDK does not support targeting NET 7.0. Either target . NET 6.0 or lower, or use a version of the NET SDK that supports .NET 7.0.
    

    This error message is indicating that the version of the .NET SDK that you are currently using does not support targeting .NET 7.0. In order to resolve this error, you have three options:

    • Update your Visual Studio instance to the latest available.
    • Target .NET 6.0 or lower in your application by modifying the target framework in your project file (e.g. .csproj) to a version lower than 7.0, and then rebuild your application.
    • Use a version of the .NET SDK that supports .NET 7.0. You can check the version of the SDK you are currently using by running dotnet --version in a command prompt or terminal, and then update it to the latest version that supports .NET 7.0.
      • You can check the SDK version by running dotnet –list-sdks and you can update your SDK version by running dotnet update sdk
      • Once you have updated your SDK version, you should be able to build your application targeting .NET 7.0 without encountering this error.
  • Xamarin.iOS : “Failed to compile the generated registrar code” on Visual Studio for Mac

    This content has 3 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    If you have recently upgraded your XCode version to 14.0, and installed the XCode command line tools too, you will probably notice some error messages when trying to run your Xamarin.Forms, or iOS application from Visual Studio for Mac.

    Error MT4109: Failed to compile the generated registrar code.
    

    What actually helped me, is this:
    Navigate to https://developer.apple.com/download/all/ and search for Command Line Tools for Xcode 13.4 and Xcode 13.4. Both downloads are big, the XCode itself around 10GB and the CL Tools are around 1GB, so definitely do not do this on metered connections.

    Once the downloads are ready, open the XCode.XP file with the Package Archiver, let it extract to downloads, then move it to Applications folder.

    After that, install CL tools. Follow the installer’s instructions.

    Boom, it’s solved. Issue reported at: https://github.com/xamarin/xamarin-macios/issues/15954

  • Xamarin.UWP: Image from embedded resource throws “Operation is not supported on this platform” error

    This content has 3 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    If you are getting the error “Operation is not supported on this platform” when you are trying to set an ImageResource from file for an image on Xamarin.UWP, then the problem comes from this line of code:

    IconSource = ImageSource.FromResource("afolder.animage.jpg");
    

    The solution: Image as Embadded Ressource shows “operation is not supported on this platform” in UWP and Release (microsoft.com)
    In a short brief: You need to use the second parameter for FromResource method call. You must pass an assembly in order to success on UWP platform. iOS and Android is not affected with this error.

    IconSource = ImageSource.FromResource("afolder.animage.jpg", typeof(AClassFromTheAssembly).Assembly);
    
  • Xamarin.Forms: ‘MSBuild:UpdateDesignTimeXaml’ code generator crashed solution

    This content has 3 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    If you are facing an issue after updating the Xamarin.Forms version in your project, with the following error:

    SOMEXAMLFILE.xaml: Error: The 'MSBuild:UpdateDesignTimeXaml' code generator crashed: Not connected
      at MonoDevelop.Core.Execution.RemoteProcessConnection.PostMessage (MonoDevelop.Core.Execution.BinaryMessage message, System.Threading.Tasks.TaskCompletionSource`1[TResult] cs, System.Boolean checkInitialized) [0x000c3] in /Users/builder/azdo/_work/2/s/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/RemoteProcessConnection.cs:438 
      at MonoDevelop.Core.Execution.RemoteProcessConnection.SendMessage (MonoDevelop.Core.Execution.BinaryMessage message) [0x00031] in /Users/builder/azdo/_work/2/s/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/RemoteProcessConnection.cs:385 
      at MonoDevelop.Projects.MSBuild.RemoteBuildEngineManager+&lt;>c__DisplayClass20_0.&lt;GetBuildEngine>b__5 () [0x00252] in /Users/builder/azdo/_work/2/s/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/RemoteBuildEngineManager.cs:323 
      at MonoDevelop.Projects.MSBuild.RemoteBuildEngineManager.GetBuildEngine (MonoDevelop.Core.Assemblies.TargetRuntime runtime, System.String minToolsVersion, System.String solutionFile, System.String group, System.Object buildSessionId, System.Boolean setBusy, System.Boolean allowBusy) [0x0036f] in /Users/builder/azdo/_work/2/s/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/RemoteBuildEngineManager.cs:273 
      at MonoDevelop.Projects.MSBuild.RemoteBuildEngineManager.GetRemoteProjectBuilder (System.String projectFile, System.String solutionFile, MonoDevelop.Core.Assemblies.TargetRuntime runtime, System.String minToolsVersion, System.Object buildSessionId, System.Boolean setBusy, System.Boolean allowBusy) [0x000df] in /Users/builder/azdo/_work/2/s/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/RemoteBuildEngineManager.cs:176 [...]
    

    Then clean your solution, and restart Visual Studio for Mac.