We started separating shared modules into their own projects and nuget packages in 5.0.20, initially with Serenity.Demo.ThemeSamples package.
In this version, most of other modules like Basic Samples, Advanced Samples, Email Client, Email Queue, Reporting etc. are also separated into their own projects and nuget packages. This allows us to share code between Serene and StartSharp and will also make it easier for you to update / remove them when needed. They are also good samples of separating your own modules if desired.
This also means that, upgrading an existing project to this version will take a bit more changes than usual. But it will make later migrations simpler as they will be simply about updating a package reference instead of manual modifications to update shared code.
You don't have to use these feature packages. If you want to keep the shared code in your project you can do that. In that case you'll need to manually update such shared code in the future by looking at commits and diffs.
If you created your project from a StartSharp / Serene 5.0.41.0+ template you don't need to apply changes in this document.
If the project was created from 5.0.40 or an earlier version, then please first apply migrations earlier migrations listed on left.
StartSharp customers should use stargen to automate most of the changes listed here.
If you are not sure which version of a template your project was created from, you may check your sergen.json file. Since version 5.0.19, StartSharp/Serene projects contain information about the initial version of the template under UpgradeInfo section:
"UpgradeInfo": {
"InitialType": "Premium",
"InitialVersion": "5.0.20.0"
}
>
If InitialVersion is not shown there, it means your initial template version is less than 5.0.19.
You should first update your Serenity package versions to 5.0.41
minimum.
Your package versions should look like this at minimum:
<PackageReference Include="Serenity.Net.Web" Version="5.0.41" />
<PackageReference Include="Serenity.Assets" Version="5.0.40" />
<PackageReference Include="Serenity.Scripts" Version="5.0.41" />
JsonFilter is a Serenity attribute that handles deserializing a JSON post request to request
parameter of a service method.
It is now renamed to JsonRequest which matches the usage of it better and has new options like preventing it to be used for GET requests etc.
JsonFilter is still available but is obsolete.
-
Open
Replace in Fields
dialog in Visual StudioCtrl+Shift+H
-
Make sure
Look in
is Current project,Match case
is Checked,Match whole word
is NOT checked andUse regular expressions
is checked. -
Type
(\[|,|\s)JsonFilter(\]|,|\s)
inFind
input -
Type
$1JsonRequest$2
inReplace
input -
Click
Replace All
We used to have a modified version of XPagedList source code under Modules/Common/Helpers/XPagedList
in StartSharp as in the past this package did not have a .NET Core version.
Remove this folder and add it as a package reference if you use it for some page other than Advanced Samples.
It is normally only used for bootstrap form sample in Advanced Samples module and we'll be converting it to use a package reference as well, so if you don't use this XPagedList anywhere, you don't need to add a package reference.
Only add it back if you get a compilation error about X namespace after removing the XPagedList folder and AdvancedSamples module:
<PackageReference Include="X.PagedList.Mvc.Core" Version="8.0.7" />
If you haven't already, update dotnet sergen tool to latest.
Open a command prompt in your project directory and type following:
dotnet tool update sergen
This should be only necessary if you are using Serenity as a submodule (with sources), otherwise you may skip this step.
Find this line in YourProject.csproj:
<DotNetSergenExe>$(SerenitySrc)Serenity.Net.CodeGenerator\
bin\$(Configuration)\$(TargetFramework)\sergen.exe</DotNetSergenExe>
and remove the $(Configuration)\$(TargetFramework) part:
<DotNetSergenExe>$(SerenitySrc)Serenity.Net.CodeGenerator\
bin\sergen.exe</DotNetSergenExe>
Find this line in YourProject.csproj:
<Exec Command="dotnet sergen restore" ContinueOnError="true"
Condition="!Exists('wwwroot\Scripts\serenity\Serenity.CoreLib.js')" />
Change it to:
<Exec Command="$(DotNetSergen) restore" ContinueOnError="true" />
Modify typeRoots
setting in tsconfig.json:
"typeRoots": [
"./node_modules/@types/"
]
and add ./typings
:
"typeRoots": [
"./node_modules/@types/",
"./typings"
]
Remove following lines from include
setting (if you have them):
"./wwwroot/Scripts/serenity/Serenity.CoreLib.d.ts",
"./typings/jspdf/jspdf.autotable.d.ts",
"./wwwroot/Scripts/serenity/Serenity.Pro.UI.d.ts",
"./wwwroot/Scripts/serenity/Serenity.Pro.App.d.ts",
"./wwwroot/Scripts/serenity/Serenity.Pro.EmailClient.d.ts",
From now on, we'll be distributing TypeScript typings through nuget packages and sergen will automatically restore them into your "
typings
" folder during build.
Add following Restore
configuration just after your RootNamespace
setting:
{
"RootNamespace": "YourRootNamespace",
"Restore": {
"Exclude": [
"/wwwroot/Scripts/serenity/Serenity.CoreLib*.*"
]
},
//...
}
Remove following folders if you have them:
typings\serenity
typings\jspdf
Replace following line in appsettings.bundles.json
"~/Scripts/serenity/Serenity.CoreLib.js",
with
"~/Serenity.Scripts/Serenity.CoreLib.js",
Serenity.Extensions is a new package for common code that is shared between Serene / StartSharp applications. It contains code that was mostly under Common directory of these projects like ExcelExportHelper, GridEditorBase, Reporting, UserPreference.
This should be added for both Serene / StartSharp projects, and is shared between other feature packages.
<PackageReference Include="Serenity.Extensions" Version="5.0.41" />
After adding this package you should remove following files and folders:
If you made any modifications to any of these files, please take a backup.
- Modules/Common/EmailSender/*
- Modules/Common/Helpers/BasicProgressDialog.ts
- Modules/Common/Helpers/BulkServiceAction.ts
- Modules/Common/Helpers/DialogUtils.ts
- Modules/Common/Helpers/EnumSelectFormatter.ts
- Modules/Common/Helpers/ExcelExportHelper.ts
- Modules/Common/Helpers/ExcelImportRequest.cs
- Modules/Common/Helpers/GetNextNumberHelper.cs
- Modules/Common/Helpers/GetNextNumberRequest.cs
- Modules/Common/Helpers/GridEditorBase.ts
- Modules/Common/Helpers/GridEditorDialog.ts
- Modules/Common/Helpers/PromptDialog.ts
- Modules/Common/Helpers/ServiceEditorBase.ts
- Modules/Common/Helpers/StaticTextBlock.ts
- Modules/Common/Reporting/*
- Modules/Common/UserPreference/*
Register Serenity.Extensions
in ConfigureServices
method of Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITypeSource>(new DefaultTypeSource(new[]
{
//...
typeof(Serenity.Extensions.EnvironmentSettings).Assembly,
}
}
Insert following line in appsettings.bundles.json
after Serenity.CoreLib.js
"~/Serenity.Scripts/Serenity.CoreLib.js",
"~/Serenity.Extensions/index.js",
YourProject.csproj should have a MailKit package reference like below:
<PackageReference Include="MailKit" Version="2.4.1" />
Either update it to a more recent version:
<PackageReference Include="MailKit" Version="2.10.1" />
Or remove that line completely, as you'll still have that reference through Serenity.Extensions package.
As we removed some code that is moved to Serenity.Extensions package, their namespace is also changed. When you build your project you'll get some errors about following types:
- IEmailSender
- GetNextNumberRequest
- GetNextNumberResponse
- GetNextNumberHelper
- ExcelImportRequest
- ExcelImportResponse
Add Serenity.Extensions
namespace to usings for all those source files.
using Serenity.Extensions;
In Startup.cs add Serenity.Extensions
to using list and modify following lines:
services.AddSingleton<Common.IEmailSender, Common.EmailSender>();
services.Configure<Common.SmtpSettings>(
Configuration.GetSection(Common.SmtpSettings.SectionKey));
with
services.AddSingleton<IEmailSender, EmailSender>();
services.Configure<SmtpSettings>(
Configuration.GetSection(SmtpSettings.SectionKey));
If you get an error about following type:
- UserPreferenceRow
Add Serenity.Extensions.Entities
to usings.
Exporting to excel is abstracted using dependency injection so code like below needs to be modified:
public FileContentResult ListExcel(IDbConnection connection,
ListRequest request)
{
var data = List(connection, request).Entities;
var report = new DynamicDataReport(data, request.IncludeColumns,
typeof(Columns.ProductColumns), HttpContext.RequestServices);
var bytes = ReportRepository.Render(report);
return ExcelContentResult.Create(bytes, ...)
}
to this:
public FileContentResult ListExcel(IDbConnection connection,
ListRequest request,
[FromServices] IExcelExporter exporter)
{
var data = List(connection, request).Entities;
var bytes = exporter.Export(data,
typeof(Columns.ProductColumns), request.ExportColumns);
return ExcelContentResult.Create(bytes, ...)
}
Note that column type becomes the second parameter and instead of using IncludeColumns, we now use ExportColumns.
IncludeColumns is a HashSet which did not guarantee column order, and it has a different purpose.
If you have a Reports tree page like following:
[Route("MyModule/Reports")]
public ActionResult Index()
{
return View(MVC.Views.Common.Reporting.ReportPage,
new ReportRepository(Context, ReportRegistry)
.GetReportTree("MyModule"));
}
It needs to be modified like below:
using Serenity.Extensions.Repositories;
[Route("MyModule/Reports")]
public ActionResult Index()
{
return View("~/Serenity.Extensions/Reporting/ReportPage.cshtml",
new ReportRepository(Context, ReportRegistry)
.GetReportTree("MyModule"));
}
If you fixed every compile error so far, when you build dotnet sergen restore
should automatically run and restore following files:
- typings/serenity.corelib/index.d.ts
- typings/serenity.extensions/index.d.ts
You should not have other folders under typings
yet. If you still have typings/serenity/Serenity.CoreLib.d.ts
or typings/jspdf/jspdf.autotable.d.ts
files there, delete them, update sergen tool / sergen.json and try building again. If those files are still coming back, then something is wrong with your configuration.
As GridEditorBase and GridEditorDialog classes are moved into Serenity.Extensions, you'll need to find following references and fix them:
/// <reference path="../../../Common/Helpers/GridEditorBase.ts" />
namespace MyProject.MyModule {
@Serenity.Decorators.registerClass()
export class MyEditor extends
Common.GridEditorBase<MyModule.MyRow> {
Simply search for GridEditorBase
in your project and fix those files like below:
namespace MyProject.MyModule {
@Serenity.Decorators.registerClass()
export class MyEditor extends
Serenity.Extensions.GridEditorBase<MyModule.MyRow> {
Note that you also should remove the /// <reference
comment line on top.
Similarly, search for GridEditorDialog
in your project:
/// <reference path="../../Common/Helpers/GridEditorDialog.ts" />
namespace MyProject.MyModule {
@Serenity.Decorators.registerClass()
export class OrderDetailDialog extends
Common.GridEditorDialog<MyRow> {
and fix them like following:
namespace MyProject.MyModule {
@Serenity.Decorators.registerClass()
export class OrderDetailDialog extends
Serenity.Extensions.GridEditorDialog<MyRow> {
Search for ServiceEditorBase
in your project for such files:
/// <reference path="../../../Common/Helpers/ServiceEditorBase.ts" />
namespace MyProject.MyNamespace {
@Serenity.Decorators.registerEditor()
export class MyEditor extends
ServiceEditorBase<ServiceEditorOptions, MyRow> {
}
constructor(hidden: JQuery, options: ServiceEditorOptions) {
super(hidden, options);
}
and fix them like this:
namespace MyProject.MyNamespace {
@Serenity.Decorators.registerEditor()
export class MyEditor extends
Serenity.Extensions.ServiceEditorBase<
Serenity.Extensions.ServiceEditorOptions, MyRow> {
}
constructor(hidden: JQuery,
options: Serenity.Extensions.ServiceEditorOptions) {
super(hidden, options);
}
Search for BulkServiceAction
in your project for such files:
/// <reference path="../../../Common/Helpers/BulkServiceAction.ts" />
namespace MyProject.MyNamespace {
export class MyAction extends Common.BulkServiceAction {
and fix them like this:
namespace MyProject.MyNamespace {
export class MyAction extends Serenity.Extensions.BulkServiceAction {
Do following replace in *.ts files (with regex):
([\s\(,])([A-Za-z_0-9]*\.)?(Common\.)?(DialogUtils|PromptDialog|ExcelExportHelper|PdfExportHelper|ReportHelper|UserPreferenceStorage)([\.\(])
with
$1Serenity.Extensions.$4$5
Your project should now be building successfully.
To make SQL foreign key error messages a bit friendlier for all repositories, add this content to Modules/Common/Helpers/HumanizeSqlExceptionBehavior.cs
:
using Microsoft.Data.SqlClient;
using Serenity.Data;
using Serenity.Services;
using System;
namespace MyProject
{
public class HumanizeSqlExceptionBehavior : BaseSaveDeleteBehavior, IImplicitBehavior
{
public bool ActivateFor(IRow row)
{
return true;
}
public override void OnException(ISaveRequestHandler handler, Exception exception)
{
if (exception is SqlException)
SqlExceptionHelper.HandleSavePrimaryKeyException(exception, handler.Context?.Localizer,
handler.Row?.IdField?.GetTitle(handler.Context?.Localizer));
}
public override void OnException(IDeleteRequestHandler handler, Exception exception)
{
if (exception is SqlException)
SqlExceptionHelper.HandleDeleteForeignKeyException(exception, handler.Context?.Localizer);
}
}
}
Serenity.Pro.Extensions contains common code for StartSharp applications.
Serene users should not try to install this package.
It contains some code from the old Serenity.Pro.Scripts package (which is now obsolete and we'll be removing it in the next step)
Make sure you extract latest pro-packages.zip file you can download from StartSharp repository releases tab to your pro-packages folder first.
<PackageReference Include="Serenity.Pro.Extensions" Version="5.0.41" />
After adding this package you should remove following files and folders:
If you made any modifications to any of these files, please take a backup.
- Imports/ClientTypes/ComponentModel.SingleLineTextFormatterAttribute.cs
- Initialization/SqlErrorStore.cs
- Initialization/Startup.ExceptionLog.cs
- Modules/Common/BackgroundTasks/*
Open Startup.cs and add Serenity.Pro.Extensions
to using list.
If you have this line in Startup.cs
InitializeExceptionLog(services, Configuration);
replace it with:
ExceptionLog.Initialize(services, HostEnvironment.ApplicationName,
Configuration["Data:Default:ConnectionString"], Configuration["Data:Default:ProviderName"]);
If you have any background jobs like this:
public class MyBackgroundJob : PeriodicBackgroundJob
also add Serenity.Pro.Extensions
to their using list.
Remove this package reference:
<PackageReference Include="Serenity.Pro.Scripts" Version="5.0.12" />
Edit Modules\Texts.cs
and remove following texts (they are now shipped with Serenity.Pro.Extensions):
public static class CardViewMixin
{
//...
}
public static class FavoriteViewsMixin
{
//...
}
public static class HeaderFiltersMixin
{
//...
public static class DraggableGroupingMixin
{
//...
}
public static class WizardDialog
{
}
You may remove following package reference:
<PackageReference Include="StackExchange.Exceptional.AspNetCore" Version="2.1.0" />
Remove the following lines from project file:
<CreateItem Include="..\..\Serenity.Pro\Serenity.Pro.Scripts\dist\*.*"
Condition="Exists('..\..\Serenity.Pro\Serenity.Pro.Scripts\dist\Serenity.Pro.UI.js')">
<Output TaskParameter="Include" ItemName="SerenityProScripts" />
</CreateItem>
<CreateItem Include="..\..\Serenity.Pro\Serenity.Pro.Scripts\texts\*.json"
Condition="Exists('..\..\Serenity.Pro\Serenity.Pro.Scripts\dist\Serenity.Pro.UI.js')">
<Output TaskParameter="Include" ItemName="SerenityProTexts" />
</CreateItem>
<Target Name="CopySerenityProFiles" BeforeTargets="BeforeBuild"
Condition="Exists('..\..\Serenity.Pro\Serenity.Pro.Scripts\dist\Serenity.Pro.UI.js')">
<Copy SourceFiles="@(SerenityProScripts)"
DestinationFolder="wwwroot\Scripts\serenity" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(SerenityProTexts)"
DestinationFolder="wwwroot\Scripts\serenity\texts" SkipUnchangedFiles="true" />
</Target>
Register Serenity.Pro.Extensions
in ConfigureServices
method of Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITypeSource>(new DefaultTypeSource(new[]
{
//...
typeof(Serenity.Pro.Extensions.BackgroundJobManager).Assembly,
}
}
Remove following line in appsettings.bundles.json:
"~/Scripts/serenity/Serenity.Pro.App.js"`
and insert following after Serenity.Extensions/index.js
"~/Serenity.Extensions/index.js",
"~/Serenity.Pro.Extensions/index.js",
StartSharp users who had used Email client or created React based UI component should install following package:
<PackageReference Include="Serenity.Pro.UI" Version="5.0.41" />
Remove following line in appsettings.bundles.json:
"~/Scripts/serenity/Serenity.Pro.UI.js"`
Insert following line in appsettings.bundles.json
after Serenity.Pro.Extensions/index.js
"~/Serenity.Pro.Extensions/index.js",
"~/Serenity.Pro.UI/index.js",
If you still have Northwind, Basic Samples or Advanced Samples (StartSharp only) in your project add these package references:
These are demo modules, you don't need them in a production application
<PackageReference Include="Serenity.Demo.Northwind" Version="5.0.41" />
<PackageReference Include="Serenity.Demo.BasicSamples" Version="5.0.41" />
<!--StartSharp Only-->
<PackageReference Include="Serenity.Demo.AdvancedSamples" Version="5.0.41" />
After adding this package you should remove following files and folders:
If you made any modifications to any of these files, please take a backup.
- Modules/Northwind/*
- Modules/BasicSamples/*
- Modules/AdvancedSamples/*
- Imports/ClientTypes/BasicSamples*.*
- Imports/ClientTypes/AdvancedSamples*.*
- Imports/ClientTypes/Northwind*.*
- Imports/ServerTypings/BasicSamples*.*
- Imports/ServerTypings/AdvancedSamples*.*
- Imports/ServerTypings/Northwind*.*
- Migrations/NorthwindDB/*
- wwwroot/Content/site/site.basicsamples.less
- wwwroot/Content/site/site.advancedsamples.less
- wwwroot/Content/site/site.northwind.less
Edit DashboardPage.cs
and replace this usings:
using MyProject.Northwind;
using MyProject.Northwind.Entities;
with
using Serenity.Demo.Northwind;
using Serenity.Demo.Northwind.Entities;
Edit DataAuditLogPage.cs
and add Serenity.Demo.
before every Northwind.
(do it with search replace):
using (var cnn = sqlConnections.NewFor<Northwind.Entities.OrderRow>())
with
using (var cnn = sqlConnections.NewFor<Serenity.Demo.Northwind.Entities.OrderRow>())
Edit wwwroot/Content/site/site.less
and remove following lines:
@import "site.basicsamples.less";
@import "site.advancedsamples.less";
@import "site.northwind.less";
Register these assemblies in ConfigureServices
method of Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITypeSource>(new DefaultTypeSource(new[]
{
//...
typeof(Serenity.Demo.Northwind.CustomerController).Assembly,
typeof(Serenity.Demo.BasicSamples.BasicSamplesController).Assembly,
typeof(Serenity.Demo.AdvancedSamples.AdvancedSamplesController).Assembly,
}
}
Find following block in DataMigrations.cs
:
var serviceProvider = new ServiceCollection()
.AddLogging(lb => lb.AddFluentMigratorConsole())
.AddFluentMigratorCore()
.AddSingleton<IConventionSet>(conventionSet)
.Configure<TypeFilterOptions>(options =>
{
options.Namespace = "MyProject.Migrations." + databaseKey + "DB";
})
.Configure<ProcessorOptions>(options =>
{
options.Timeout = TimeSpan.FromSeconds(90);
})
.ConfigureRunner(builder =>
{
//...
builder.WithMigrationsIn(typeof(DataMigrations).Assembly);
and modify like below
var migrationNamespace = "MyProject.Migrations." + databaseKey + "DB";
var migrationAssemblies = new[] { typeof(DataMigrations).Assembly };
if (databaseKey.Equals("Northwind", StringComparison.OrdinalIgnoreCase))
{
migrationNamespace = typeof(Serenity.Demo.Northwind.Migrations.MigrationAttribute).Namespace;
migrationAssemblies = new[] { typeof(Serenity.Demo.Northwind.Migrations.MigrationAttribute).Assembly };
}
var serviceProvider = new ServiceCollection()
.AddLogging(lb => lb.AddFluentMigratorConsole())
.AddFluentMigratorCore()
.AddSingleton<IConventionSet>(conventionSet)
.Configure<TypeFilterOptions>(options =>
{
options.Namespace = migrationNamespace;
})
.Configure<ProcessorOptions>(options =>
{
options.Timeout = TimeSpan.FromSeconds(90);
})
.ConfigureRunner(builder =>
{
//...
builder.WithMigrationsIn(migrationAssemblies);
})
StartSharp DataExplorer which used to be in Advanced Samples module is now in its own Serenity.Pro.DataExplorer
package. It is also referenced by Serenity.Demo.AdvancedSamples if you install it.
If you are using Data Explorer, please add this reference to project:
<PackageReference Include="Serenity.Pro.DataExplorer" Version="5.0.41" />
And remove following folders if you haven't already:
- Modules/AdvancedSamples/Misc/DataExplorer/*
- Imports/ClientTypes/AdvancedSamples.DataExplorer*.*
- Imports/ServerTypings/AdvancedSamples.DataExplorer*.*
Edit Startup.cs
and replace below line:
services.Configure<AdvancedSamples.DataExplorerConfig>(
Configuration.GetSection(AdvancedSamples.DataExplorerConfig.SectionKey));
with
services.Configure<Serenity.Pro.DataExplorer.DataExplorerConfig>(
Configuration.GetSection(Serenity.Pro.DataExplorer.DataExplorerConfig.SectionKey));
Register Serenity.Pro.DataExplorer
in ConfigureServices
method of Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITypeSource>(new DefaultTypeSource(new[]
{
//...
typeof(Serenity.Pro.DataExplorer.DataExplorerController).Assembly,
}
}
StartSharp Email IMAP Client is now in its own Serenity.Pro.EmailClient
package. It is also referenced by Serenity.Demo.AdvancedSamples if you install it.
If you are using Email IMAP Client, please add this reference to project:
<PackageReference Include="Serenity.Pro.EmailClient" Version="5.0.41" />
Edit Modules\Texts.cs
and remove EmailClient
texts:
public static class EmailClient
{
public static LocalText ToggleReadButton = "Toggle Read";
...
}
And remove following folders:
- Modules/Common/EmailClient/*
Register Serenity.Pro.EmailClient
in ConfigureServices
method of Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITypeSource>(new DefaultTypeSource(new[]
{
//...
typeof(Serenity.Pro.EmailClient.MailboxController).Assembly,
}
}
StartSharp Audit Log feature is now in its own Serenity.Pro.DataAuditLog
package. It is also referenced by Serenity.Demo.AdvancedSamples if you install it.
If you are using Data Audit Log functionality, please add this reference to project:
<PackageReference Include="Serenity.Pro.DataAuditLog" Version="5.0.41" />
And remove following folders:
- Modules/Administration/DataAuditLog/*
Register Serenity.Pro.DataAuditLog
in ConfigureServices
method of Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITypeSource>(new DefaultTypeSource(new[]
{
//...
typeof(Serenity.Pro.DataAuditLog.DataAuditLogController).Assembly,
}
}
StartSharp Email Queue feature is now in its own Serenity.Pro.EmailQueue
package.
If you are using Email Queue functionality, please add this reference to project:
<PackageReference Include="Serenity.Pro.EmailQueue" Version="5.0.41" />
And remove following folders:
- Modules/Common/Mail/*
Edit AdministrationNavigation.cs
and fix following navigation link:
[assembly: NavigationLink(9000, "Administration/Mail Queue",
typeof(MyProject.Common.Pages.MailController), icon: "fa-envelope-o premium-sample")]
as:
[assembly: NavigationLink(9000, "Administration/Mail Queue",
typeof(Serenity.Pro.EmailQueue.EmailQueueController), icon: "fa-envelope-o premium-sample")]
Edit Startup.cs
file and remove this using (if you are getting an error):
using MyProject.Common.Services;
Add Serenity.Pro.EmailQueue
to using list and replace following line:
services.Configure<MailingServiceSettings>(
Configuration.GetSection(MailingServiceSettings.SectionKey));
with:
services.Configure<Serenity.Pro.EmailQueue.EmailQueueJobSettings>(
Configuration.GetSection(Serenity.Pro.EmailQueue.EmailQueueJobSettings.SectionKey));
and following line:
backgroundJobManager.Register(
ActivatorUtilities.CreateInstance<MailingBackgroundJob>(app.ApplicationServices));
with
backgroundJobManager.Register(ActivatorUtilities
.CreateInstance<Serenity.Pro.EmailQueue.EmailQueueJob>(app.ApplicationServices));
Edit UserRepository.cs
and remove following using:
using MyProject.Common.Entities;
Register Serenity.Pro.EmailQueue
in ConfigureServices
method of Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITypeSource>(new DefaultTypeSource(new[]
{
//...
typeof(Serenity.Pro.EmailQueue.EmailQueueController).Assembly,
}
}
StartSharp Organization tree feature is now in its own Serenity.Pro.Organization
package.
If you are using Organization or Meeting functionality, please add this reference to project:
<PackageReference Include="Serenity.Pro.Organization" Version="5.0.41" />
And remove following files and folders:
- Modules/Organization/*
- Imports/ClientTypes/Organization.*
- Imports/ServerTypings/Organization.*
- wwwroot/Content/site/site.organization.less
Edit wwwroot/Content/site/site.less
and remove following lines:
@import "site.organization.less";
Register Serenity.Pro.Organization
in ConfigureServices
method of Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITypeSource>(new DefaultTypeSource(new[]
{
//...
typeof(Serenity.Pro.Organization.BusinessUnitController).Assembly,
}
}
StartSharp Meeting feature is now in its own Serenity.Pro.Meeting
package.
If you are using Meeting functionality, please add this reference to project:
<PackageReference Include="Serenity.Pro.Meeting" Version="5.0.41" />
And remove following files and folders:
- Modules/Meeting/*
- Imports/ClientTypes/Meeting.*
- Imports/ServerTypings/Meeting.*
- wwwroot/Content/site/site.meeting.less
Edit wwwroot/Content/site/site.less
and remove following lines:
@import "site.meeting.less";
Register Serenity.Pro.Meeting
in ConfigureServices
method of Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITypeSource>(new DefaultTypeSource(new[]
{
//...
typeof(Serenity.Pro.Meeting.MeetingController).Assembly,
}
}