The Road 2 Financial Freedom (edit)
MIT License
https://lptech.asia/kien-thuc/cac-giay-phep-ma-nguon-mo-pho-bien
- Được phát hành bởi Massachusetts Institute of Technology (MIT).
- Nội dung license : https://opensource.org/licenses/MIT
- Giấy phép MIT là loại giấy phép cho phép sử dụng mã nguồn tự do nhất, nó có thể kết hợp với các mã nguồn khác và đảm bảo tương thích theo điều kiện của mọi loại giấy phép khác.
- Với giấy phép MIT bạn có thể sử dụng, sao chép, sửa đổi, hợp nhất, xuất bản, phân phối và/hoặc bán các bản sao của phần mềm mà không vi phạm bản quyền. Bạn chỉ cần tuân thủ điều kiện duy nhất sau:
- Thông báo bản quyền và thông báo cho phép của phần mềm gốc sử dụng giấy phép MIT sẽ phải bao gồm trong tất cả các bản sao hoặc phần quan trọng của phần mềm.
Refer: https://manhng.com/tags/adminlte
And: https://github.com/ColorlibHQ/AdminLTE/releases
AdminLTE Template
https://marketplace.visualstudio.com/items?itemName=c0shea.AdminLTETemplate
https://github.com/c0shea/AdminLTE-Template/releases
https://github.com/c0shea/AdminLTE-Template
https://manhng.com/archive/adminlte/
Features:
+ Chat with Twilio: https://github.com/TwilioDevEd/twiliochat-csharp
+ Chat with Signalr: https://github.com/stackmanoj/chatapp
+ Chat with Signalr in ASP.NET Core 3.1: https://github.com/Ibro/SignalRSimpleChat
+ Dashboard with AdminLTE: https://github.com/ColorlibHQ/AdminLTE/releases/tag/v2.4.9
Frameworks & Tools
+ Microsoft .NET Framework 4.5
+ ASP.NET MVC 5
+ Web API 2
+ Entity Framework 6.4.4
+ SQL Server 2008 R2
+ jQuery 3.3.1
+ Bootstrap 3.4.1
+ AdminLTE 2.4.9
+ IE 11
Samples
Menu - Sidebar - Dynamic - Permission
https://www.sitepoint.com/dynamic-menu-builder-bootstrap-3-item-link/
https://seegatesite.com/how-to-create-user-permissions-view-to-dynamic-sidebar-menu-adminlte/
https://seegatesite.com/creating-dynamic-sidebar-menu-with-mysql-and-adminlte-bootstrap-template/
https://seegatesite.com/create-dynamic-sidebar-multilevel-menu-in-adminlte-with-mysql-php-and-pdo/
- Create login page – Tutorial Build PHP Point Of Sale Part 1.
- Create Dynamic Menu and Dashboard Page -PHP Point Of Sale Tutorial Part 2.
- Create Master User Form – PHP Point Of Sale Tutorial Part 3
- Create Master Item / Product Form – PHP Point Of Sale Tutorial Part 4
- Create Sales Form / Point of sale – PHP Point Of Sale Tutorial Part 5
Treeview - jsTree
https://www.c-sharpcorner.com/article/c-treeview-to-mvc-razor-view/
Full Calendar
https://www.c-sharpcorner.com/article/asp-net-mvc5-full-calendar-jquery-plugin/
Dashboard Application
https://www.c-sharpcorner.com/article/dashboard-application-with-asp-net-mvc-5-and-jquery/
HTML - Navs - Tabs
https://www.tutorialrepublic.com/twitter-bootstrap-tutorial/bootstrap-navs.php
https://bootsnipp.com/tags/tabs
Fix errors
+ Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
Project Demo
https://drive.google.com/file/d/1KPBmXdsjX4o1cqnjJawTW66Buu-B6sfi/ (manhng83@gmail.com)
D:\Projects\TheRoadToFinacialFreedom\TheRoadToFinacialFreedom\TheRoadToFinacialFreedom.csproj
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{899B4AE5-B185-4ED7-A5E8-1841D9BF4F7C}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>TheRoadToFinacialFreedom</RootNamespace>
<AssemblyName>TheRoadToFinacialFreedom</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
</Reference>
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.EnterpriseServices" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Web" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.Services" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Reference Include="Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
<HintPath>..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Web.Infrastructure">
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.5.11\lib\net45\NLog.dll</HintPath>
</Reference>
<Reference Include="RouteJs, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\RouteJs.Mvc5.2.2.0\lib\net45\RouteJs.dll</HintPath>
</Reference>
<Reference Include="RouteJs.Mvc5, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\RouteJs.Mvc5.2.2.0\lib\net45\RouteJs.Mvc5.dll</HintPath>
</Reference>
<Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.Helpers.dll</HintPath>
</Reference>
<Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Razor.3.2.7\lib\net45\System.Web.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.7\lib\net45\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="WebActivatorEx, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7b26dc2a43f6a0d4, processorArchitecture=MSIL">
<HintPath>..\packages\WebActivatorEx.2.2.0\lib\net40\WebActivatorEx.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\WebGrease.1.6.0\lib\WebGrease.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="WebHelpers.Mvc5, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\WebHelpers.Mvc5.2.1.0\lib\net45\WebHelpers.Mvc5.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Content Include="Global.asax" />
<Content Include="Web.config" />
<None Include="Web.Debug.config">
<DependentUpon>Web.config</DependentUpon>
</None>
<None Include="Web.Release.config">
<DependentUpon>Web.config</DependentUpon>
</None>
</ItemGroup>
<ItemGroup>
<Compile Include="Models\BaseEntity.cs" />
<Compile Include="Models\MyDbContext.cs" />
<Compile Include="Models\MyDBInitializer.cs" />
<Compile Include="Models\User.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="packages.config" />
<Content Include="Content\css\AdminLTE.css" />
<Content Include="Content\css\AdminLTE.min.css" />
<Content Include="Content\css\bootstrap-datepicker3.min.css" />
<Content Include="Content\css\bootstrap-select.css" />
<Content Include="Content\css\bootstrap-select.min.css" />
<Content Include="Content\css\bootstrap.min.css" />
<Content Include="Content\css\font-awesome.min.css" />
<Content Include="Content\css\icheck\aero.css" />
<Content Include="Content\css\icheck\aero.min.css" />
<Content Include="Content\css\icheck\blue.css" />
<Content Include="Content\css\icheck\blue.min.css" />
<Content Include="Content\css\icheck\green.css" />
<Content Include="Content\css\icheck\green.min.css" />
<Content Include="Content\css\icheck\grey.css" />
<Content Include="Content\css\icheck\grey.min.css" />
<Content Include="Content\css\icheck\minimal.css" />
<Content Include="Content\css\icheck\minimal.min.css" />
<Content Include="Content\css\icheck\orange.css" />
<Content Include="Content\css\icheck\orange.min.css" />
<Content Include="Content\css\icheck\pink.css" />
<Content Include="Content\css\icheck\pink.min.css" />
<Content Include="Content\css\icheck\purple.css" />
<Content Include="Content\css\icheck\purple.min.css" />
<Content Include="Content\css\icheck\red.css" />
<Content Include="Content\css\icheck\red.min.css" />
<Content Include="Content\css\icheck\yellow.css" />
<Content Include="Content\css\icheck\yellow.min.css" />
<Content Include="Content\css\skins\skin-black-light.css" />
<Content Include="Content\css\skins\skin-black-light.min.css" />
<Content Include="Content\css\skins\skin-black.css" />
<Content Include="Content\css\skins\skin-black.min.css" />
<Content Include="Content\css\skins\skin-blue-light.css" />
<Content Include="Content\css\skins\skin-blue-light.min.css" />
<Content Include="Content\css\skins\skin-blue.css" />
<Content Include="Content\css\skins\skin-blue.min.css" />
<Content Include="Content\css\skins\skin-green-light.css" />
<Content Include="Content\css\skins\skin-green-light.min.css" />
<Content Include="Content\css\skins\skin-green.css" />
<Content Include="Content\css\skins\skin-green.min.css" />
<Content Include="Content\css\skins\skin-purple-light.css" />
<Content Include="Content\css\skins\skin-purple-light.min.css" />
<Content Include="Content\css\skins\skin-purple.css" />
<Content Include="Content\css\skins\skin-purple.min.css" />
<Content Include="Content\css\skins\skin-red-light.css" />
<Content Include="Content\css\skins\skin-red-light.min.css" />
<Content Include="Content\css\skins\skin-red.css" />
<Content Include="Content\css\skins\skin-red.min.css" />
<Content Include="Content\css\skins\skin-yellow-light.css" />
<Content Include="Content\css\skins\skin-yellow-light.min.css" />
<Content Include="Content\css\skins\skin-yellow.css" />
<Content Include="Content\css\skins\skin-yellow.min.css" />
<Content Include="Content\css\skins\_all-skins.css" />
<Content Include="Content\css\skins\_all-skins.min.css" />
<Content Include="Content\fonts\fontawesome-webfont.eot" />
<Content Include="Content\fonts\fontawesome-webfont.svg" />
<Content Include="Content\fonts\fontawesome-webfont.ttf" />
<Content Include="Content\fonts\fontawesome-webfont.woff" />
<Content Include="Content\fonts\fontawesome-webfont.woff2" />
<Content Include="Content\fonts\FontAwesome.otf" />
<Content Include="Content\fonts\glyphicons-halflings-regular.eot" />
<Content Include="Content\fonts\glyphicons-halflings-regular.svg" />
<Content Include="Content\fonts\glyphicons-halflings-regular.ttf" />
<Content Include="Content\fonts\glyphicons-halflings-regular.woff" />
<Content Include="Content\fonts\glyphicons-halflings-regular.woff2" />
<Content Include="Content\img\user.jpg" />
<Content Include="Content\img\icheck\aero.png" />
<Content Include="Content\img\icheck\aero@2x.png" />
<Content Include="Content\img\icheck\blue.png" />
<Content Include="Content\img\icheck\blue@2x.png" />
<Content Include="Content\img\icheck\green.png" />
<Content Include="Content\img\icheck\green@2x.png" />
<Content Include="Content\img\icheck\grey.png" />
<Content Include="Content\img\icheck\grey@2x.png" />
<Content Include="Content\img\icheck\minimal.png" />
<Content Include="Content\img\icheck\minimal@2x.png" />
<Content Include="Content\img\icheck\orange.png" />
<Content Include="Content\img\icheck\orange@2x.png" />
<Content Include="Content\img\icheck\pink.png" />
<Content Include="Content\img\icheck\pink@2x.png" />
<Content Include="Content\img\icheck\purple.png" />
<Content Include="Content\img\icheck\purple@2x.png" />
<Content Include="Content\img\icheck\red.png" />
<Content Include="Content\img\icheck\red@2x.png" />
<Content Include="Content\img\icheck\yellow.png" />
<Content Include="Content\img\icheck\yellow@2x.png" />
<Content Include="Content\js\adminlte.js" />
<Content Include="Content\js\init.js" />
<Content Include="Content\js\plugins\bootstrap\bootstrap.js" />
<Content Include="Content\js\plugins\bootstrap\bootstrap.min.js" />
<Content Include="Content\js\plugins\bootstrap-select\bootstrap-select.js" />
<Content Include="Content\js\plugins\bootstrap-select\bootstrap-select.min.js" />
<Content Include="Content\js\plugins\datepicker\bootstrap-datepicker.js" />
<Content Include="Content\js\plugins\datepicker\bootstrap-datepicker.min.js" />
<Content Include="Content\js\plugins\fastclick\fastclick.js" />
<Content Include="Content\js\plugins\fastclick\fastclick.min.js" />
<Content Include="Content\js\plugins\icheck\icheck.js" />
<Content Include="Content\js\plugins\icheck\icheck.min.js" />
<Content Include="Content\js\plugins\inputmask\jquery.inputmask.bundle.js" />
<Content Include="Content\js\plugins\inputmask\jquery.inputmask.bundle.min.js" />
<Content Include="Content\js\plugins\jquery\jquery-3.3.1.js" />
<Content Include="Content\js\plugins\jquery\jquery-3.3.1.min.js" />
<Content Include="Content\js\plugins\moment\moment.js" />
<Content Include="Content\js\plugins\moment\moment.min.js" />
<Content Include="Content\js\plugins\slimscroll\jquery.slimscroll.js" />
<Content Include="Content\js\plugins\slimscroll\jquery.slimscroll.min.js" />
<Content Include="Content\js\plugins\validator\validator.js" />
<Content Include="Content\js\plugins\validator\validator.min.js" />
<Content Include="Views\web.config" />
<Content Include="Views\_ViewStart.cshtml" />
<Content Include="Views\Error\InternalServerError.cshtml" />
<Content Include="Views\Error\NotFound.cshtml" />
<Content Include="Views\Home\Index.cshtml" />
<Content Include="Views\Shared\_ControlSidebar.cshtml" />
<Content Include="Views\Shared\_Header.cshtml" />
<Content Include="Views\Shared\_Layout.cshtml" />
<Content Include="Views\Shared\_Sidebar.cshtml" />
</ItemGroup>
<ItemGroup>
<Compile Include="App_Start\BundleConfig.cs" />
<Compile Include="App_Start\RouteConfig.cs" />
<Compile Include="Controllers\ErrorController.cs" />
<Compile Include="Controllers\HomeController.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="App_Data\" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<SaveServerSettingsInUserFile>True</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" />
<Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
</Target>
<Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target> -->
</Project>
Articles
https://codingblast.com/entity-framework-core-generic-repository/
https://code-maze.com/aspnetcore-webapi-best-practices/
https://thecodebuzz.com/filters-in-net-core-best-practices/