> For the complete documentation index, see [llms.txt](https://docs.radicalframework.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.radicalframework.com/release-2/upgrade-guides/1.x-to-2.0.0.md).

# Radical Presentation 1.x to Radical 2.x for .NET Core

## Main facts

Starting with V2 radical Framework supports only .NET Core 3, the `Radical` package targets `netstandard2.0` and the `Radical.Windows` package targets `netcoreapp3.0`. WPF .NET Framework (what is generally referred as full framework) projects are not supported.

The `Radical.Windows.Presentation` package has been merged into `Radical.Windows` and by default the default IoC container provided by `Microsoft.Extensions.DependencyInjection` will be used. V2.0.0 supports [external DI/IoC containers via generic host support](https://github.com/RadicalFx/documentation/tree/3593d0c5b04875dd1fb6be74908fc5cea4ac1a8d/ioc/third-party.md).

## New XML namespaces

New XML namespaces have been defined, the following is the list of the new namespaces:

* `http://schemas.radicalframework.com/windows/behaviors`
* `http://schemas.radicalframework.com/windows/input`
* `http://schemas.radicalframework.com/windows`
* `http://schemas.radicalframework.com/windows/converters`
* `http://schemas.radicalframework.com/windows/controls`
* `http://schemas.radicalframework.com/windows/effects`
* `http://schemas.radicalframework.com/windows/markup`
* `http://schemas.radicalframework.com/windows/regions`&#x20;

The existing XML namespaces, starting with `http://schemas.topics.it/wpf/radical/*`, can still be used but should be considered as obsolete and will be removed in V3.

## Breaking changes

### Message broker `IMessage` support

The `IMessage` interface has been removed, message broker supports only POCO messages in V2.

### `IEntityView` custom properties

Entity view `AddPropertyMapping` has been renamed to `AddCustomProperty`, `RemovePropertyMapping` to `RemoveCustomProperty`, and `IsPropertyMappingDefined` to `IsCustomPropertyDefined`

### XML namespaces

* XML namespace definition `http://schemas.topics.it/wpf/radical/windows/presentation/regions` changed to `http://schemas.topics.it/wpf/radical/windows/regions`.
* XML namespace definition `http://schemas.topics.it/wpf/radical/windows/presentation/behaviors` changed to `http://schemas.topics.it/wpf/radical/windows/behaviors`.

### Removed and changed types and namespaces

* The type `Fact` has been removed. [`AutoCommandBinding`](https://github.com/RadicalFx/documentation/tree/3593d0c5b04875dd1fb6be74908fc5cea4ac1a8d/markup-extensions/auto-command-binding/README.md) supports boolean properties and regular property changed notifications.
* The `RadicalWpfApplication` type has been removed. If a `DoEvents`-like implementation is really needed original code can be copy/pasted from [GitHub commits history](https://github.com/RadicalFx/Radical.Windows/blob/fa52500164e26f351055034ffbcb87a085b64e4b/src/Radical.Windows/RadicalWpfApplication.cs#L6-L42).
* `EntityValidationService<T>` has been removed in favor of `DataAnnotationValidationService<T>`.
* `ApplicationBootstrapper` has been obsoleted in favor of the new `AddRadicalApplication<TMainView>()` extension method.
  * All virtual members are now sealed.
  * It will be removed in v3.
* Application configuration was previously part of the `ApplicationBootstrapper` class. Configuration options have been moved to the `BootstrapConfiguration` class. To customize the Radical application behavior through the `BootstrapConfiguration` class use the following `AddRadicalApplication` overload: `AddRadicalApplication( config => { ... })`. For more information refer to the [application configuration](https://github.com/RadicalFx/documentation/tree/3593d0c5b04875dd1fb6be74908fc5cea4ac1a8d/mvvm/application-configuration.md) section.
* `GetValidationService()` has been removed from `AbstractViewModel` and `AbstractMementoViewModel`. Use the new protected `ValidationService` property to set the current validation service instance.
* `Radical.Windows.Presentation` namespace has been merged into `Radical.Windows`.
* the `Topics` namespace prefix has been dropped, the new root namesapce is `Radical`.
* `WpfDispatcher` type has been made internal.
* The AutoComplete behavior has been removed. To replace it, a sample demonstrating how to integrate with a third-party library is available in the [autocomplete sample folder](https://github.com/RadicalFx/documentation/tree/master/samples/AutocompleteSample).

### Behavior changes

* [External IoC containers](https://github.com/RadicalFx/documentation/tree/3593d0c5b04875dd1fb6be74908fc5cea4ac1a8d/ioc/third-party.md) are supported via generic host support.
* Custom IoC registrations require the creation of a [dependency installer](https://github.com/RadicalFx/documentation/tree/3593d0c5b04875dd1fb6be74908fc5cea4ac1a8d/ioc/README.md).
* Services override is not supported anymore. In 1.x it was possible to override an existing radical default service by registering a custom one in the IoC container of choice. The feature wil be reintroduced in a future minor release along with support for external IoC containers

## How to migrate a Radical .NET Framework project to Radical for .NET Core 3

1. Create a new .NET Core 3 WPF project with the same name of the project you want to migrate
2. Replace the .NET Framework `csproj` file with the file of the project created at step 1 (the .NET Core project automatically adds all the files found in the current folder of the project, no manual changes are needed)
3. Create `appsettings.json` and copy the needed settings from `app.config`
4. Delete `app.config`
5. If `AssemblyInfo.cs` contains information that need to be migrated:
   * Rename `AssemblyInfo.cs` to `AssemblyInfo.old.cs`
   * Copy `AssemblyInfo.old.cs` to the root of the project
6. Delete the `Properties` folder&#x20;
7. Copy `AssemblyInfo.cs` from the project created on step 1 to the root project folder
   * If needed copy information from `AssemblyInfo.old.cs` to `AssemblyInfo.cs` and delete `AssemblyInfo.old.cs`
8. Add all the NuGet references a `PackageReference` to the new project:
   * Take note of the NuGet references from the `packages.config` file&#x20;
   * Add the needed references from NuGet
   * Delete `packages.config` file
9. "Find and Replace":
   * `using Topics.Radical` -> `using Radical`
   * `using Radical.Windows.Presentation.ComponentModel` -> `using Radical.Windows.ComponentModel`
   * `using Radical.Windows.Presentation.Messaging` -> `using Radical.Windows.Messaging` &#x20;
   * `http://schemas.topics.it/wpf/radical/` -> `http://schemas.radicalframework.com/`
   * `http://schemas.microsoft.com/expression/2010/interactivity` -> `http://schemas.microsoft.com/xaml/behaviors`
   * `Broadcast(new CloseViewRequest(this))` -> `Broadcast(this, new CloseViewRequest(this))`
10. "Find and Remove"
    * `http://schemas.radicalframework.com/windows/presentation/behaviors` (behaviors are now in `http://schemas.radicalframework.com/windows/behaviors`)
    * `using Radical.Windows.Presentation.Boot;`
11. Look at all the obsolete warnings and adjust code as necessary
