Skip to content

Migrating to RC1

Gerald Versluis edited this page May 2, 2022 · 12 revisions

Microsoft.Maui.Essentials Updates

Usage

To use these updated classes in your .NET MAUI app, you can use their their *.Current or *.Default implementation:

DeviceDisplay.Current.KeepScreenOn = true;
await Browser.Default.OpenAsync();

Dependency Injection

When using the default implementation of these classes with dependency injection, we recommend adding their *.Current or *.Default implementation as a Singleton into IServiceCollection:

builder.Services.AddSingleton<IBrowser>(Browser.Default);
builder.Services.AddSingleton<IDeviceDisplay>(DeviceDisplay.Current);

Note: In previous releases (e.g. .NET MAUI Preview 14) we would've used *Implementation, e.g. builder.Services.AddSingleton<IBrowser, BrowserImplementation>();

Namespace Changes

https://github.com/dotnet/maui/pull/5562

namespace Microsoft.Maui.Accessibility {
    public interface ISemanticScreenReader {}
    public static class SemanticScreenReader {}
}
namespace Microsoft.Maui.ApplicationModel {
    public enum ActivityState {}
    public class ActivityStateChangedEventArgs : EventArgs {}
    public class AppAction {}
    public class AppActionEventArgs : EventArgs {}
    public static class AppActions {}
    public static class AppInfo {}
    public enum AppPackagingModel {}
    public enum AppTheme {}
    public static class Browser {}
    public enum BrowserLaunchFlags {}
    public enum BrowserLaunchMode {}
    public class BrowserLaunchOptions {}
    public enum BrowserTitleMode {}
    public class FeatureNotEnabledException : InvalidOperationException {}
    public class FeatureNotSupportedException : NotSupportedException {}
    public interface IAppActions {}
    public interface IAppInfo {}
    public interface IBrowser {}
    public interface ILauncher {}
    public interface IMap {}
    public interface IVersionTracking {}
    public static class Launcher {}
    public enum LayoutDirection {}
    public static class MainThread {}
    public static class Map {}
    public class MapLaunchOptions {}
    public enum NavigationMode {}
    public class OpenFileRequest {}
    public class PermissionException : UnauthorizedAccessException {}
    public static class Permissions {}
    public enum PermissionStatus {}
    public static class Platform {}
    public static class VersionTracking {}
}
namespace Microsoft.Maui.ApplicationModel.Communication {
    public class Contact {}
    public class ContactEmail {}
    public class ContactPhone {}
    public static class Contacts {}
    public static class Email {}
    public class EmailAttachment : FileBase {}
    public enum EmailBodyFormat {}
    public class EmailMessage {}
    public interface IContacts {}
    public interface IEmail {}
    public interface IPhoneDialer {}
    public interface ISms {}
    public static class PhoneDialer {}
    public static class Sms {}
    public class SmsMessage {}
}
namespace Microsoft.Maui.ApplicationModel.DataTransfer {
    public static class Clipboard {}
    public interface IClipboard {}
    public interface IShare {}
    public static class Share {}
    public class ShareFile : FileBase {}
    public class ShareFileRequest : ShareRequestBase {}
    public class ShareMultipleFilesRequest : ShareRequestBase {}
    public abstract class ShareRequestBase {}
    public class ShareTextRequest : ShareRequestBase {}
}
namespace Microsoft.Maui.Authentication {
    public static class AppleSignInAuthenticator {}
    public interface IAppleSignInAuthenticator {}
    public interface IPlatformWebAuthenticatorCallback {}
    public interface IWebAuthenticator {}
    public static class WebAuthenticator {}
    public abstract class WebAuthenticatorCallbackActivity : Activity {}
    public class WebAuthenticatorOptions {}
    public class WebAuthenticatorResult {}
}
namespace Microsoft.Maui.Devices {
    public static class Battery {}
    public class BatteryInfoChangedEventArgs : EventArgs {}
    public enum BatteryPowerSource {}
    public enum BatteryState {}
    public static class DeviceDisplay {}
    public readonly struct DeviceIdiom : IEquatable<DeviceIdiom> {}
    public static class DeviceInfo {}
    public readonly struct DevicePlatform : IEquatable<DevicePlatform> {}
    public enum DeviceType {}
    public readonly struct DisplayInfo : IEquatable<DisplayInfo> {}
    public class DisplayInfoChangedEventArgs : EventArgs {}
    public enum DisplayOrientation {}
    public enum DisplayRotation {}
    public enum EnergySaverStatus {}
    public class EnergySaverStatusChangedEventArgs : EventArgs {}
    public static class Flashlight {}
    public static class HapticFeedback {}
    public enum HapticFeedbackType {}
    public interface IBattery {}
    public interface IDeviceDisplay {}
    public interface IDeviceInfo {}
    public interface IFlashlight {}
    public interface IHapticFeedback {}
    public interface IVibration {}
    public static class Vibration {}
}
namespace Microsoft.Maui.Devices.Sensors {
    public static class Accelerometer {}
    public class AccelerometerChangedEventArgs : EventArgs {}
    public readonly struct AccelerometerData : IEquatable<AccelerometerData> {}
    public enum AltitudeReferenceSystem {}
    public static class Barometer {}
    public class BarometerChangedEventArgs : EventArgs {}
    public readonly struct BarometerData : IEquatable<BarometerData> {}
    public static class Compass {}
    public class CompassChangedEventArgs : EventArgs {}
    public readonly struct CompassData : IEquatable<CompassData> {}
    public enum DistanceUnits {}
    public static class Geocoding {}
    public static class Geolocation {}
    public enum GeolocationAccuracy {}
    public class GeolocationRequest {}
    public static class Gyroscope {}
    public class GyroscopeChangedEventArgs : EventArgs {}
    public readonly struct GyroscopeData : IEquatable<GyroscopeData> {}
    public interface IAccelerometer {}
    public interface IBarometer {}
    public interface ICompass {}
    public interface IGeocoding {}
    public interface IGeolocation {}
    public interface IGyroscope {}
    public interface IMagnetometer {}
    public interface IOrientationSensor {}
    public interface IPlatformCompass {}
    public class Location {}
    public static class LocationExtensions {}
    public static class Magnetometer {}
    public class MagnetometerChangedEventArgs : EventArgs {}
    public readonly struct MagnetometerData : IEquatable<MagnetometerData> {}
    public static class OrientationSensor {}
    public class OrientationSensorChangedEventArgs : EventArgs {}
    public readonly struct OrientationSensorData : IEquatable<OrientationSensorData> {}
    public class Placemark {}
    public static class PlacemarkExtensions {}
    public enum SensorSpeed {}
}
namespace Microsoft.Maui.Media {
    public interface IMediaPicker {}
    public interface IScreenshot {}
    public interface IScreenshotResult {}
    public interface ITextToSpeech {}
    public class Locale {}
    public static class MediaPicker {}
    public class MediaPickerOptions {}
    public static class Screenshot {}
    public static class ScreenshotExtensions {}
    public enum ScreenshotFormat {}
    public class SpeechOptions {}
    public static class TextToSpeech {}
    public static class UnitConverters {}
}
namespace Microsoft.Maui.Networking {
    public enum ConnectionProfile {}
    public static class Connectivity {}
    public class ConnectivityChangedEventArgs : EventArgs {}
    public interface IConnectivity {}
    public enum NetworkAccess {}
}
namespace Microsoft.Maui.Storage {
    public abstract class FileBase {}
    public static class FilePicker {}
    public class FilePickerFileType {}
    public class FileProvider : FileProvider {}
    public enum FileProviderLocation {}
    public class FileResult : FileBase {}
    public static class FileSystem {}
    public interface IFileSystem {}
    public interface IPlatformFileSystem {}
    public interface IPlatformSecureStorage {}
    public interface IPreferences {}
    public interface ISecureStorage {}
    public class PickOptions {}
    public static class Preferences {}
    public class ReadOnlyFile : FileBase {}
    public static class SecureStorage {}
}

