Aracılığıyla paylaş


Çalışma zamanına özgü uygulamalar artık kendi içinde değil

Çalışma zamanına özgü uygulamalar veya bir RuntimeIdentifieriç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ıysaPublishSelfContained, , ve gibi dotnet builddotnet restoreişlemler sırasında yayımlama özellikleri PublishSingleFile ve dotnet publishPublishAot bir ve (belirtilmemişse) ima eder RuntimeIdentifierSelfContained .false
  • PublishTrimmed özelliği olarak ima SelfContainedetmedi.
  • PublishReadyToRun Belirtilmemişse SelfContained ö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 özellikleri PublishSingleFile ve PublishAot şimdi yalnızca (veya dotnet restoreiçin dotnet build değil) sırasında dotnet publish (belirtilmezse) anlamına geliyor SelfContained .false
  • PublishTrimmed Özelliği artık sırasında dotnet publishda 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.

  • .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 SelfContainedtrue .

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>

Ayrıca bkz.