Aracılığıyla paylaş


dotnet publish

Bu makale şunlar için geçerlidir: ✔️ .NET 6 SDK ve sonraki sürümler

Ad

dotnet publish - Uygulamayı ve bağımlılıklarını barındırma sistemine dağıtım için bir klasörde yayımlar.

Özet

dotnet publish [<PROJECT>|<SOLUTION>|<FILE>] [-a|--arch <ARCHITECTURE>]
    [--artifacts-path <ARTIFACTS_DIR>]
    [-c|--configuration <CONFIGURATION>] [--disable-build-servers]
    [-f|--framework <FRAMEWORK>] [--force] [--interactive]
    [--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
    [--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
    [--os <OS>] [-p|--property:<PROPERTYNAME>=<VALUE>]
    [-r|--runtime <RUNTIME_IDENTIFIER>]
    [--sc|--self-contained] [--no-self-contained]
    [-s|--source <SOURCE>] [--tl:[auto|on|off]]
    [--ucr|--use-current-runtime]
    [-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]

dotnet publish -h|--help

Açıklama

dotnet publish uygulamayı derler, proje dosyasında belirtilen bağımlılıklarını okur ve sonuçta elde edilen dosya kümesini bir dizinde yayımlar. Çıktı aşağıdaki varlıkları içerir:

  • dll uzantısına sahip bir derlemede Ara Dil (IL) kodu.
  • Projenin tüm bağımlılıklarını içeren bir .deps.json dosyası.
  • Uygulamanın beklediği paylaşılan çalışma zamanını ve çalışma zamanı için diğer yapılandırma seçeneklerini (örneğin, çöp toplama türü) belirten bir .runtimeconfig.json dosyası.
  • NuGet önbelleğinden çıkış klasörüne kopyalanan uygulamanın bağımlılıkları.

dotnet publish komutunun çıkışı yürütme için bir barındırma sistemine (örneğin, sunucu, PC, Mac, dizüstü bilgisayar) dağıtıma hazırdır. Uygulamayı dağıtıma hazırlamanın resmi olarak desteklenen tek yoludur. Projenin belirttiği dağıtım türüne bağlı olarak, barındırma sisteminde .NET paylaşılan çalışma zamanı yüklü olabilir veya olmayabilir. Daha fazla bilgi için bkz. .NET uygulama yayımlamaya genel bakış.

Örtük geri yükleme

dotnet restore, dotnet new, dotnet build, dotnet run, dotnet testve dotnet publishgibi geri yükleme gerektiren tüm komutlar tarafından örtük olarak çalıştırıldığından dotnet pack çalıştırmanız gerekmez. Örtük geri yüklemeyi devre dışı bırakmak için --no-restore seçeneğini kullanın.

komutu, Azure DevOps Services veya geri yüklemenin ne zaman gerçekleştiğini açıkça denetlemesi gereken derleme sistemlerinde sürekli tümleştirme derlemeleri gibi açıkça geri yüklemenin anlamlı olduğu bazı senaryolarda hala yararlıdır.

NuGet akışlarını yönetme hakkında bilgi için belgelerine bakın.

MSBuild

dotnet publish komutu, Publish hedefini çağıran MSBuild'i çağırır. IsPublishable özelliği belirli bir proje için false olarak ayarlanırsa, Publish hedefi çağrılamazsınız ve dotnet publish komutu projede yalnızca örtük dotnet geri yükleme çalıştırır.

dotnet publish geçirilen tüm parametreler MSBuild'e geçirilir. -c ve -o parametreleri sırasıyla MSBuild'in Configuration ve PublishDir özellikleriyle eşler.

dotnet publish komutu, özellikleri ayarlamak için -p ve günlükçü tanımlamak için -l gibi MSBuild seçeneklerini kabul eder. Örneğin, şu biçimi kullanarak bir MSBuild özelliği ayarlayabilirsiniz: -p:<NAME>=<VALUE>.

.pubxml dosyaları

.pubxml dosyasına başvurarak yayımlamayla ilgili özellikleri de ayarlayabilirsiniz. Mesela:

dotnet publish -p:PublishProfile=FolderProfile

Yukarıdaki örnek, klasöründe bulunan < dosyasını kullanır. PublishProfile özelliğini ayarlarken bir yol ve dosya uzantısı belirtirseniz, bunlar yoksayılır. MSBuild varsayılan olarak Properties/PublishProfiles klasörüne bakar ve pubxml dosya uzantısını varsayar. Uzantı da dahil olmak üzere yolu ve dosya adını belirtmek için PublishProfileFullPath özelliği yerine PublishProfile özelliğini ayarlayın.

.pubxml dosyasında:

  • PublishUrl, Visual Studio tarafından Yayımla hedefini belirtmek için kullanılır.
  • PublishDir, CLI tarafından Yayımlama hedefini belirtmek için kullanılır.

Senaryonun tüm yerlerde çalışmasını istiyorsanız, bu özelliklerin ikisini de .pubxml dosyasında aynı değere başlatabilirsiniz. GitHub sorunu dotnet/sdk#20931 çözüldüğünde, bu özelliklerden yalnızca birinin ayarlanması gerekir.

.pubxml dosyasındaki bazı özellikler yalnızca Visual Studio tarafından kabul edilir ve dotnet publishüzerinde hiçbir etkisi yoktur. CLI'yı Visual Studio'nun davranışıyla daha uyumlu hale getirmek için çalışıyoruz. Ancak bazı özellikler CLI tarafından hiçbir zaman kullanılmaz. CLI ve Visual Studio hem yayımlamanın paketleme yönünü yapar hem de dotnet/sdk#29817 bu konuda daha fazla özellik için destek eklemeyi planlayan . Ancak CLI yayımlamanın dağıtım otomasyonu yönünü gerçekleştirmez ve bununla ilgili özellikler desteklenmez. tarafından desteklenmeyen en önemli dotnet publish özellikleri, derlemeyi etkileyen aşağıdakilerdir:

  • LastUsedBuildConfiguration
  • Configuration
  • Platform
  • LastUsedPlatform
  • TargetFramework
  • TargetFrameworks
  • RuntimeIdentifier
  • RuntimeIdentifiers

MSBuild özellikleri

Aşağıdaki MSBuild özellikleri dotnet publishçıktısını değiştirir.

  • PublishReadyToRun

    Uygulama derlemelerini ReadyToRun (R2R) biçiminde derler. R2R, önceden (AOT) derlemenin bir biçimidir. Daha fazla bilgi için bkz. ReadyToRun görüntüleri.

    Çalışma zamanı hatalarına neden olabilecek eksik bağımlılıklarla ilgili uyarıları görmek için PublishReadyToRunShowWarnings=truekullanın.

    PublishReadyToRun komut satırı yerine yayımlama profilinde belirtmenizi öneririz.

  • PublishSingleFile

    Uygulamayı platforma özgü tek dosyalı yürütülebilir dosyaya paketler. Tek dosyalı yayımlama hakkında daha fazla bilgi içintek dosyalı paketleyici tasarım belgesine bakın. Bu özellik olarak truePublishSelfContained ayarlandığında, özelliği örtük olarak olarak trueayarlanır.

    Bu seçeneği komut satırı yerine proje dosyasında belirtmenizi öneririz.

  • PublishTrimmed

    Bağımsız bir yürütülebilir dosya yayımlarken uygulamanın dağıtım boyutunu azaltmak için kullanılmayan kitaplıkları kırpar. Daha fazla bilgi için bkz. bağımsız dağıtımları ve yürütülebilir dosyaları kırpma. .NET 6 SDK'sı ile kullanılabilir.

    Bu seçeneği komut satırı yerine proje dosyasında belirtmenizi öneririz.

Daha fazla bilgi için aşağıdaki kaynaklara bakın:

  • MSBuild komut satırı başvurusu
  • ASP.NET Core uygulama dağıtımı için Visual Studio yayımlama profillerini (.pubxml)
  • dotnet msbuild

İş yükü bildirimi indirmeleri

Bu komutu çalıştırdığınızda, iş yükleri için reklam bildirimlerini zaman uyumsuz bir arka plan indirme işlemi başlatır. Bu komut tamamlandığında indirme işlemi hala çalışıyorsa indirme durdurulur. Daha fazla bilgi için bkz.Reklam bildirimleri.

Bağımsız değişken

PROJECT | SOLUTION | FILE

Üzerinde çalışacak proje veya çözüm ya da C# (dosya tabanlı uygulama) dosyası. Bir dosya belirtilmezse, MSBuild geçerli dizinde bir proje veya çözüm arar.

  • PROJECT, C#, F# veya Visual Basic proje dosyasının yolu ve dosya adı ya da C#, F# veya Visual Basic proje dosyası içeren bir dizinin yoludur.

  • SOLUTION, çözüm dosyasının yolu ve dosya adıdır (.sln veya .slnx uzantısı) ya da çözüm dosyası içeren bir dizinin yoludur.

  • FILE , .NET 10'a eklenen bir bağımsız değişkendir. Dosya tabanlı bir uygulamanın yolu ve dosya adı. Dosya tabanlı uygulamalar, ilgili proje (.csproj) dosyası olmadan oluşturulan ve çalıştırılan tek bir dosyanın içinde yer alır. Daha fazla bilgi için bkz. Dosya tabanlı C# uygulamaları oluşturma.

Seçenekler

  • -a|--arch <ARCHITECTURE>

    Hedef mimariyi belirtir. Bu, sağlanan değerin varsayılan RID ile birleştirildiği Çalışma Zamanı Tanımlayıcısı (RID)ayarlamak için bir kısaltma söz dizimidir. Örneğin, win-x64 makinesinde --arch x86 belirterek RID değerini win-x86olarak ayarlar. Bu seçeneği kullanırsanız -r|--runtime seçeneğini kullanmayın. .NET 6 Preview 7 sürümünden itibaren kullanılabilir.

  • --artifacts-path <ARTIFACTS_DIR>

    Yürütülen komuttaki tüm derleme çıktı dosyaları, projeyle ayrılmış olarak belirtilen yolun altındaki alt klasörlere gider. Daha fazla bilgi için bkz. Artifacts Output Layout. .NET 8 SDK'sı ile kullanılabilir.

  • -c|--configuration <CONFIGURATION>

    Derleme yapılandırmasını tanımlar. .NET 8 SDK'sı veya sonraki bir sürümle geliştiriyorsanız, komut TargetFramework Release veya sonraki bir sürüme ayarlanmış projeler için varsayılan olarak net8.0 yapılandırmasını kullanır. Varsayılan derleme yapılandırması, SDK'nın önceki sürümleri ve önceki hedef çerçeveler için Debug. Proje ayarlarında veya bu seçeneği kullanarak varsayılanı geçersiz kılabilirsiniz. Daha fazla bilgi için bkz. 'dotnet publish' Release configuration ve 'dotnet pack' uses Release configurationkullanır.

  • --disable-build-servers

    Komutu kalıcı derleme sunucularını yoksaymaya zorlar. Bu seçenek, derleme önbelleğinin tüm kullanımını devre dışı bırakmak için tutarlı bir yol sağlar ve bu da bir derlemeyi sıfırdan zorlar. Önbelleklere güvenmeyen bir derleme, önbellekler herhangi bir nedenle bozulduğunda veya yanlış olduğunda kullanışlıdır. .NET 7 SDK'sı ile kullanılabilir.

  • -f|--framework <FRAMEWORK>

    Belirtilen hedef çerçevesi için uygulamayıyayımlar. Proje dosyasında hedef çerçeveyi belirtmeniz gerekir.

  • --force

    Son geri yükleme başarılı olsa bile tüm bağımlılıkların çözümlenmesine zorlar. Bu bayrağın belirtilmesi, project.assets.json dosyasını silmekle aynıdır.

  • --interactive

    Komutun durmasına ve kullanıcı girişini veya eylemini beklemesine izin verir. Örneğin, kimlik doğrulamasını tamamlamak için.

  • --manifest <PATH_TO_MANIFEST_FILE>

    Uygulamayla yayımlanan paket kümesini kırpmak için kullanılacak bir veya birkaç hedef bildirimini belirtir. Bildirim dosyası, komutunun çıkışının bir parçasıdır. Birden çok bildirim belirtmek için her bildirim için bir --manifest seçeneği ekleyin.

  • --no-build

    Yayımlamadan önce projeyi oluşturmaz. Ayrıca --no-restore bayrağını örtük olarak ayarlar.

  • --no-dependencies

    Projeden projeye başvuruları yoksayar ve yalnızca kök projeyi geri yükler.

  • --nologo

    Başlangıç başlığını veya telif hakkı iletisini görüntülemez.

  • --no-restore

    Komutu çalıştırırken örtük geri yükleme yürütmez.

  • -o|--output <OUTPUT_DIRECTORY>

    Çıkış dizininin yolunu belirtir.

    Belirtilmezse, çerçeveye bağımlı yürütülebilir dosya ve platformlar arası ikili dosyalar için varsayılan olarak [project_file_folder]/bin/[configuration]/[framework]/publish/ olur. Bağımsız yürütülebilir dosya için varsayılan olarak [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ .

    Web projesinde, çıkış klasörü proje klasöründeyse, ardışık dotnet publish komutları iç içe çıktı klasörleriyle sonuçlanır. Örneğin, proje klasörü myprojectve yayımlama çıktı klasörü myproject/publishise ve iki kez çalıştırırsanız, ikinci çalıştırma myproject/publish/publish.config ve .json dosyaları gibi içerik dosyalarını yerleştirir. Yayımlama klasörlerinin iç içe olmasını önlemek için, doğrudan proje klasörünün altında bir yayımlama klasörü belirtin veya yayımlama klasörünü projeden dışlayın. publishoutputadlı bir yayımlama klasörünü dışlamak için, PropertyGroup dosyasındaki öğesine aşağıdaki öğeyi ekleyin:

    <DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
    
    • .NET 7.0.200 SDK ve üzeri

      Bir çözümde bu komutu çalıştırırken --output seçeneğini belirtirseniz, CLI çıkış yolunun belirsiz semantiği nedeniyle bir uyarı (7.0.200'de bir hata) yayar. --output seçeneğine izin verilmiyor çünkü tüm oluşturulan projelerin tüm çıkışları, çok hedefli projelerin yanı sıra doğrudan ve geçişli bağımlılıkların farklı sürümlerine sahip projelerle uyumlu olmayan belirtilen dizine kopyalanacak. Daha fazla bilgi için bkz. Çözüm düzeyi --output seçeneğiderlemeyle ilgili komutlar için artık geçerli değil.

    • .NET Core 3.x SDK ve üzeri

      Projeyi yayımlarken göreli bir yol belirtirseniz, oluşturulan çıkış dizini proje dosyası konumuna değil geçerli çalışma dizinine göredir.

      Çözüm yayımlarken göreli bir yol belirtirseniz, tüm projeler için tüm çıkış geçerli çalışma dizinine göre belirtilen klasöre gider. Yayımlama çıktısının her proje için ayrı klasörlere gitmesini sağlamak için, PublishDir seçeneği yerine msbuild --output özelliğini kullanarak göreli bir yol belirtin. Örneğin, dotnet publish -p:PublishDir=.\publish her proje için yayımlama çıktısını proje dosyasını içeren klasörün altındaki bir publish klasörüne gönderir.

  • --os <OS>

    Hedef işletim sistemini (OS) belirtir. Bu, sağlanan değerin varsayılan RID ile birleştirildiği Çalışma Zamanı Tanımlayıcısı (RID)ayarlamak için bir kısaltma söz dizimidir. Örneğin, win-x64 makinesinde --os linux belirterek RID değerini linux-x64olarak ayarlar. Bu seçeneği kullanırsanız -r|--runtime seçeneğini kullanmayın. .NET 6'dan itibaren kullanılabilir.

  • --sc|--self-contained

    Çalışma zamanının hedef makineye yüklenmesi gerekmemesi için .NET çalışma zamanını uygulamanızla yayımlayın.

  • -p|--property:<PROPERTYNAME>=<VALUE>

    Bir veya daha fazla MSBuild özelliği ayarlar. Noktalı virgülle sınırlandırılmış birden çok özellik belirtin veya şu seçeneği yineleyerek:

    --property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2>
    --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
    
  • --no-self-contained

    Uygulamanızı çerçeveye bağımlı bir uygulama olarak yayımlayın. Uygulamanızı çalıştırmak için hedef makineye uyumlu bir .NET çalışma zamanı yüklenmelidir.

  • --source <SOURCE>

    Geri yükleme işlemi sırasında kullanılacak NuGet paket kaynağının URI'sini.

  • -r|--runtime <RUNTIME_IDENTIFIER>

    Belirli bir çalışma zamanı için uygulamayı yayımlar. Çalışma Zamanı Tanımlayıcılarının (RID) listesi için bkz. RID kataloğu. Daha fazla bilgi için bkz. .NET uygulama yayımlamaya genel bakış. Bu seçeneği kullanıyorsanız --self-contained veya --no-self-contained de kullanın.

  • --tl:[auto|on|off]

    Derleme çıkışı için Terminal Günlükçü'lerinin kullanılıp kullanılmayacağını belirtir. Varsayılan değer, terminal günlüğünü etkinleştirmeden önce ortamı doğrulayan autodeğeridir. Ortam denetimi, terminalin modern çıkış özelliklerini kullanabileceğini ve yeni günlükçü'leri etkinleştirmeden önce yeniden yönlendirilmiş standart çıkış kullanmadığını doğrular. on ortam denetimini atlar ve terminal günlüğünü etkinleştirir. off ortam denetimini atlar ve varsayılan konsol günlükçüsunu kullanır.

    Terminal Günlükçü, geri yükleme aşamasını ve ardından derleme aşamasını gösterir. Her aşamada, şu anda oluşturulan projeler terminalin en altında görünür. Derlemeye alınan her proje, hem şu anda derlenen MSBuild hedefini hem de bu hedefe harcanan süreyi oluşturur. Derleme hakkında daha fazla bilgi edinmek için bu bilgileri arayabilirsiniz. Bir projenin oluşturulması tamamlandığında, şunları yakalayan tek bir "derleme tamamlandı" bölümü yazılır:

    • Oluşturulan projenin adı.
    • Hedef çerçeve (çok hedefliyse).
    • Bu derlemenin durumu.
    • Bu derlemenin birincil çıkışı (köprüdür).
    • Bu proje için oluşturulan tüm tanılamalar.

    Bu seçenek .NET 8'den itibaren kullanılabilir.

  • --ucr|--use-current-runtime

    Geçerli çalışma zamanını hedef çalışma zamanı olarak kullanın.

  • -v|--verbosity <LEVEL>

    Komutun ayrıntı düzeyini ayarlar. İzin verilen değerler , q[uiet], m[inimal], n[ormal]ve d[etailed]diag[nostic]. Varsayılan değer minimal. Daha fazla bilgi için bkz. LoggerVerbosity.

  • --version-suffix <VERSION_SUFFIX>

    Proje dosyasının sürüm alanındaki yıldız işareti (*) yerine geçecek sürüm sonekini tanımlar.

  • -?|-h|--help

    komutunun nasıl kullanılacağına ilişkin bir açıklama yazdırır.

Örnekler

  • Geçerli dizindeki proje için çerçevesine bağımlı platformlar arası ikili oluşturun:

    dotnet publish
    

    .NET Core 3.0 SDK'sı ile başlayarak, bu örnek geçerli platform için çerçeveye bağımlı yürütülebilir de oluşturur.

  • Belirli bir çalışma zamanı için geçerli dizindeki proje için bağımsız yürütülebilir oluşturun:

    dotnet publish --runtime osx-x64
    

    RID proje dosyasında olmalıdır.

  • Belirli bir platform için geçerli dizindeki proje için çerçevesine bağımlı yürütülebilir oluşturun:

    dotnet publish --runtime osx-x64 --self-contained false
    

    RID proje dosyasında olmalıdır. Bu örnek .NET Core 3.0 SDK ve sonraki sürümler için geçerlidir.

  • Projeyi belirli bir çalışma zamanı ve hedef çerçeve için geçerli dizinde yayımlayın:

    dotnet publish --framework net8.0 --runtime osx-x64
    
  • Belirtilen proje dosyasını yayımlayın:

    dotnet publish ~/projects/app1/app1.csproj
    
  • Geçerli uygulamayı yayımlayın ancak projeden projeye (P2P) başvuruları geri yüklemeyin; geri yükleme işlemi sırasında yalnızca kök proje:

    dotnet publish --no-dependencies
    
  • Dosya tabanlı C# programı app.cs geçerli dizinde yayımlayın:

    dotnet publish app.cs
    

    .NET SDK 10.0.100'e dosya tabanlı program desteği eklendi.

Ayrıca bkz.