Çalışma zamanına özgü uygulamalar artık kendi içinde değil
Çalışma zamanına özgü uygulamalar veya bir RuntimeIdentifier
içeren .NET uygulamaları artık varsayılan olarak kendi içinde değildir . Bunun yerine, bunlar varsayılan olarak çerçeveye bağımlıdır.
Bu, aşağıdaki durumlarda hataya neden olan bir değişikliktir:
- Uygulamanızı dağıttıysanız, dağıttıysanız veya yayımladıysanız ve özelliği açıkça eklemediyseniz
SelfContained
, ancak çalışması için makineye .NET çalışma zamanının yüklenmesini gerektirmediyseniz. Bu durumda, varsayılan olarak bağımsız bir uygulama oluşturmak için önceki davranışa güvenmiş olabilirsiniz. - IL Link aracına güveniyorsanız. Bu durumda IL Bağlantısını yeniden kullanmak için Önerilen eylem altında açıklanan adımları uygulayın.
Önceki davranış
Daha önce bir çalışma zamanı tanımlayıcısı (RID) belirtildiyse (RuntimeIdentifier aracılığıyla), uygulama açıkça belirtilmemiş olsa SelfContained
bile bağımsız olarak yayımlanmıştı.
Ek olarak:
- açıkça olarak olarak ayarlanmadıysa
PublishSelfContained
, , ve gibidotnet build
dotnet restore
işlemler sırasında yayımlama özellikleriPublishSingleFile
vedotnet publish
PublishAot
bir ve (belirtilmemişse) ima ederRuntimeIdentifier
SelfContained
.false
PublishTrimmed
özelliği olarak imaSelfContained
etmedi.PublishReadyToRun
BelirtilmemişseSelfContained
özelliği örtülürSelfContained
.
Yeni davranış
.NET 8'den başlayarak, .NET 8 veya sonraki bir sürümü RuntimeIdentifier
hedefleyen uygulamalar için artık varsayılan olarak ima değildir SelfContained
. Bunun yerine, çalışma zamanı tanımlayıcısı belirten uygulamalar varsayılan olarak .NET çalışma zamanına bağımlıdır (çerçeveye bağımlıdır). .NET 7 veya önceki sürümleri hedefleyen uygulamalar etkilenmez.
Ek olarak:
- açıkça olarak olarak ayarlanmadıysa
PublishSelfContained
yayımlama özellikleriPublishSingleFile
vePublishAot
şimdi yalnızca (veyadotnet restore
içindotnet build
değil) sırasındadotnet publish
(belirtilmezse) anlamına geliyorSelfContained
.false
PublishTrimmed
Özelliği artık sırasındadotnet publish
da ima ederSelfContained
.PublishReadyToRun
özelliği artık projenin .NET 8 veya üzerini hedeflediğini ifade etmemektedirSelfContained
.
Not
kullanarak msbuild /t:Publish
yayımlıyorsanız ve uygulamanızın kendi içinde olmasını istiyorsanız, projeniz listelenen yayımlama özelliklerinden birine sahip olsa bile açıkça belirtmelisiniz SelfContained
.
Sürüm kullanıma sunulmuştur
.NET 8 Önizleme 5
Hataya neden olan değişikliğin türü
Bu değişiklik kaynak uyumluluğunu ve ikili uyumluluğu etkileyebilir.
Değişiklik nedeni
- Yeni .NET SDK davranışı Visual Studio davranışıyla hizalanır.
- Her uygulamada depolanan .NET kopyaları olmadığından, çerçeveye bağımlı uygulamalar varsayılan olarak daha küçüktür.
- .NET uygulamanın dışında yönetildiğinde (çerçeveye bağımlı dağıtımlar için), .NET daha güvenli ve güncel kalır. Çalışma zamanının kendi kopyasına sahip uygulamalar güvenlik güncelleştirmelerini almaz. Bu değişiklik, varsayılan olarak daha fazla uygulamanın çerçeveye bağımlı olmasını sağlar.
- İdeal olarak, komut satırı seçenekleri ortogonaldir. Bu durumda, araçlar hem RID'ye özgü kendinden bağımsız dağıtımı (SCD) hem de RID'ye özgü çerçeveye bağımlı dağıtımı (FDD) destekler. Bu nedenle, FDD'ye varsayılan olarak RID ve SCD'ye varsayılan olarak RID ayarlanmamış olması mantıklı değildi. Bu davranış genellikle kullanıcılar için kafa karıştırıcıydı.
.NET 6, kullanıcıları bu hataya neden olan değişiklik konusunda aşağıdaki uyarıyla uyarır:
uyarı NETSDK1179: '--runtime' kullanıldığında '--self-contained' veya '--no-self-contained' seçeneklerinden biri gereklidir.
Artık müşterilerin açıkça ekleme SelfContained
yapmak için zamanları olduğuna göre, kesmeyi tanıtmakta bir sakınca yoktur.
Önerilen eylem
.NET 7 veya önceki bir sürümü kullanıyorsanız ve çıkarıldığı önceki davranışa
SelfContained
bağlıysanız şu uyarıyı görürsünüz:TargetFrameworks >= 8.0 olan projeler için RuntimeIdentifier artık otomatik olarak SelfContained uygulaması sağlamaz. 8.0'a yükselttikten sonra .NET framework bağımsız uygulaması oluşturmaya devam etmek için SelfContained'i açıkça ayarlamayı göz önünde bulundurun.
Uyarının yönergelerini izleyin ve uygulamanızı bağımsız olarak bildirin. Bunu proje dosyasında veya komut satırı bağımsız değişkeni olarak yapabilirsiniz; örneğin,
dotnet publish --self-contained
..NET 8 kullanıyorsanız ve önceki davranışı korumak istiyorsanız, daha önce açıklandığı gibi olarak ayarlayın
SelfContained
true
.
Proje dosyası özelliğini ayarlama
SelfContained
, .csproj, .vbproj veya .fsproj uzantısına sahip bir dosya olan proje dosyanıza ekleyebileceğiniz bir MSBuild özelliğidir. özelliğini aşağıdaki gibi ayarlayın:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<SelfContained>true</SelfContained>
</PropertyGroup>
</Project>