Çalışma zamanı paket deposu
.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 zamanı 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 Moq
eklemek Newtonsoft.Json
için aşağıdaki örnek paket deposu bildirimi (packages.csproj) 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 deposu bildirimi, çalışma zamanı ve çerçeve ile yürüterek dotnet store
çalışma zamanı paket depoyu sağlayı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. bağımlılığı olduğunuMoq
, Castle.Core
bu nedenle otomatik olarak eklendiğini ve 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 bildirimde 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 bulunan bir bildirim bağımlılığına sahip bir uygulama dağıtırsanız (derleme bin klasöründe bulunur), çalışma zamanı paket deposu söz konusu derleme için konakta 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 bildirim paketlerinin belirli sürümleri yayımlanan çıktıdan engellenir. 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 TargetManifestFiles etiketi altındaki <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 seçeneğini dotnet publish
kullanmalısınız--manifest
.
ASP.NET Core örtük deposu (yalnızca.NET Core 2.0)
ASP.NET Core örtük 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. içindeki Microsoft.NET.Sdk.Web
hedefler, hedef sistemdeki örtük paket deposuna başvuran bildirimleri içerir. Ayrıca, pakete bağlı Microsoft.AspNetCore.All
olan çerçeveye bağımlı tüm uygulamalar, meta pakette listelenen paketleri değil, yalnızca uygulamayı ve varlıklarını içeren yayımlanmış bir uygulamayla Microsoft.AspNetCore.All
sonuçlanır. Bu paketlerin hedef sistemde mevcut olduğu varsayılır.
.NET SDK'sı yüklendiğinde konakta çalışma zamanı paket deposu yüklenir. 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ılırsa, aşağıdaki örnekte olduğu gibi proje dosyasında PublishWithAspNetCoreTargetManifest> olarak ayarlanmış olarak belirterek <false
örtük depoyu devre dışı bırakabilirsiniz:
<PropertyGroup>
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
Not
Bağımsız dağıtım uygulamaları için hedef sistemin gerekli bildirim paketlerini içermemesi gerektiği varsayılır. Bu nedenle, <PublishWithAspNetCoreTargetManifest> , bağımsız bir uygulama için olarak ayarlanamaz true
.