.NET framework atau biasa dikenal dengan dot net adalah framework perangkat lunak yang diproduksi oleh Microsoft dan dijalankan pada media Microsoft Windows.
Dot net berjalan pada perangkat lunak virtual machine (Common Language Runtime) alih-alih menggunakan perangkat keras komputer. Dan CLR ini berjalan native pada sistem operasi windows. Selain itu dotnet juga bergantung pada kumpulan library Framework Class Library (FCL).
.Net Core bersifat open source dan gratis dan mampu berjalan pada multi ranah windows, linux, dan mac Os. DotnetCore memiliki CoreCLR, implementasi CLR untuk lintas platform, dan CoreFX yang merupakan porting dari sebagian FCL
Ada beberapa checklist kapan menggunakan .net kapan menggunakan .netCore.
Tetap gunakan .net ketika:
- Servernya harus menggunakan Windows Server
- Basis kode saat ini sebagian besar menggunakan .net Framework
- Library atau paket nuget belum tersedia di .netcore
- Platform layanan yang digunakan tidak mendukung .net core (beberapa layanan azure membutuhkan net framework seperti azure fabric)
Gunakan .net Core ketika:
- membutuhkan aplikasi lintas platform
- menggunakan Docker
- membutuhkan peforma lebih cepat
Apabila diperlukan porting .net ke .netCore dapat dilakukan dengan beberapa langkah.
- Identifikasi apakah ada third party library pada projek saat ini.
Kita dapat melakukan pengecekan dengan beberapa cara:
a. melihat reference pada tiap-tiap proyek.
b. Kita dapat menggunakan tools apiport untuk mencek kompabilitas dari libary yang kita gunakan.
apiport analyzae -f .
API Portability Analyzer tool (apitool) menganalisa dan membuat laporan kesesuaian tiap API yang tidak tersedia di .net core. Dan memberi kita analisa garis besar, bagaimana rencana porting dijalankan.
Sehingga kita lihat library apa saja yang kompabilitasnya bermasalah.
Dari data diatas dapat disimpulkan bahwa tidak ada library 3rd party yang bermasalah atau dapat dikonversi ke .net core
Apabila ditemukan library yang tidak kompatibel. Ada beberapa penanganan:
- Bila library itu milik kita sendiri, maka kita harus mengkonversi library itu terlebih dahulu
- Bila itu merupakan milik pihak luar maka kita dapat meminta tiket untuk mengkonversi atau mencari alternatif package lain.
Kita dapat juga menggunakan situs packagesearch untuk menemukan alternatif dari package di .net
Khusus pengguna windows dapat melakukan pengecekan kompabilitas target framework dengan memilih framework 4.7.2 atau diatasnya. Yang akan memunculkan alternatif secara otomatis bila ada target yang tidak disupport .net core.
2. Langkah selanjutnya adalah melakukan konversi project.
Opsi pertama adalah melakukan konversi csproj.
Ubah csproj dengan Tools-> edit file
ubah targetFramework menjadi dotnet framework dari <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
ke <TargetFramework>netcoreapp2.1</TargetFramework>
Serta pada <ItemGroup>
tambahkan <PackageReference Include=”Microsoft.AspNetCore.App” />
Jalankan dotnet build
untuk me-restore dan build, maka akan muncul hasil apakah project berhasil dibuild atau tidak. Bila tidak maka lakukan beberapa konfigurasi perbaikan.
Lakukan perbaikan apabila terjadi masalah saat build.
Contoh repository dapat dilihat disini.
Beberapa kendala yang terkadang muncul pada proses porting:
- Paket tidak ditemukan
Global.Flight.Data.csproj : error NU1101: Unable to find package System.Xml. No packages exist with this id in source(s): nuget.org
Global.Flight.Data.csproj : error NU1101: Unable to find package System.Web. No packages exist with this id in source(s): nuget.org
Global.Flight.Data.csproj : error NU1101: Unable to find package System.Data. No packages exist with this id in source(s): nuget.org
AspNetCore.App telah berisi set API untuk net Core. Library ini dapat ditambahkan <PackageReference Include=”Microsoft.AspNetCore.App” />
di ItemGroup
AssemblyInfo.cs(10,12): error CS0579: Duplicate 'System.Reflection.AssemblyCompanyAttribute' attribute
AssemblyInfo.cs(11,12): error CS0579: Duplicate 'System.Reflection.AssemblyConfigurationAttribute' attribute
AssemblyInfo.cs(12,12): error CS0579: Duplicate 'System.Reflection.AssemblyFileVersionAttribute' attribute
AssemblyInfo.cs(14,12): error CS0579: Duplicate 'System.Reflection.AssemblyProductAttribute' attribute
AssemblyInfo.cs(15,12): error CS0579: Duplicate 'System.Reflection.AssemblyTitleAttribute' attribute
AssemblyInfo.cs(16,12): error CS0579: Duplicate 'System.Reflection.AssemblyVersionAttribute' attribute
Hal ini terjadi karena pada .net framework terdapat assembly pada bin atau terdapat berkas Properties\AssemblyInfo.cs Hal ini dapat diakali dengan menambah <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
di PropertyGroup
Tips personal untuk refaktor ke .net core:
- Refaktor test terlebih dahulu, seminimalnya fungsi utama pada aplikasi dapat tercover sebelum melakukan refaktor menggunakan MSTest, xUnit atau NUnit yang telah disupport net Core
- Buat monolitik terlebih dahulu, bila interface/factory dan library ada di proyek lain satukan terlebih dahulu lalu refaktor apabila tes sudah berjalan sesuai
Selamat mengkonversi 🙂