Windows Package References

These packages are no longer needed in your csproj and can be removed. They are added transitive as part of .NET MAUI now.

<ItemGroup Condition="$(TargetFramework.Contains('-windows'))">
  <PackageReference Include="Microsoft.WindowsAppSDK" Version="1.0.0" />
  <PackageReference Include="Microsoft.Graphics.Win2D" Version="1.0.0.30" />
</ItemGroup>

BlazorWebView

If you have been using Blazor in your .NET MAUI app, you need to change some things in your MauiProgram.cs.

  1. Remove using Microsoft.AspNetCore.Components.WebView.Maui; (if you have it)
  2. Remove builder.Services.AddBlazorWebView();
  3. Remove the .RegisterBlazorMauiWebView() line from your builder instance
  4. Add it as a service registration builder.Services.AddMauiBlazorWebView();

Sample code of the new code you should use

var builder = MauiApp.CreateBuilder();
builder
	//.RegisterBlazorMauiWebView() // Remove this line!
	.UseMauiApp<App>()
	.ConfigureFonts(fonts =>
	{
		fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
	});

        // builder.Services.AddBlazorWebView(); // You can remove this line
	builder.Services.AddMauiBlazorWebView(); // Add this line

csproj Changes (RC2)

  • Add the ApplicationIdGuid tag with a new random GUID to the csproj under the ApplicationId tag. For example:
	<!-- App Identifier -->
	<ApplicationId>com.companyname.mauiapp.MyApp</ApplicationId>
	<ApplicationIdGuid>REPLACE-WITH-YOUR-GUID</ApplicationIdGuid>
  • You can remove the full framework requirement from the Windows TargetFramework now as it can be built with dotnet now as well. You can replace <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows')) and '$(MSBuildRuntimeType)' == 'Full'"><!-- rest of the things here --></TargetFrameworks> by <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))"><!-- rest of the things here --></TargetFrameworks> this also enables you to publish your Windows apps with dotnet publish as opposed to using MSBuild

Tizen support

If you want to use Tizen, make sure to also add the following under your TargetFrameworks, and make sure to uncomment:

<!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET -->
<!-- <TargetFrameworks>$(TargetFrameworks);net6.0-tizen</TargetFrameworks> -->

And add the supported OS version tag for it under the rest of the SupportedOSPlatformVersion tags that are already in the template:

<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>