Menyebarkan aplikasi .NET Core dengan Visual Studio

Anda dapat menyebarkan aplikasi .NET Core baik sebagai penyebaran yang bergantung pada kerangka kerja, yang mencakup biner aplikasi Anda tetapi tergantung pada keberadaan .NET Core pada sistem target, atau sebagai penyebaran mandiri, yang mencakup biner aplikasi dan .NET Core Anda. Untuk gambaran umum penyebaran aplikasi .NET Core, lihat Penyebaran Aplikasi .NET Core.

Bagian berikut menunjukkan cara menggunakan Microsoft Visual Studio untuk membuat jenis penyebaran berikut:

  • Penyebaran yang bergantung pada kerangka kerja
  • Penyebaran yang bergantung pada kerangka kerja dengan dependensi pihak ketiga
  • Penyebaran mandiri
  • Penyebaran mandiri dengan dependensi pihak ketiga

Untuk informasi tentang menggunakan Visual Studio untuk mengembangkan aplikasi .NET Core, lihat dependensi dan persyaratan .NET Core.

Penyebaran yang bergantung pada kerangka kerja

Menyebarkan penyebaran yang bergantung pada kerangka kerja tanpa dependensi pihak ketiga hanya melibatkan pembangunan, pengujian, dan penerbitan aplikasi. Contoh sederhana yang ditulis dalam C# menggambarkan prosesnya.

  1. Membuat proyek.

    Pilih File>Baru>Proyek. Dalam dialog Proyek Baru, perluas kategori proyek bahasa Anda (C# atau Visual Basic) di panel Jenis proyek terinstal, pilih .NET Core, lalu pilih templat Aplikasi Konsol (.NET Core) di panel tengah. Masukkan nama proyek, seperti "FDD", di kotak teks Nama . Pilih tombol OK.

  2. Tambahkan kode sumber aplikasi.

    Buka file Program.cs atau Program.vb di editor dan ganti kode yang dibuat secara otomatis dengan kode berikut. Ini meminta pengguna untuk memasukkan teks dan menampilkan kata-kata individual yang dimasukkan oleh pengguna. Ini menggunakan ekspresi \w+ reguler untuk memisahkan kata-kata dalam teks input.

    using System;
    using System.Text.RegularExpressions;
    
    namespace Applications.ConsoleApps
    {
        public class ConsoleParser
        {
            public static void Main()
            {
                Console.WriteLine("Enter any text, followed by <Enter>:\n");
                String? s = Console.ReadLine();
                ShowWords(s ?? "You didn't enter anything.");
                Console.Write("\nPress any key to continue... ");
                Console.ReadKey();
            }
    
            private static void ShowWords(String s)
            {
                String pattern = @"\w+";
                var matches = Regex.Matches(s, pattern);
                if (matches.Count == 0)
                {
                    Console.WriteLine("\nNo words were identified in your input.");
                }
                else
                {
                    Console.WriteLine($"\nThere are {matches.Count} words in your string:");
                    for (int ctr = 0; ctr < matches.Count; ctr++)
                    {
                        Console.WriteLine($"   #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}");
                    }
                }
            }
        }
    }
    
    Imports System.Text.RegularExpressions
    
    Namespace Applications.ConsoleApps
        Public Module ConsoleParser
            Public Sub Main()
                Console.WriteLine("Enter any text, followed by <Enter>:")
                Console.WriteLine()
                Dim s = Console.ReadLine()
                ShowWords(s)
                Console.Write($"{vbCrLf}Press any key to continue... ")
                Console.ReadKey()
            End Sub
    
            Private Sub ShowWords(s As String)
                Dim pattern = "\w+"
                Dim matches = Regex.Matches(s, pattern)
                Console.WriteLine()   
                If matches.Count = 0 Then
                    Console.WriteLine("No words were identified in your input.")
                Else
                    Console.WriteLine($"There are {matches.Count} words in your string:")
                    For ctr = 0 To matches.Count - 1
                        Console.WriteLine($"   #{ctr,2}: '{matches(ctr).Value}' at position {matches(ctr).Index}")
                    Next
                End If
                Console.WriteLine()
            End Sub
        End Module
    End Namespace
    
    
  3. Buat build Debug aplikasi Anda.

    Pilih Build>Solusi Build. Anda juga dapat mengkompilasi dan menjalankan build Debug aplikasi Anda dengan memilih Debug>Mulai Debugging.

  4. Sebarkan aplikasi Anda.

    Setelah men-debug dan menguji program, buat file yang akan disebarkan dengan aplikasi Anda. Untuk menerbitkan dari Visual Studio, lakukan hal berikut:

    1. Ubah konfigurasi solusi dari Debug ke Rilis pada toolbar untuk membuat versi Rilis (bukan Debug) aplikasi Anda.

    2. Klik kanan pada proyek (bukan solusi) di Penjelajah Solusi dan pilih Terbitkan.

    3. Di tab Terbitkan , pilih Terbitkan. Visual Studio menulis file yang terdiri dari aplikasi Anda ke sistem file lokal.

    4. Tab Terbitkan sekarang memperlihatkan satu profil, FolderProfile. Pengaturan konfigurasi profil ditampilkan di bagian Ringkasan tab.

    File yang dihasilkan ditempatkan dalam direktori bernama Publish pada Windows dan publish pada sistem Unix yang berada dalam subdirektori proyek Anda .\bin\release\netcoreapp2.1 subdirektori.

Bersama dengan file aplikasi Anda, proses penerbitan memancarkan file database program (.pdb) yang berisi informasi penelusuran kesalahan tentang aplikasi Anda. File ini berguna terutama untuk men-debug pengecualian. Anda dapat memilih untuk tidak mengemasnya dengan file aplikasi Anda. Namun, Anda harus menyimpannya jika Anda ingin men-debug build Rilis aplikasi Anda.

Sebarkan set lengkap file aplikasi dengan cara apa pun yang Anda suka. Misalnya, Anda dapat mengemasnya dalam file Zip, menggunakan perintah sederhana copy , atau menyebarkannya dengan paket penginstalan apa pun pilihan Anda. Setelah diinstal, pengguna kemudian dapat menjalankan aplikasi Anda dengan menggunakan dotnet perintah dan memberikan nama file aplikasi, seperti dotnet fdd.dll.

Selain biner aplikasi, alat penginstal Anda juga harus membundel alat penginstal kerangka kerja bersama atau memeriksanya sebagai prasyarat sebagai bagian dari penginstalan aplikasi. Penginstalan kerangka kerja bersama memerlukan akses Administrator/root karena berada di seluruh komputer.

Penyebaran yang bergantung pada kerangka kerja dengan dependensi pihak ketiga

Menyebarkan penyebaran yang bergantung pada kerangka kerja dengan satu atau beberapa dependensi pihak ketiga mengharuskan dependensi apa pun tersedia untuk proyek Anda. Langkah-langkah tambahan berikut diperlukan sebelum Anda dapat membuat aplikasi:

  1. Gunakan Manajer Paket NuGet untuk menambahkan referensi ke paket NuGet ke proyek Anda; dan jika paket belum tersedia di sistem Anda, instal. Untuk membuka manajer paket, pilih Alat>NuGet Package Manager>Kelola Paket NuGet untuk Solusi.

  2. Konfirmasikan bahwa dependensi pihak ketiga Anda (misalnya, Newtonsoft.Json) diinstal pada sistem Anda dan, jika tidak, instal. Tab Terinstal mencantumkan paket NuGet yang diinstal pada sistem Anda. Jika Newtonsoft.Json tidak tercantum di sana, pilih tab Telusuri dan masukkan "Newtonsoft.Json" di kotak pencarian. Pilih Newtonsoft.Json dan, di panel kanan, pilih proyek Anda sebelum memilih Instal.

  3. Jika Newtonsoft.Json sudah diinstal pada sistem Anda, tambahkan ke proyek Anda dengan memilih proyek Anda di panel kanan tab Kelola Paket untuk Solusi .

Penyebaran yang bergantung pada kerangka kerja dengan dependensi pihak ketiga hanya portabel seperti dependensi pihak ketiganya. Misalnya, jika pustaka pihak ketiga hanya mendukung macOS, aplikasi tidak portabel ke sistem Windows. Ini terjadi jika dependensi pihak ketiga itu sendiri tergantung pada kode asli. Contoh yang baik dari ini adalah server Kestrel, yang membutuhkan dependensi asli pada libuv. Ketika FDD dibuat untuk aplikasi dengan dependensi pihak ketiga semacam ini, output yang diterbitkan berisi folder untuk setiap Pengidentifikasi Runtime (RID) yang didukung dependensi asli (dan yang ada dalam paket NuGet-nya).

Penyebaran mandiri tanpa dependensi pihak ketiga

Menyebarkan penyebaran mandiri tanpa dependensi pihak ketiga melibatkan pembuatan proyek, memodifikasi file csproj , membangun, menguji, dan menerbitkan aplikasi. Contoh sederhana yang ditulis dalam C# menggambarkan prosesnya. Anda mulai dengan membuat, mengoding, dan menguji proyek Anda seperti halnya penyebaran yang bergantung pada kerangka kerja:

  1. Membuat proyek.

    Pilih File>Baru>Proyek. Dalam dialog Proyek Baru, perluas kategori proyek bahasa Anda (C# atau Visual Basic) di panel Jenis proyek terinstal, pilih .NET Core, lalu pilih templat Aplikasi Konsol (.NET Core) di panel tengah. Masukkan nama proyek, seperti "SCD", di kotak teks Nama , dan pilih tombol OK .

  2. Tambahkan kode sumber aplikasi.

    Buka file Program.cs atau Program.vb di editor Anda, dan ganti kode yang dibuat secara otomatis dengan kode berikut. Ini meminta pengguna untuk memasukkan teks dan menampilkan kata-kata individual yang dimasukkan oleh pengguna. Ini menggunakan ekspresi \w+ reguler untuk memisahkan kata-kata dalam teks input.

    using System;
    using System.Text.RegularExpressions;
    
    namespace Applications.ConsoleApps
    {
        public class ConsoleParser
        {
            public static void Main()
            {
                Console.WriteLine("Enter any text, followed by <Enter>:\n");
                String? s = Console.ReadLine();
                ShowWords(s ?? "You didn't enter anything.");
                Console.Write("\nPress any key to continue... ");
                Console.ReadKey();
            }
    
            private static void ShowWords(String s)
            {
                String pattern = @"\w+";
                var matches = Regex.Matches(s, pattern);
                if (matches.Count == 0)
                {
                    Console.WriteLine("\nNo words were identified in your input.");
                }
                else
                {
                    Console.WriteLine($"\nThere are {matches.Count} words in your string:");
                    for (int ctr = 0; ctr < matches.Count; ctr++)
                    {
                        Console.WriteLine($"   #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}");
                    }
                }
            }
        }
    }
    
    Imports System.Text.RegularExpressions
    
    Namespace Applications.ConsoleApps
        Public Module ConsoleParser
            Public Sub Main()
                Console.WriteLine("Enter any text, followed by <Enter>:")
                Console.WriteLine()
                Dim s = Console.ReadLine()
                ShowWords(s)
                Console.Write($"{vbCrLf}Press any key to continue... ")
                Console.ReadKey()
            End Sub
    
            Private Sub ShowWords(s As String)
                Dim pattern = "\w+"
                Dim matches = Regex.Matches(s, pattern)
                Console.WriteLine()   
                If matches.Count = 0 Then
                    Console.WriteLine("No words were identified in your input.")
                Else
                    Console.WriteLine($"There are {matches.Count} words in your string:")
                    For ctr = 0 To matches.Count - 1
                        Console.WriteLine($"   #{ctr,2}: '{matches(ctr).Value}' at position {matches(ctr).Index}")
                    Next
                End If
                Console.WriteLine()
            End Sub
        End Module
    End Namespace
    
    
  3. Tentukan apakah Anda ingin menggunakan mode invarian globalisasi.

    Terutama jika aplikasi Anda menargetkan Linux, Anda dapat mengurangi ukuran total penyebaran Anda dengan memanfaatkan mode invarian globalisasi. Mode invarian globalisasi berguna untuk aplikasi yang tidak sadar secara global dan dapat menggunakan konvensi pemformatan, konvensi casing, dan perbandingan string dan urutan pengurutan budaya invarian.

    Untuk mengaktifkan mode invarian, klik kanan pada proyek Anda (bukan solusi) di Penjelajah Solusi, dan pilih Edit SCD.csproj atau Edit SCD.vbproj. Kemudian tambahkan baris yang disorot berikut ke file:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <Nullable>enable</Nullable>
      </PropertyGroup>
    
      <ItemGroup>
        <RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
      </ItemGroup> 
    
    </Project>
    
  4. Buat build Debug aplikasi Anda.

    Pilih Build>Solusi Build. Anda juga dapat mengkompilasi dan menjalankan build Debug aplikasi Anda dengan memilih Debug>Mulai Debugging. Langkah penelusuran kesalahan ini memungkinkan Anda mengidentifikasi masalah dengan aplikasi Anda saat berjalan di platform host Anda. Anda masih harus mengujinya di setiap platform target Anda.

    Jika Anda telah mengaktifkan mode invariant globalisasi, pastikan untuk menguji apakah tidak adanya data sensitif budaya cocok untuk aplikasi Anda.

Setelah menyelesaikan penelusuran kesalahan, Anda dapat menerbitkan penyebaran mandiri:

Setelah men-debug dan menguji program, buat file yang akan disebarkan dengan aplikasi Anda untuk setiap platform yang ditargetkannya.

Untuk menerbitkan aplikasi Anda dari Visual Studio, lakukan hal berikut:

  1. Tentukan platform yang akan ditargetkan aplikasi Anda.

    1. Klik kanan pada proyek Anda (bukan solusinya) di Penjelajah Solusi dan pilih Edit SCD.csproj.

    2. Buat <RuntimeIdentifiers> tag di <PropertyGroup> bagian file csproj Anda yang menentukan platform target aplikasi Anda, dan tentukan pengidentifikasi runtime (RID) dari setiap platform yang Anda targetkan. Anda juga perlu menambahkan titik koma untuk memisahkan RID. Lihat Katalog pengidentifikasi runtime untuk daftar pengidentifikasi runtime.

    Misalnya, contoh berikut menunjukkan bahwa aplikasi berjalan pada sistem operasi Windows 64-bit dan sistem operasi OS X 64-bit.

    <PropertyGroup>
       <RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers>
    </PropertyGroup>
    

    Elemen <RuntimeIdentifiers> dapat masuk ke apa pun <PropertyGroup> yang Anda miliki dalam file csproj Anda. Contoh lengkap file csproj muncul nanti di bagian ini.

  2. Terbitkan aplikasi Anda.

    Setelah men-debug dan menguji program, buat file yang akan disebarkan dengan aplikasi Anda untuk setiap platform yang ditargetkannya.

    Untuk menerbitkan aplikasi Anda dari Visual Studio, lakukan hal berikut:

    1. Ubah konfigurasi solusi dari Debug ke Rilis pada toolbar untuk membuat versi Rilis (bukan Debug) aplikasi Anda.

    2. Klik kanan pada proyek (bukan solusi) di Penjelajah Solusi dan pilih Terbitkan.

    3. Di tab Terbitkan , pilih Terbitkan. Visual Studio menulis file yang terdiri dari aplikasi Anda ke sistem file lokal.

    4. Tab Terbitkan sekarang memperlihatkan satu profil, FolderProfile. Pengaturan konfigurasi profil ditampilkan di bagian Ringkasan tab. Runtime Target mengidentifikasi runtime mana yang telah diterbitkan, dan Lokasi Target mengidentifikasi tempat file untuk penyebaran mandiri ditulis.

    5. Visual Studio secara default menulis semua file yang diterbitkan ke satu direktori. Untuk kenyamanan, yang terbaik adalah membuat profil terpisah untuk setiap runtime target dan menempatkan file yang diterbitkan dalam direktori khusus platform. Ini melibatkan pembuatan profil penerbitan terpisah untuk setiap platform target. Jadi sekarang bangun kembali aplikasi untuk setiap platform dengan melakukan hal berikut:

      1. Pilih Buat profil baru dalam dialog Terbitkan .

      2. Dalam dialog Pilih target penerbitan, ubah pilih lokasi folder menjadi bin\Release\PublishOutput\win-x64. Pilih OK.

      3. Pilih profil baru (FolderProfile1) dalam daftar profil, dan pastikan bahwa Runtime Target adalah win-x64. Jika tidak, pilih Pengaturan. Dalam dialog Pengaturan Profil, ubah Runtime Target menjadi win-x64 dan pilih Simpan. Jika tidak, pilih Batalkan.

      4. Pilih Terbitkan untuk menerbitkan aplikasi Anda untuk platform Windows 10 64-bit.

      5. Ikuti langkah-langkah sebelumnya lagi untuk membuat profil untuk osx-x64 platform. Lokasi Target adalah bin\Release\PublishOutput\osx-x64, dan Runtime Target adalah osx-x64. Nama yang ditetapkan Visual Studio ke profil ini adalah FolderProfile2.

    Setiap lokasi target berisi kumpulan file lengkap (file aplikasi Anda dan semua file .NET Core) yang diperlukan untuk meluncurkan aplikasi Anda.

Bersama dengan file aplikasi Anda, proses penerbitan memancarkan file database program (.pdb) yang berisi informasi penelusuran kesalahan tentang aplikasi Anda. File ini berguna terutama untuk men-debug pengecualian. Anda dapat memilih untuk tidak mengemasnya dengan file aplikasi Anda. Namun, Anda harus menyimpannya jika Anda ingin men-debug build Rilis aplikasi Anda.

Sebarkan file yang diterbitkan dengan cara apa pun yang Anda suka. Misalnya, Anda dapat mengemasnya dalam file Zip, menggunakan perintah sederhana copy , atau menyebarkannya dengan paket penginstalan apa pun pilihan Anda.

Berikut ini adalah file csproj lengkap untuk proyek ini.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers>
  </PropertyGroup>
</Project>

Penyebaran mandiri dengan dependensi pihak ketiga

Menyebarkan penyebaran mandiri dengan satu atau beberapa dependensi pihak ketiga melibatkan penambahan dependensi. Langkah-langkah tambahan berikut diperlukan sebelum Anda dapat membuat aplikasi:

  1. Gunakan Manajer Paket NuGet untuk menambahkan referensi ke paket NuGet ke proyek Anda; dan jika paket belum tersedia di sistem Anda, instal. Untuk membuka manajer paket, pilih Alat>NuGet Package Manager>Kelola Paket NuGet untuk Solusi.

  2. Konfirmasikan bahwa dependensi pihak ketiga Anda (misalnya, Newtonsoft.Json) diinstal pada sistem Anda dan, jika tidak, instal. Tab Terinstal mencantumkan paket NuGet yang diinstal pada sistem Anda. Jika Newtonsoft.Json tidak tercantum di sana, pilih tab Telusuri dan masukkan "Newtonsoft.Json" di kotak pencarian. Pilih Newtonsoft.Json dan, di panel kanan, pilih proyek Anda sebelum memilih Instal.

  3. Jika Newtonsoft.Json sudah diinstal pada sistem Anda, tambahkan ke proyek Anda dengan memilih proyek Anda di panel kanan tab Kelola Paket untuk Solusi .

Berikut ini adalah file csproj lengkap untuk proyek ini:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <RuntimeIdentifiers>win-x64;osx-x64</RuntimeIdentifiers>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
  </ItemGroup>
</Project>

Saat Anda menyebarkan aplikasi, dependensi pihak ketiga apa pun yang digunakan dalam aplikasi Anda juga terkandung dengan file aplikasi Anda. Pustaka pihak ketiga tidak diperlukan pada sistem tempat aplikasi berjalan.

Anda hanya dapat menyebarkan penyebaran mandiri dengan pustaka pihak ketiga ke platform yang didukung oleh pustaka tersebut. Ini mirip dengan memiliki dependensi pihak ketiga dengan dependensi asli dalam penyebaran yang bergantung pada kerangka kerja Anda, di mana dependensi asli tidak akan ada pada platform target kecuali sebelumnya diinstal di sana.

Lihat juga