Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET Core 2.0'dan başlayarak, uygulamaları hedef ortamda bulunan bilinen bir paket kümesine göre paketlemek ve dağıtmak mümkündür. Avantajları daha hızlı dağıtımlar, daha düşük disk alanı kullanımı ve bazı durumlarda geliştirilmiş başlangıç performansıdır.
Bu özellik, diskte paketlerin depolandığı bir dizin olan bir çalışma zamanı paket deposu olarak uygulanır (genellikle macOS/Linux'ta /usr/local/share/dotnet/store ve C:/Program Files/dotnet/store on Windows). Bu dizin altında, mimariler ve hedef çerçeveler için alt dizinler vardır. Dosya düzeni, NuGet varlıklarının diske yerleştirildiğindekine benzer:
\dotnet
\store
\x64
\netcoreapp2.0
\microsoft.applicationinsights
\microsoft.aspnetcore
...
\x86
\netcoreapp2.0
\microsoft.applicationinsights
\microsoft.aspnetcore
...
Hedef bildirim dosyası, çalışma zamanı paket deposundaki paketleri listeler. Geliştiriciler, uygulamalarını yayımlarken bu bildirimi hedefleyebilir. Hedef bildirim genellikle hedeflenen üretim ortamının sahibi tarafından sağlanır.
Çalışma ortamı hazırlama
Çalışma zamanı ortamının yöneticisi, bir çalışma zamanı paket deposu ve ilgili hedef bildirimi oluşturarak uygulamaları daha hızlı dağıtımlar ve daha düşük disk alanı kullanımı için iyileştirebilir.
İlk adım, çalışma zamanı paket depolarını oluşturan paketleri listeleyen bir paket deposu bildirimi oluşturmaktır. Bu dosya biçimi proje dosya biçimi (csproj) ile uyumludur.
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="NUGET_PACKAGE" Version="VERSION" />
<!-- Include additional packages here -->
</ItemGroup>
</Project>
Örnek
Bir çalışma zamanı paket deposuna ve Newtonsoft.Json eklemek için aşağıdaki örnek paket deposu manifestosu (Moq) kullanılır.
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
<PackageReference Include="Moq" Version="4.7.63" />
</ItemGroup>
</Project>
Paket depo manifestini, çalışma zamanı ve çerçeve ile yürüterek dotnet store çalışma zamanı paket deposunu yapılandırın.
dotnet store --manifest <PATH_TO_MANIFEST_FILE> --runtime <RUNTIME_IDENTIFIER> --framework <FRAMEWORK>
Örnek
dotnet store --manifest packages.csproj --runtime win-x64 --framework netcoreapp2.0 --framework-version 2.0.0
Komuttaki seçeneği ve yolu yineleyerek tek dotnet store bir komuta birden çok hedef paket deposu bildirim yolu geçirebilirsiniz.
Varsayılan olarak, komutun çıktısı kullanıcı profilinin .dotnet/store alt dizini altında bir paket deposudur. seçeneğini kullanarak --output <OUTPUT_DIRECTORY> farklı bir konum belirtebilirsiniz. Deponun kök dizini bir hedef bildirim artifact.xml dosyası içerir. Bu dosya indirilebilir ve yayımlama sırasında bu mağazayı hedeflemek isteyen uygulama yazarları tarafından kullanılabilir.
Örnek
Aşağıdaki artifact.xml dosyası, önceki örnek çalıştırıldıktan sonra oluşturulur.
Castle.Core'nın Moq için bir bağımlılık olduğunu ve bu nedenle otomatik olarak eklendiğini, artifacts.xml bildirim dosyasında göründüğünü unutmayın.
<StoreArtifacts>
<Package Id="Newtonsoft.Json" Version="10.0.3" />
<Package Id="Castle.Core" Version="4.1.0" />
<Package Id="Moq" Version="4.7.63" />
</StoreArtifacts>
Hedef manifest dosyasına karşı uygulama yayımlama
Diskte hedef bildirim dosyanız varsa, uygulamanızı şu komutla dotnet publish yayımlarken dosyanın yolunu belirtirsiniz:
dotnet publish --manifest <PATH_TO_MANIFEST_FILE>
Örnek
dotnet publish --manifest manifest.xml
Sonuçta yayımlanan uygulamayı, hedef bildirimde açıklanan paketleri içeren bir ortama dağıtırsınız. Bunun başarısız olması, uygulamanın başlatılaamamasına neden olur.
Bir uygulamayı yayımlarken seçeneği ve yolu yineleyerek birden çok hedef bildirimi belirtin (örneğin, --manifest manifest1.xml --manifest manifest2.xml). Bunu yaptığınızda, uygulama komutuna sağlanan hedef bildirim dosyalarında belirtilen paketlerin birleşimi için kırpılır.
Dağıtımda yer alan bir bildirim bağımlılığına sahip bir uygulama dağıttığınızda (derleme bin klasöründe yer alıyorsa), çalışma zamanı paket deposu konakta bu derleme için kullanılmaz. Bin klasörü derlemesi, konaktaki çalışma zamanı paket deposundaki varlığından bağımsız olarak kullanılır.
Bildirimde belirtilen bağımlılığın sürümü, çalışma zamanı paket deposundaki bağımlılığın sürümüyle eşleşmelidir. Hedef bildirimdeki bağımlılık ile çalışma zamanı paket deposunda bulunan sürüm arasında bir sürüm uyuşmazlığınız varsa ve uygulama paketin gerekli sürümünü dağıtımında içermiyorsa, uygulama başlatılamaz. Özel durum, uyuşmazlığı gidermenize yardımcı olan çalışma zamanı paket deposu derlemesi için çağrılan hedef bildirimin adını içerir.
Dağıtım, yayımlama sırasında kırpıldığında, yalnızca belirttiğiniz manifest paketlerinin belirli sürümleri yayınlanan çıktıda tutulmaz. Uygulamanın başlatılması için belirtilen sürümlerde paketlerin konakta mevcut olması gerekir.
Proje dosyasında hedef bildirimleri belirtme
Komutuyla hedef bildirimleri belirtmenin dotnet publish bir alternatifi, bunları proje dosyasında etiketin altındaki <TargetManifestFiles> yolların noktalı virgülle ayrılmış bir listesi olarak belirtmektir.
<PropertyGroup>
<TargetManifestFiles>manifest1.xml;manifest2.xml</TargetManifestFiles>
</PropertyGroup>
Proje dosyasındaki hedef bildirimleri yalnızca uygulamanın hedef ortamı .NET Core projeleri gibi iyi biliniyorsa belirtin. Açık kaynak projelerde böyle bir durum söz konusu değildir. Açık kaynak projenin kullanıcıları genellikle bunu farklı üretim ortamlarına dağıtır. Bu üretim ortamlarında genellikle önceden yüklenmiş farklı paket kümeleri bulunur. Bu tür ortamlarda hedef bildirim hakkında varsayımlarda bulunamazsınız, bu nedenle --manifest seçeneğini dotnet publish kullanmalısınız.
ASP.NET Core örtük deposu (yalnızca.NET Core 2.0)
ASP.NET Core belirsiz deposu yalnızca ASP.NET Core 2.0 için geçerlidir. Uygulamaların, örtük depoyu kullanmayan ASP.NET Core 2.1 ve sonraki sürümleri kullanmasını kesinlikle öneririz. ASP.NET Core 2.1 ve üzeri paylaşılan çerçeveyi kullanır.
.NET Core 2.0 için çalışma zamanı paket deposu özelliği, uygulama çerçeveye bağımlı bir dağıtım uygulaması olarak dağıtıldığında ASP.NET Core uygulaması tarafından örtük olarak kullanılır. İçinde yer alan Microsoft.NET.Sdk.Web hedefler, hedef sistemdeki gizli paket deposuna referans veren bildirimleri içerir. Çerçeveye bağımlı olup Microsoft.AspNetCore.All paketine bağlı olan tüm uygulamalar, yalnızca uygulamayı ve varlıklarını içeren yayımlanmış bir uygulamayla sonuçlanır ve meta pakette listelenen paketleri içermez. Bu paketlerin hedef sistemde mevcut olduğu varsayılır.
.NET SDK yüklendiğinde ana bilgisayara çalışma zamanı paket deposu kurulur. Diğer yükleyiciler .NET SDK'sının Zip/tarball yüklemeleri, , Red Hat Yum, apt-get.NET Core Windows Server Barındırma paketi ve el ile çalışma zamanı paket deposu yüklemeleri dahil olmak üzere çalışma zamanı paket deposu sağlayabilir.
Çerçeveye bağımlı bir dağıtım uygulaması dağıtırken hedef ortamda .NET SDK'sının yüklü olduğundan emin olun. Uygulama ASP.NET Core içermeyen bir ortama dağıtıldıysa, aşağıdaki örnekte olduğu gibi proje dosyasında <PublishWithAspNetCoreTargetManifest>false olarak belirterek, varsayılan depoyu devre dışı bırakabilirsiniz:
<PropertyGroup>
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
Uyarı
Bağımsız dağıtım uygulamaları için hedef sistemin gerekli bildirim paketlerini içermemesi gerektiği varsayılır. Bu nedenle, bağımsız bir uygulama için <PublishWithAspNetCoreTargetManifest>true olarak ayarlanamaz.