.NET CLI ile .NET uygulamaları yayımlama
Bu makalede komut satırından .NET uygulamanızı nasıl yayımlayabileceğiniz gösterilmektedir. .NET, uygulamalarınızı yayımlamak için üç yol sağlar. Çerçeveye bağımlı dağıtım, yerel olarak yüklenen .NET çalışma zamanını kullanan platformlar arası bir .dll dosyası oluşturur. Çerçeveye bağımlı yürütülebilir dosya, yerel olarak yüklenen .NET çalışma zamanını kullanan platforma özgü bir yürütülebilir dosya oluşturur. Bağımsız yürütülebilir dosya, platforma özgü bir yürütülebilir dosya oluşturur ve .NET çalışma zamanının yerel bir kopyasını içerir.
Bu yayımlama modlarının genel bakışı için bkz. .NET Uygulama Dağıtımı.
CLI'yi kullanma konusunda hızlı yardım mı arıyorsunuz? Aşağıdaki tabloda uygulamanızı yayımlamaya ilişkin bazı örnekler gösterilmektedir. Hedef çerçeveyi parametresiyle -f <TFM>
veya proje dosyasını düzenleyerek belirtebilirsiniz. Daha fazla bilgi için bkz . Yayımlama temel bilgileri.
Yayımlama Modu | SDK Sürümü | Komut |
---|---|---|
Çerçeveye bağımlı dağıtım | 2.1 | dotnet publish -c Release |
3,1 | dotnet publish -c Release -p:UseAppHost=false |
|
5.0 | dotnet publish -c Release -p:UseAppHost=false |
|
6.0 | dotnet publish -c Release -p:UseAppHost=false |
|
7.0 | dotnet publish -c Release -p:UseAppHost=false |
|
Çerçeveye bağımlı yürütülebilir dosya | 3,1 | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
5.0 | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
|
6.0 | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
|
7.0 | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
|
Bağımsız dağıtım | 2.1 | dotnet publish -c Release -r <RID> --self-contained true |
3,1 | dotnet publish -c Release -r <RID> --self-contained true |
|
5.0 | dotnet publish -c Release -r <RID> --self-contained true |
|
6.0 | dotnet publish -c Release -r <RID> --self-contained true |
|
7.0 | dotnet publish -c Release -r <RID> --self-contained true |
* SDK sürüm 3.1 veya üzeri kullanıldığında, temel dotnet publish
komut çalıştırılırken çerçeveye bağımlı yürütülebilir dosya varsayılan yayımlama modudur.
Not
-c Release
parametresi gerekli değildir. Uygulamanızın Yayın derlemesini yayımlamak için anımsatıcı olarak sağlanır.
Yayımlamayla ilgili temel bilgiler
<TargetFramework>
Proje dosyasının ayarı, uygulamanızı yayımladığınızda varsayılan hedef çerçeveyi belirtir. Hedef çerçeveyi geçerli herhangi bir Hedef Çerçeve Bilinen Adı (TFM) olarak değiştirebilirsiniz. Örneğin, projeniz kullanıyorsa <TargetFramework>netcoreapp2.1</TargetFramework>
.NET Core 2.1'i hedefleyen bir ikili oluşturulur. Bu ayarda belirtilen TFM, komutu tarafından dotnet publish
kullanılan varsayılan hedeftir.
Birden fazla çerçeveyi hedeflemek istiyorsanız, ayarı noktalı virgülle ayrılmış olarak birden çok TFM değerine ayarlayabilirsiniz <TargetFrameworks>
. Uygulamanızı oluşturduğunuzda, her hedef çerçeve için bir derleme oluşturulur. Ancak uygulamanızı yayımladığınızda, hedef çerçeveyi komutuyla dotnet publish -f <TFM>
belirtmeniz gerekir.
Aksi ayarlanmadığı sürece komutun dotnet publish
çıkış dizini olur ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/
. Parametresiyle değiştirilmediği sürece varsayılan BUILD-CONFIGURATION modu Hata Ayıkla'dır-c
. Örneğin, dotnet publish -c Release -f netcoreapp2.1
'de ./bin/Release/netcoreapp2.1/publish/
yayımlar.
.NET Core SDK 3.1 veya sonraki bir sürümü kullanıyorsanız, varsayılan yayımlama modu çerçeveye bağımlı yürütülebilir dosyadır.
.NET Core SDK 2.1 kullanıyorsanız, varsayılan yayımlama modu çerçeveye bağımlı dağıtımdır.
Yerel bağımlılıklar
Uygulamanızın yerel bağımlılıkları varsa, farklı bir işletim sisteminde çalışmayabilir. Örneğin, uygulamanız yerel Windows API'sini kullanıyorsa macOS veya Linux üzerinde çalışmaz. Platforma özgü kod sağlamanız ve her platform için bir yürütülebilir dosya derlemeniz gerekir.
Başvurdığınız bir kitaplığın yerel bağımlılığı varsa uygulamanızın her platformda çalışmayabileceğini de göz önünde bulundurun. Ancak, başvurabileceğiniz bir NuGet paketinde sizin için gerekli yerel bağımlılıkları işlemek için platforma özgü sürümler bulunuyor olabilir.
Yerel bağımlılıkları olan bir uygulamayı dağıtırken, yayımlamak istediğiniz hedef platformu belirtmek için anahtarını kullanmanız dotnet publish -r <RID>
gerekebilir. Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.
Platforma özgü ikili dosyalar hakkında daha fazla bilgi , Çerçeveye bağımlı yürütülebilir dosya ve Bağımsız dağıtım bölümlerinde ele alınmıştır.
Örnek uygulama
Yayımlama komutlarını keşfetmek için aşağıdaki uygulamayı kullanabilirsiniz. Uygulama, terminalinizde aşağıdaki komutlar çalıştırılarak oluşturulur:
mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle
Program.cs
Konsol şablonu tarafından oluşturulan veya Program.vb
dosyasının aşağıdaki şekilde değiştirilmesi gerekir:
using System;
namespace apptest1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"));
}
}
}
Module Program
Sub Main(args As String())
Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"))
End Sub
End Module
Uygulamayıdotnet run
() çalıştırdığınızda aşağıdaki çıkış görüntülenir:
_ _ _ _ __ __ _ _ _
| | | | ___| | | ___ \ \ / /__ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_)
|/
Çerçeveye bağımlı dağıtım
.NET Core 2.1 SDK CLI'sı için dotnet publish
temel komutun varsayılan modu çerçeveye bağımlı dağıtımdır (FDD). Daha yeni SDK'larda, çerçeveye bağımlı yürütülebilir dosya varsayılandır.
Uygulamanızı FDD olarak yayımladığınızda klasörde bir <PROJECT-NAME>.dll
dosya oluşturulur ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/
. Uygulamanızı çalıştırmak için çıkış klasörüne gidin ve komutunu kullanın dotnet <PROJECT-NAME>.dll
.
Uygulamanız belirli bir .NET sürümünü hedefleye yapılandırıldı. Hedeflenen .NET çalışma zamanının uygulamanızın çalıştığı herhangi bir makinede olması gerekir. Örneğin, uygulamanız .NET Core 3.1'i hedefliyorsa, uygulamanızın üzerinde çalıştığı tüm makinelerde .NET Core 3.1 çalışma zamanı yüklü olmalıdır. Yayımlama temel bilgileri bölümünde belirtildiği gibi, varsayılan hedef çerçeveyi değiştirmek veya birden fazla çerçeveyi hedeflemek için proje dosyanızı düzenleyebilirsiniz.
FDD yayımlamak, uygulamayı çalıştıran sistemde kullanılabilen en son .NET güvenlik düzeltme ekine otomatik olarak iletilen bir uygulama oluşturur. Derleme zamanında sürüm bağlama hakkında daha fazla bilgi için bkz. Kullanılacak .NET sürümünü seçme.
Yayımlama Modu | SDK Sürümü | Komut |
---|---|---|
Çerçeveye bağımlı dağıtım | 2.1 | dotnet publish -c Release |
3,1 | dotnet publish -c Release -p:UseAppHost=false |
|
5.0 | dotnet publish -c Release -p:UseAppHost=false |
|
6.0 | dotnet publish -c Release -p:UseAppHost=false |
|
7.0 | dotnet publish -c Release -p:UseAppHost=false |
Çerçeveye bağımlı yürütülebilir dosya
.NET 5 (ve .NET Core 3.1) SDK CLI'sı için dotnet publish
temel komutun varsayılan modu çerçeveye bağımlı yürütülebilir dosyadır (FDE). Geçerli işletim sistemini hedeflemek istediğiniz sürece başka parametre belirtmeniz gerekmez.
Bu modda, platformlar arası uygulamanızı barındırmak için platforma özgü bir yürütülebilir konak oluşturulur. FDD komutu biçiminde dotnet
bir konak gerektirdiğinden bu mod FDD'ye benzer. Ana bilgisayar yürütülebilir dosya adı platforma göre değişir ve benzeri <PROJECT-FILE>.exe
bir adla adlandırılır. Bu yürütülebilir dosyayı çağırmak dotnet <PROJECT-FILE>.dll
yerine doğrudan çalıştırabilirsiniz. Bu, uygulamayı çalıştırmanın hala kabul edilebilir bir yoludur.
Uygulamanız belirli bir .NET sürümünü hedefleye yapılandırıldı. Hedeflenen .NET çalışma zamanının uygulamanızın çalıştığı herhangi bir makinede olması gerekir. Örneğin, uygulamanız .NET Core 3.1'i hedefliyorsa, uygulamanızın üzerinde çalıştığı tüm makinelerde .NET Core 3.1 çalışma zamanı yüklü olmalıdır. Yayımlama temel bilgileri bölümünde belirtildiği gibi, varsayılan hedef çerçeveyi değiştirmek veya birden fazla çerçeveyi hedeflemek için proje dosyanızı düzenleyebilirsiniz.
FDE yayımlamak, uygulamayı çalıştıran sistemde kullanılabilen en son .NET güvenlik düzeltme ekine otomatik olarak iletilen bir uygulama oluşturur. Derleme zamanında sürüm bağlama hakkında daha fazla bilgi için bkz. Kullanılacak .NET sürümünü seçme.
.NET 2.1 için, FDE yayımlamak için komutuyla dotnet publish
aşağıdaki anahtarları kullanmanız gerekir:
-r <RID>
Bu anahtar, hedef platformu belirtmek için bir tanımlayıcı (RID) kullanır. Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.--self-contained false
Bu anahtar, kendi içinde dağıtım (SCD) oluşturmak için anahtarın varsayılan davranışını-r
devre dışı bırakır. Bu anahtar bir FDE oluşturur.
Yayımlama Modu | SDK Sürümü | Komut |
---|---|---|
Çerçeveye bağımlı yürütülebilir dosya | 3,1 | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
5.0 | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
|
6.0 | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
|
7.0 | dotnet publish -c Release -r <RID> --self-contained false dotnet publish -c Release |
Anahtarı her kullandığınızda -r
çıkış klasörü yolu şu şekilde değişir: ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/
Örnek uygulamayı kullanıyorsanız komutunu çalıştırındotnet publish -f net6.0 -r win10-x64 --self-contained false
. Bu komut aşağıdaki yürütülebilir dosyayı oluşturur: ./bin/Debug/net6.0/win10-x64/publish/apptest1.exe
Not
Sabit modda genelleştirmeyi etkinleştirerek dağıtımınızın toplam boyutunu azaltabilirsiniz. Bu mod, 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ırma ve sıralama düzenini kullanabilen uygulamalar için kullanışlıdır. Genelleştirme sabit modu ve nasıl etkinleştirileceği hakkında daha fazla bilgi için bkz. .NET Genelleştirme Sabit Modu.
Bağımsız dağıtım
Bağımsız bir dağıtım (SCD) yayımladığınızda ,NET SDK platforma özgü bir yürütülebilir dosya oluşturur. SCD yayımlamak, uygulamanızı çalıştırmak için gereken tüm .NET dosyalarını içerir, ancak .NET'in yerel bağımlılıklarını içermez. Uygulama çalışmadan önce bu bağımlılıkların sistemde mevcut olması gerekir.
SCD yayımlamak, kullanılabilir en son .NET güvenlik düzeltme ekine sunulmayan bir uygulama oluşturur. Derleme zamanında sürüm bağlama hakkında daha fazla bilgi için bkz. Kullanılacak .NET sürümünü seçme.
SCD yayımlamak için komutuyla dotnet publish
aşağıdaki anahtarları kullanmanız gerekir:
-r <RID>
Bu anahtar, hedef platformu belirtmek için bir tanımlayıcı (RID) kullanır. Çalışma zamanı tanımlayıcılarının listesi için bkz . Çalışma Zamanı Tanımlayıcısı (RID) kataloğu.--self-contained true
Bu anahtar.NET SDK'sına SCD olarak yürütülebilir dosya oluşturmasını söyler.
Yayımlama Modu | SDK Sürümü | Komut |
---|---|---|
Bağımsız dağıtım | 2.1 | dotnet publish -c Release -r <RID> --self-contained true |
3,1 | dotnet publish -c Release -r <RID> --self-contained true |
|
5.0 | dotnet publish -c Release -r <RID> --self-contained true |
|
6.0 | dotnet publish -c Release -r <RID> --self-contained true |
|
7.0 | dotnet publish -c Release -r <RID> --self-contained true |
İpucu
.NET 6 ve sonraki sürümlerde, kırpılmış olarak yayımlayarak uyumlu kendi içinde bulunan uygulamaların toplam boyutunu azaltabilirsiniz. Bu, düzelticinin herhangi bir kod yolunda olmayan veya çalışma zamanı yansımasında başvurulabilecek çerçevenin ve başvuruda bulunılan derlemelerin parçalarını kaldırmasını sağlar. Kırpmanın uygulamanız için anlamlı olup olmadığını belirlemek için bkz. kırpma uyumsuzlukları .
Not
Sabit modda genelleştirmeyi etkinleştirerek dağıtımınızın toplam boyutunu azaltabilirsiniz. Bu mod, 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ırma ve sıralama düzenini kullanabilen uygulamalar için kullanışlıdır. Genelleştirme sabit modu ve nasıl etkinleştirileceği hakkında daha fazla bilgi için bkz. .NET Core Genelleştirme Sabit Modu.