Aracılığıyla paylaş


Visual Studio ile .NET Core uygulamaları dağıtma

.NET Core uygulamasını, uygulama ikili dosyalarını içeren ancak hedef sistemde .NET Core'un varlığına bağlı olan çerçeveye bağımlı bir dağıtım olarak veya hem uygulamanızı hem de .NET Core ikili dosyalarını içeren bağımsız bir dağıtım olarak dağıtabilirsiniz. .NET Core uygulama dağıtımına genel bakış için bkz . .NET Core Uygulama Dağıtımı.

Aşağıdaki bölümlerde, aşağıdaki dağıtım türlerini oluşturmak için Microsoft Visual Studio'nun nasıl kullanılacağı gösterilmektedir:

  • Çerçeveye bağımlı dağıtım
  • Üçüncü taraf bağımlılıklarıyla çerçeveye bağımlı dağıtım
  • Bağımsız dağıtım
  • Üçüncü taraf bağımlılıklarıyla bağımsız dağıtım

.NET Core uygulamaları geliştirmek için Visual Studio kullanma hakkında bilgi için bkz . .NET Core bağımlılıkları ve gereksinimleri.

Çerçeveye bağımlı dağıtım

Üçüncü taraf bağımlılıkları olmadan çerçeveye bağımlı bir dağıtım dağıtmak yalnızca uygulamayı derlemeyi, test etmeyi ve yayımlamayı içerir. C# dilinde yazılmış basit bir örnek süreci gösterir.

  1. Projeyi oluşturun.

    Dosya>Yeni>Proje’yi seçin. Yeni Proje iletişim kutusunda, Yüklü proje türleri bölmesinde dilinizin (C# veya Visual Basic) proje kategorilerini genişletin, .NET Core'u seçin ve ardından orta bölmedeki Konsol Uygulaması (.NET Core) şablonunu seçin. Ad metin kutusuna "FDD" gibi bir proje adı girin. Tamam düğmesini seçin.

  2. Uygulamanın kaynak kodunu ekleyin.

    düzenleyicide Program.cs veya Program.vb dosyasını açın ve otomatik olarak oluşturulan kodu aşağıdaki kodla değiştirin. Kullanıcıdan metin girmesini ister ve kullanıcı tarafından girilen sözcükleri tek tek görüntüler. Giriş metnindeki sözcükleri ayırmak için normal ifadeyi \w+ kullanır.

    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. Uygulamanızın hata ayıklama derlemesini oluşturun.

    Derleme Çözümü Oluştur'a>tıklayın. Ayrıca Hata AyıklamaYı Başlat Hata Ayıklama'ya tıklayarak uygulamanızın Hata Ayıklama>derlemesini derleyebilir ve çalıştırabilirsiniz.

  4. Uygulamanızı dağıtın.

    Programda hata ayıkladıktan ve test ettikten sonra uygulamanızla dağıtılacak dosyaları oluşturun. Visual Studio'dan yayımlamak için aşağıdakileri yapın:

    1. Uygulamanızın Bir Yayın (Hata Ayıklama değil) sürümünü oluşturmak için çözüm yapılandırmasını araç çubuğunda Hata Ayıklayerine Yayın olarak değiştirin.

    2. Çözüm Gezgini'da projeye (çözüme değil) sağ tıklayın ve Yayımla'yı seçin.

    3. Yayımla sekmesinde Yayımla'yı seçin. Visual Studio, uygulamanızı oluşturan dosyaları yerel dosya sistemine yazar.

    4. Yayımla sekmesi artık tek bir profil (FolderProfile) gösterir. Profilin yapılandırma ayarları, sekmenin Özet bölümünde gösterilir.

    Sonuçta elde edilen dosyalar, projenizin .\bin\release\netcoreapp2.1 alt dizininin alt dizinindeki Windows ve publish Unix sistemlerinde adlı Publish bir dizine yerleştirilir.

Yayımlama işlemi, uygulamanızın dosyalarıyla birlikte uygulamanızla ilgili hata ayıklama bilgilerini içeren bir program veritabanı (.pdb) dosyası da yayar. Dosya öncelikli olarak hata ayıklama özel durumlarında kullanışlıdır. Uygulamanızın dosyalarıyla paketlememeyi seçebilirsiniz. Ancak uygulamanızın Yayın derlemesinde hata ayıklamak istemeniz durumunda kaydetmeniz gerekir.

Uygulama dosyalarının tamamını istediğiniz şekilde dağıtın. Örneğin, bunları bir Zip dosyasında paketleyebilir, basit copy bir komut kullanabilir veya istediğiniz herhangi bir yükleme paketiyle dağıtabilirsiniz. Yüklendikten sonra kullanıcılar komutunu kullanarak dotnet ve gibi dotnet fdd.dlluygulama dosya adını sağlayarak uygulamanızı yürütebilir.

Uygulama ikili dosyalarına ek olarak, yükleyiciniz paylaşılan çerçeve yükleyicisini de paketlemeli veya uygulama yüklemesinin bir parçası olarak önkoşul olarak bunu denetlemelidir. Paylaşılan çerçevenin yüklenmesi, makine genelinde olduğundan Yönetici istrator/kök erişimi gerektirir.

Üçüncü taraf bağımlılıklarıyla çerçeveye bağımlı dağıtım

Bir veya daha fazla üçüncü taraf bağımlılığıyla çerçeveye bağımlı bir dağıtım dağıtmak için projeniz için tüm bağımlılıkların kullanılabilir olması gerekir. Uygulamanızı derlemeden önce aşağıdaki ek adımlar gereklidir:

  1. Projenize bir NuGet paketine başvuru eklemek için NuGet Paket Yöneticisi kullanın ve paketi sisteminizde zaten kullanılamıyorsa yükleyin. Paket yöneticisini açmak için Araçlar>NuGet Paket Yöneticisi> Çözüm için NuGet Paketlerini Yönet'i seçin.

  2. Üçüncü taraf bağımlılıklarınızın (örneğin, Newtonsoft.Json) sisteminize yüklendiğini onaylayın ve yüklü değilse yükleyin. Yüklü sekmesinde sisteminizde yüklü Olan NuGet paketleri listelenir. Newtonsoft.Json Listede yoksa Gözat sekmesini seçin ve arama kutusuna "Newtonsoft.Json" yazın. Sağ Newtonsoft.Json bölmede Yükle'yi seçmeden önce projenizi seçin.

  3. Sisteminizde zaten yüklüyseNewtonsoft.Json, Çözüm için Paketleri Yönet sekmesinin sağ bölmesinde projenizi seçerek projenize ekleyin.

Üçüncü taraf bağımlılıkları olan çerçeveye bağımlı dağıtım, yalnızca üçüncü taraf bağımlılıkları kadar taşınabilir. Örneğin, bir üçüncü taraf kitaplığı yalnızca macOS'yi destekliyorsa, uygulama Windows sistemlerine taşınabilir değildir. Üçüncü taraf bağımlılığının kendisi yerel koda bağımlıysa bu durum oluşur. Bunun iyi bir örneği, libuv üzerinde yerel bağımlılık gerektiren Kestrel sunucusudur. Bu tür bir üçüncü taraf bağımlılığına sahip bir uygulama için bir FDD oluşturulduğunda, yayımlanan çıktı yerel bağımlılığın desteklediği (ve NuGet paketinde bulunan) her Çalışma Zamanı Tanımlayıcısı (RID) için bir klasör içerir.

Üçüncü taraf bağımlılıkları olmadan bağımsız dağıtım

Üçüncü taraf bağımlılıkları olmadan bağımsız bir dağıtım dağıtmak için projenin oluşturulması, csproj dosyasının değiştirilmesi, uygulamanın oluşturulması, test edilmesi ve yayımlanması gerekir. C# dilinde yazılmış basit bir örnek süreci gösterir. İlk olarak, çerçeveye bağımlı bir dağıtımda yaptığınız gibi projenizi oluşturarak, kodlayarak ve test ederek başlarsınız:

  1. Projeyi oluşturun.

    Dosya>Yeni>Proje’yi seçin. Yeni Proje iletişim kutusunda, Yüklü proje türleri bölmesinde dilinizin (C# veya Visual Basic) proje kategorilerini genişletin, .NET Core'u seçin ve ardından orta bölmedeki Konsol Uygulaması (.NET Core) şablonunu seçin. Ad metin kutusuna "SCD" gibi bir proje adı girin ve Tamam düğmesini seçin.

  2. Uygulamanın kaynak kodunu ekleyin.

    düzenleyicinizde Program.cs veya Program.vb dosyasını açın ve otomatik oluşturulan kodu aşağıdaki kodla değiştirin. Kullanıcıdan metin girmesini ister ve kullanıcı tarafından girilen sözcükleri tek tek görüntüler. Giriş metnindeki sözcükleri ayırmak için normal ifadeyi \w+ kullanır.

    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. Genelleştirme sabit modunu kullanmak isteyip istemediğinizi belirleyin.

    Özellikle uygulamanız Linux'ı hedef alıyorsa, genelleştirme sabit modundan yararlanarak dağıtımınızın toplam boyutunu küçültebilirsiniz. Genelleştirme sabit modu, genel olarak farkında olmayan ve sabit kültürün biçimlendirme kurallarını, büyük/küçük harf kurallarını, dize karşılaştırmasını ve sıralama düzenini kullanabilen uygulamalar için kullanışlıdır.

    Sabit modu etkinleştirmek için, Çözüm Gezgini'da projenize (çözüme değil) sağ tıklayın ve SCD.csproj düzenle veya SCD.vbproj'yi düzenle'yi seçin. Ardından dosyaya aşağıdaki vurgulanmış satırları ekleyin:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <Nullable>enable</Nullable>
      </PropertyGroup>
    
      <ItemGroup>
        <RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
      </ItemGroup> 
    
    </Project>
    
  4. Uygulamanızın hata ayıklama derlemesini oluşturun.

    Derleme Çözümü Oluştur'a>tıklayın. Ayrıca Hata AyıklamaYı Başlat Hata Ayıklama'ya tıklayarak uygulamanızın Hata Ayıklama>derlemesini derleyebilir ve çalıştırabilirsiniz. Bu hata ayıklama adımı, konak platformunuzda çalışırken uygulamanızla ilgili sorunları belirlemenize olanak tanır. Yine de hedef platformlarınızın her birinde test etmek zorunda kalacaksınız.

    Genelleştirme sabit modunu etkinleştirdiyseniz, kültüre duyarlı verilerin yokluğunun uygulamanız için uygun olup olmadığını test etmeye dikkat edin.

Hata ayıklamayı tamamladıktan sonra, bağımsız dağıtımınızı yayımlayabilirsiniz:

Programda hata ayıkladıktan ve test ettikten sonra, hedeflediğiniz her platform için uygulamanızla dağıtılacak dosyaları oluşturun.

Uygulamanızı Visual Studio'dan yayımlamak için aşağıdakileri yapın:

  1. Uygulamanızın hedefleyeceği platformları tanımlayın.

    1. Çözüm Gezgini'da projenize (çözüme değil) sağ tıklayın ve SCD.csproj dosyasını düzenle'yi seçin.

    2. Csproj dosyanızın bölümünde uygulamanızın <PropertyGroup> hedeflediğini platformları tanımlayan bir <RuntimeIdentifiers> etiket oluşturun ve hedeflediğiniz her platformun çalışma zamanı tanımlayıcısını (RID) belirtin. AYRıCA RID'leri ayırmak için noktalı virgül eklemeniz gerekir. Çalışma zamanı tanımlayıcılarının listesi için bkz. Çalışma zamanı tanımlayıcı kataloğu.

    Örneğin, aşağıdaki örnek uygulamanın 64 bit Windows işletim sistemlerinde ve 64 bit OS X işletim sisteminde çalıştığını gösterir.

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

    <RuntimeIdentifiers> öğesi csproj dosyanızda bulunan herhangi bir <PropertyGroup> öğeye gidebilir. Bu bölümün devamında eksiksiz bir örnek csproj dosyası görüntülenir.

  2. Uygulamanızı yayımlayın.

    Programda hata ayıkladıktan ve test ettikten sonra, hedeflediğiniz her platform için uygulamanızla dağıtılacak dosyaları oluşturun.

    Uygulamanızı Visual Studio'dan yayımlamak için aşağıdakileri yapın:

    1. Uygulamanızın Bir Yayın (Hata Ayıklama değil) sürümünü oluşturmak için çözüm yapılandırmasını araç çubuğunda Hata Ayıklayerine Yayın olarak değiştirin.

    2. Çözüm Gezgini'da projeye (çözüme değil) sağ tıklayın ve Yayımla'yı seçin.

    3. Yayımla sekmesinde Yayımla'yı seçin. Visual Studio, uygulamanızı oluşturan dosyaları yerel dosya sistemine yazar.

    4. Yayımla sekmesi artık tek bir profil (FolderProfile) gösterir. Profilin yapılandırma ayarları, sekmenin Özet bölümünde gösterilir. Hedef Çalışma Zamanı hangi çalışma zamanının yayımlandığını, Hedef Konum ise bağımsız dağıtım dosyalarının nereye yazıldığını tanımlar.

    5. Visual Studio varsayılan olarak yayımlanan tüm dosyaları tek bir dizine yazar. Kolaylık sağlamak için, her hedef çalışma zamanı için ayrı profiller oluşturmak ve yayımlanan dosyaları platforma özgü bir dizine yerleştirmek en iyisidir. Bu, her hedef platform için ayrı bir yayımlama profili oluşturmayı içerir. Bu nedenle şimdi aşağıdakileri yaparak her platform için uygulamayı yeniden derleyin:

      1. Yayımla iletişim kutusunda Yeni profil oluştur'useçin.

      2. Yayımlama hedefi seçin iletişim kutusunda Klasör konumu seçin'i bin\Release\PublishOutput\win-x64 olarak değiştirin. Tamam'ı seçin.

      3. Profil listesinden yeni profili (FolderProfile1) seçin ve Hedef Çalışma Zamanı'nın olduğundan win-x64emin olun. Değilse Ayarlar'ı seçin. Profil Ayarlar iletişim kutusunda Hedef Çalışma Zamanı'nı olarak win-x64 değiştirin ve Kaydet'i seçin. Aksi takdirde İptal'i seçin.

      4. Uygulamanızı 64 bit Windows 10 platformları için yayımlamak için Yayımla'yı seçin.

      5. Platform için bir profil oluşturmak için osx-x64 önceki adımları yeniden izleyin. Hedef Konumbin\Release\PublishOutput\osx-x64, Hedef Çalışma Zamanı ise şeklindedirosx-x64. Visual Studio'da bu profile atanan ad FolderProfile2'dir.

    Her hedef konum, uygulamanızı başlatmak için gereken tüm dosya kümesini (hem uygulama dosyalarınız hem de tüm .NET Core dosyaları) içerir.

Yayımlama işlemi, uygulamanızın dosyalarıyla birlikte uygulamanızla ilgili hata ayıklama bilgilerini içeren bir program veritabanı (.pdb) dosyası da yayar. Dosya öncelikli olarak hata ayıklama özel durumlarında kullanışlıdır. Uygulamanızın dosyalarıyla paketlememeyi seçebilirsiniz. Ancak uygulamanızın Yayın derlemesinde hata ayıklamak istemeniz durumunda kaydetmeniz gerekir.

Yayımlanan dosyaları istediğiniz şekilde dağıtın. Örneğin, bunları bir Zip dosyasında paketleyebilir, basit copy bir komut kullanabilir veya istediğiniz herhangi bir yükleme paketiyle dağıtabilirsiniz.

Bu projenin tam csproj dosyası aşağıdadır.

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

Üçüncü taraf bağımlılıklarıyla bağımsız dağıtım

Bir veya daha fazla üçüncü taraf bağımlılığıyla bağımsız bir dağıtım dağıtmak, bağımlılıkları eklemeyi içerir. Uygulamanızı derlemeden önce aşağıdaki ek adımlar gereklidir:

  1. Projenize bir NuGet paketine başvuru eklemek için NuGet Paket Yöneticisi kullanın ve paketi sisteminizde zaten kullanılamıyorsa yükleyin. Paket yöneticisini açmak için Araçlar>NuGet Paket Yöneticisi> Çözüm için NuGet Paketlerini Yönet'i seçin.

  2. Üçüncü taraf bağımlılıklarınızın (örneğin, Newtonsoft.Json) sisteminize yüklendiğini onaylayın ve yüklü değilse yükleyin. Yüklü sekmesinde sisteminizde yüklü Olan NuGet paketleri listelenir. Newtonsoft.Json Listede yoksa Gözat sekmesini seçin ve arama kutusuna "Newtonsoft.Json" yazın. Sağ Newtonsoft.Json bölmede Yükle'yi seçmeden önce projenizi seçin.

  3. Sisteminizde zaten yüklüyseNewtonsoft.Json, Çözüm için Paketleri Yönet sekmesinin sağ bölmesinde projenizi seçerek projenize ekleyin.

Bu projenin csproj dosyasının tamamı aşağıdadır:

<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>

Uygulamanızı dağıttığınızda, uygulamanızda kullanılan tüm üçüncü taraf bağımlılıkları da uygulama dosyalarınızda yer alır. Uygulamanın çalıştığı sistemde üçüncü taraf kitaplıkları gerekli değildir.

Üçüncü taraf kitaplığı olan bağımsız bir dağıtımı yalnızca bu kitaplık tarafından desteklenen platformlara dağıtabilirsiniz. Bu, çerçeveye bağımlı dağıtımınızda yerel bağımlılıklara sahip üçüncü taraf bağımlılıkları olmasıyla benzerdir ve yerel bağımlılıklar daha önce orada yüklenmediği sürece hedef platformda mevcut olmaz.

Ayrıca bkz.