dotnet publish
Bu makale şunlar için geçerlidir: ✔️ .NET Core 3.1 SDK ve sonraki sürümler
Veri Akışı Adı
dotnet publish
- Uygulamayı ve bağımlılıklarını bir barındırma sistemine dağıtım için bir klasöre yayımlar.
Özet
dotnet publish [<PROJECT>|<SOLUTION>] [-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>] [-r|--runtime <RUNTIME_IDENTIFIER>]
[--sc|--self-contained [true|false]] [--no-self-contained]
[-s|--source <SOURCE>] [--tl:[auto|on|off]]
[--use-current-runtime, --ucr [true|false]]
[-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ı.
Komutun dotnet publish
çı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 CLI ile .NET uygulamalarını yayımlama.
Örtük geri yükleme
, , dotnet publish
ve dotnet pack
gibi dotnet test
dotnet run
dotnet build
dotnet new
geri yükleme gerektiren tüm komutlar tarafından örtük olarak çalıştırıldığından, komutunu çalıştırmanız dotnet restore
gerekmez. Örtük geri yüklemeyi devre dışı bırakmak için seçeneğini kullanın --no-restore
.
Komutudotnet restore
, Azure DevOps Services'teki sürekli tümleştirme derlemeleri veya geri yüklemenin ne zaman gerçekleştiğini açıkça denetlemesi gereken derleme sistemleri 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 belgelere dotnet restore
bakın.
MSBuild
dotnet publish
komutu, hedefi çağıran MSBuild'i Publish
çağırır. Özelliği belirli bir proje için olarak ayarlandıysafalse
, Publish
hedef çağrılamıyor ve dotnet publish
komut yalnızca projede örtük dotnet geri yüklemesini çalıştırır.IsPublishable
geçirilen dotnet publish
tüm parametreler MSBuild'e geçirilir. -c
ve -o
parametreleri sırasıyla MSBuild'in Configuration
ve PublishDir
özellikleriyle eşler.
komutudotnet publish
, özellikleri ayarlama ve -l
günlükçü tanımlama gibi -p
MSBuild seçeneklerini kabul eder. Örneğin, şu biçimi kullanarak bir MSBuild özelliği ayarlayabilirsiniz: -p:<NAME>=<VALUE>
.
.pubxml dosyaları
Ayrıca bir .pubxml dosyasına başvurarak yayımlamayla ilgili özellikleri de ayarlayabilirsiniz. Örneğin:
dotnet publish -p:PublishProfile=FolderProfile
Yukarıdaki örnek, project_folder>/Properties/PublishProfiles klasöründe bulunan <FolderProfile.pubxml dosyasını kullanır. Özelliği ayarlarken PublishProfile
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 özelliği yerine PublishProfile
özelliğini ayarlayınPublishProfileFullPath
.
.pubxml dosyasında:
PublishUrl
, Visual Studio tarafından Yayımlama hedefini belirtmek için kullanılır.PublishDir
, CLI tarafından Yayımlama hedefini belirtmek için kullanılır.
Senaryonun her yerde ç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 üzerinde dotnet publish
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. HEM CLI hem de Visual Studio yayımlamanın paketleme yönünü yapar ve dotnet/sdk#29817 bu konuda daha fazla özellik için destek eklemeyi planlıyor. Ancak CLI yayımlamanın dağıtım otomasyonu yönünü gerçekleştirmez ve bununla ilgili özellikler desteklenmez. Tarafından dotnet publish
desteklenmeyen en önemli .pubxml özellikleri, derlemeyi etkileyen aşağıdakilerdir:
LastUsedBuildConfiguration
Configuration
Platform
LastUsedPlatform
TargetFramework
TargetFrameworks
RuntimeIdentifier
RuntimeIdentifiers
MSBuild özellikleri
Aşağıdaki MSBuild özellikleri çıktısını dotnet publish
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 kullanın
PublishReadyToRunShowWarnings=true
.Komut satırı yerine yayımlama profilinde belirtmeniz
PublishReadyToRun
önerilir.PublishSingleFile
Uygulamayı platforma özgü tek dosyalı yürütülebilir dosyaya paketler. Tek dosyalı yayımlama hakkında daha fazla bilgi için tek dosyalı paketleyici tasarım belgesine bakın.
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 edinmek 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 profilleri (.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şkenler
PROJECT|SOLUTION
Yayımlayacak proje veya çözüm.
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. Dizin belirtilmezse, varsayılan olarak geçerli dizin olur.SOLUTION
, çözüm dosyasının yolu ve dosya adıdır (.sln uzantısı) veya çözüm dosyası içeren bir dizinin yoludur. Dizin belirtilmezse, varsayılan olarak geçerli dizin olur.
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ı'nı (RID) ayarlamak için bir kısaltma söz dizimidir. Örneğin, bir
win-x64
makinede, belirterek--arch x86
RID değerini olarakwin-x86
ayarlar. Bu seçeneği kullanırsanız, seçeneğini kullanmayın-r|--runtime
. .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 . Yapıt Çıktı Düzeni. .NET 8 SDK'sı ile kullanılabilir.
-c|--configuration <CONFIGURATION>
Derleme yapılandırmasını tanımlar. .NET 8 SDK'sı veya daha sonraki bir sürümle geliştiriyorsanız, bu komut TargetFramework veya sonraki bir sürüme
net8.0
ayarlanmış projeler için varsayılan olarak yapılandırmayı kullanırRelease
. Varsayılan derleme yapılandırması,Debug
SDK'nın önceki sürümleri ve önceki hedef çerçeveler içindir. 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 configuration.
--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çeve 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.
-?|-h|--help
komutunun nasıl kullanılacağına ilişkin bir açıklama yazdırır.
--interactive
Komutun durmasına ve kullanıcı girişini veya eylemini beklemesine izin verir. Örneğin, kimlik doğrulamasını tamamlamak için. .NET Core 3.0 SDK'sı ile kullanılabilir.
--manifest <PATH_TO_MANIFEST_FILE>
Uygulamayla yayımlanan paket kümesini kırpmak için kullanılacak bir veya birden çok hedef bildirimi belirtir. Bildirim dosyası, komutun çıkışının
dotnet store
bir parçasıdır. Birden çok bildirim belirtmek için her bildirim için bir--manifest
seçenek ekleyin.--no-build
Yayımlamadan önce projeyi oluşturmaz. Ayrıca bayrağı örtük olarak ayarlar
--no-restore
.--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/ olarak ayarlanır.
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ü myproject ve yayımlama çıkış klasörü myproject/publish ise ve iki kez çalıştırırsanızdotnet publish
, ikinci çalıştırma .config ve .json dosyaları myproject/publish/publish gibi içerik dosyalarını yerleştirir. Yayımlama klasörlerinin iç içe geçmemesi için, doğrudan proje klasörünün altında olmayan bir yayımlama klasörü belirtin veya yayımlama klasörünü projeden hariç tutun. publishoutput adlı bir yayımlama klasörünü dışlamak için,.csproj dosyasındaki birPropertyGroup
öğeye aşağıdaki öğeyi ekleyin:<DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
.NET 7.0.200 SDK ve üzeri
Bu komutu bir çözümde çalıştırırken seçeneğini belirtirseniz
--output
, CLI çıkış yolunun belirsiz semantiği nedeniyle bir uyarı (7.0.200'de bir hata) yayar.--output
Tüm yerleşik projelerin tüm çıkışları, hem çok hedefli projelerle hem de doğrudan ve geçişli bağımlılıkların farklı sürümlerine sahip projelerle uyumlu olmayan belirtilen dizine kopyalandığından bu seçeneğe izin verilmez. Daha fazla bilgi için bkz. Derlemeyle ilgili komutlar için çözüm düzeyi--output
seçeneği 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, seçeneği yerine
--output
msbuildPublishDir
ö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 birpublish
klasöre gönderir..NET Core 2.x SDK
Projeyi yayımlarken göreli bir yol belirtirseniz, oluşturulan çıkış dizini geçerli çalışma dizinine değil proje dosyası konumuna göredir.
Çözüm yayımlarken göreli bir yol belirtirseniz, her projenin çıkışı proje dosyası konumuna göre ayrı bir klasöre gider. Çözüm yayımlarken mutlak bir yol belirtirseniz, tüm projeler için tüm yayımlama çıktısı belirtilen klasöre gider.
--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ı'nı (RID) ayarlamak için bir kısaltma söz dizimidir. Örneğin, bir
win-x64
makinede, belirterek--os linux
RID değerini olaraklinux-x64
ayarlar. Bu seçeneği kullanırsanız, seçeneğini kullanmayın-r|--runtime
. .NET 6'dan itibaren kullanılabilir.
--sc|--self-contained [true|false]
Çalışma zamanının hedef makineye yüklenmesi gerekmemesi için .NET çalışma zamanını uygulamanızla yayımlar. Varsayılan değer,
true
çalışma zamanı tanımlayıcısının belirtilip projenin yürütülebilir bir proje (kitaplık projesi değil) olmasıdır. Daha fazla bilgi için bkz . .NET uygulama yayımlama ve .NET CLI ile .NET uygulamaları yayımlama.Bu seçenek veya
false
belirtilmedentrue
kullanılıyorsa, varsayılan değer olurtrue
. Bu durumda, çözüm veya proje bağımsız değişkenini hemen arkasına--self-contained
koymayın çünkütrue
veyafalse
bu konumda olması beklenir.--no-self-contained
ile eşdeğerdir
--self-contained false
.--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 RID kataloğuna bakın. Daha fazla bilgi için bkz . .NET uygulama yayımlama ve .NET CLI ile .NET uygulamaları yayımlama. Bu seçeneği kullanıyorsanız veya
--no-self-contained
seçeneğini de kullanın--self-contained
.
--tl:[auto|on|off]
Derleme çıkışı için terminal günlükçüsunun kullanılıp kullanılmayacağını belirtir. Varsayılan değer, terminal günlüğünü etkinleştirmeden önce ortamı doğrulayan değeridir
auto
. 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çüsüsü 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.
--use-current-runtime, --ucr [true|false]
öğesini
RuntimeIdentifier
makinenizden birine göre taşınabilirRuntimeIdentifier
bir platforma ayarlar. Bu, vePublishReadyToRun
gibiPublishSingleFile
PublishSelfContained
PublishAot
SelfContained
birRuntimeIdentifier
gerektiren özelliklerde örtük olarak gerçekleşir. Özelliği false olarak ayarlanırsa, bu örtük çözüm artık gerçekleşmez.
-v|--verbosity <LEVEL>
Komutun ayrıntı düzeyini ayarlar. İzin verilen değerler ,
m[inimal]
,n[ormal]
,d[etailed]
vediag[nostic]
değerleridirq[uiet]
. 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.
Örnekler
Geçerli dizindeki proje için çerçeveye bağımlı bir platformlar arası ikili dosya oluşturun:
dotnet publish
.NET Core 3.0 SDK'sı ile başlayarak, bu örnek geçerli platform için çerçeveye bağımlı bir yürütülebilir dosya da oluşturur.
Belirli bir çalışma zamanı için geçerli dizindeki proje için bağımsız bir yürütülebilir dosya 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çeveye bağımlı bir yürütülebilir dosya 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
Ayrıca bkz.
- .NET uygulaması yayımlamaya genel bakış
- .NET CLI ile .NET uygulamaları yayımlama
- Hedef çerçeveler
- Çalışma Zamanı Tanımlayıcısı (RID) kataloğu
- dotnet publish ile bir .NET uygulamasını kapsayıcıya alma
- macOS Catalina Notarization ile çalışma
- Yayımlanan bir uygulamanın dizin yapısı
- MSBuild komut satırı başvurusu
- ASP.NET Core uygulama dağıtımı için Visual Studio yayımlama profilleri (.pubxml)
- dotnet msbuild
- Bağımsız dağıtımları kırpma