Kırpma seçenekleri
Bu makalede açıklanan MSBuild özellikleri ve öğeleri kırpılmış, bağımsız dağıtımların davranışını etkiler. Seçeneklerden ILLink
bazıları, kırpmayı uygulayan temel aracın adı olan değerini ifade eder. Temel alınan araç hakkında daha fazla bilgi için, Düzeltici belgelerine bakın.
ile PublishTrimmed
kırpma .NET Core 3.0'da kullanıma sunulmuştur. Diğer seçenekler .NET 5 ve sonraki sürümlerde kullanılabilir.
Kırpmayı etkinleştirme
<PublishTrimmed>true</PublishTrimmed>
Yayımlama sırasında kırpmayı etkinleştirin. Bu ayar, kırpma uyumsuz özellikleri de kapatır ve derleme sırasında kırpma analizini etkinleştirir. .NET 8 ve üzeri uygulamalarda bu ayar yapılandırma bağlamasını ve istek temsilcisi kaynak oluşturucularını da etkinleştirir.
Not
Kırpmayı komut satırından etkin olarak belirtirseniz hata ayıklama deneyiminiz farklılık gösterir ve son üründe ek hatalarla karşılaşabilirsiniz.
Ayarın yalnızca dotnet publish
yerine sırasında dotnet build
uygulandığından emin olmak için bu ayarı proje dosyasına yerleştirin.
Bu ayar kırpmayı etkinleştirir ve varsayılan olarak tüm derlemeleri kırpılır. .NET 6'da, yalnızca aracılığıyla kırpmayı [AssemblyMetadata("IsTrimmable", "True")]
kabul eden derlemeler (ayarlanan <IsTrimmable>true</IsTrimmable>
projelere eklenir) varsayılan olarak kırpılmıştır. kullanarak <TrimMode>partial</TrimMode>
önceki davranışa dönebilirsiniz.
Bu ayar ayrıca kırpma uyumluluğu Roslyn çözümleyicisini etkinleştirir ve kırpma ile uyumlu olmayan özellikleri devre dışı bırakır.
Kırpma ayrıntı düzeyi
TrimMode
Kırpma ayrıntı düzeyini veya full
olarak ayarlamak için partial
özelliğini kullanın. Konsol uygulamaları (ve .NET 8'den başlayarak Web SDK uygulamaları) için varsayılan ayar:full
<TrimMode>full</TrimMode>
Yalnızca kırpmayı kabul eden derlemeleri kırpmak için özelliğini olarak partial
ayarlayın:
<TrimMode>partial</TrimMode>
Kırpma modunu olarak partial
değiştirirseniz, bir <TrimmableAssembly>
MSBuild öğesi kullanarak tek tek derlemeleri kırpmaya kabul edebilirsiniz.
<ItemGroup>
<TrimmableAssembly Include="MyAssembly" />
</ItemGroup>
Bu, derlemeyi oluştururken ayara [AssemblyMetadata("IsTrimmable", "True")]
eşdeğerdir.
Kök derlemeler
Bir derleme kırpılmazsa " köke sahip" olarak kabul edilir, bu da hem bu hem de statik olarak anlaşılan tüm bağımlılıklarının tutulacağı anlamına gelir. Ek derlemeler ada göre "kökleştirilebilir" (uzantı olmadan .dll
):
<ItemGroup>
<TrimmerRootAssembly Include="MyAssembly" />
</ItemGroup>
Kök tanımlayıcılar
Çözümleme için kök belirtmenin bir diğer yolu da, düzeltici tanımlayıcı biçimini kullanan bir XML dosyası kullanmaktır. Bu, bütün bir derleme yerine belirli üyeleri kök oluşturmanızı sağlar.
<ItemGroup>
<TrimmerRootDescriptor Include="MyRoots.xml" />
</ItemGroup>
Örneğin, MyRoots.xml
uygulama tarafından dinamik olarak erişilen belirli bir yöntemin kökünü oluşturabilir:
<linker>
<assembly fullname="MyAssembly">
<type fullname="MyAssembly.MyClass">
<method name="DynamicallyAccessedMethod" />
</type>
</assembly>
</linker>
Analiz uyarıları
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
Kırpma analizi uyarılarını etkinleştirin.
Kırpma, statik olarak erişilemeyen IL'yi kaldırır. Dinamik bağımlılıklar oluşturan yansıma veya diğer desenleri kullanan uygulamalar kırpılarak bozulabilir. Bu tür desenler hakkında uyarmak için olarak false
ayarlayın<SuppressTrimAnalysisWarnings>
. Bu ayar, kendi kodunuz, kitaplık kodunuz ve çerçeve kodunuz da dahil olmak üzere uygulamanın tamamıyla ilgili uyarıları ortaya çıkaracaktır.
Roslyn çözümleyicisi
PublishTrimmed
.NET 6+ ayarı, sınırlı sayıda analiz uyarısı gösteren bir Roslyn çözümleyicisini de etkinleştirir. Çözümleyiciyi uygulamasından bağımsız olarak PublishTrimmed
da etkinleştirebilir veya devre dışı bırakabilirsiniz.
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
Kırpma analizi uyarılarının bir alt kümesi için Roslyn çözümleyicisini etkinleştirin.
Uyarıları gizleme
, , WarningsNotAsErrors
ve TreatWarningsAsErrors
gibi NoWarn
WarningsAsErrors
araç zinciri tarafından dikkate alınan normal MSBuild özelliklerini kullanarak tek tek uyarı kodlarını gizleyebilirsiniz. ILLink hata olarak uyar davranışını bağımsız olarak denetleen ek bir seçenek vardır:
<ILLinkTreatWarningsAsErrors>false</ILLinkTreatWarningsAsErrors>
ILLink uyarılarını hata olarak değerlendirin. Bu, derleyici uyarılarını genel olarak hata olarak ele alırken kırpma çözümleme uyarılarını hataya dönüştürmekten kaçınmak için yararlı olabilir.
Ayrıntılı uyarıları göster
.NET 6+'da kırpma analizi, bir derlemeden gelen her derleme için en fazla bir PackageReference
uyarı üretir ve derlemenin iç bileşenlerinin kırpmayla uyumlu olmadığını belirtir. Ayrıca tüm derlemeler için ayrı ayrı uyarılar da gösterebilirsiniz:
<TrimmerSingleWarn>false</TrimmerSingleWarn>
Derleme başına tek bir uyarıya daraltmak yerine tüm ayrıntılı uyarıları gösterin.
Simgeleri kaldırma
Simgeler genellikle kırpılan derlemelerle eşleşecek şekilde kırpılır. Tüm simgeleri de kaldırabilirsiniz:
<TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>
Kırpılan uygulamadan ekli PDB'ler ve ayrı PDB dosyaları da dahil olmak üzere simgeleri kaldırın. Bu, hem uygulama kodu hem de sembollerle birlikte gelen tüm bağımlılıklar için geçerlidir.
SDK, özelliğini DebuggerSupport
kullanarak hata ayıklayıcısı desteğini devre dışı bırakmayı da mümkün kılar. Hata ayıklayıcısı desteği devre dışı bırakıldığında, kırpma simgeleri otomatik olarak kaldırır (TrimmerRemoveSymbols
varsayılan olarak true olur).
Çerçeve kitaplığı özelliklerini kırpma
Çerçeve kitaplıklarının çeşitli özellik alanları, devre dışı bırakılan özelliklerin kodunu kaldırmayı mümkün hale getiren düzeltici yönergeleriyle birlikte gelir.
MSBuild özelliği | Açıklama |
---|---|
AutoreleasePoolSupport |
olarak false ayarlandığında, desteklenen platformlarda otomatik sürüm havuzları oluşturan kodu kaldırır. false .NET SDK'sı için varsayılandır. |
DebuggerSupport |
olarak false ayarlandığında, daha iyi hata ayıklama deneyimleri sağlayan kodu kaldırır. Bu ayar simgeleri de kaldırır. |
EnableUnsafeBinaryFormatterSerialization |
olarak ayarlandığında false BinaryFormatter serileştirme desteğini kaldırır. Daha fazla bilgi için bkz . BinaryFormatter serileştirme yöntemleri eski ve In-box BinaryFormatter uygulaması kaldırıldı ve her zaman atar. |
EnableUnsafeUTF7Encoding |
olarak false ayarlandığında, güvenli olmayan UTF-7 kodlama kodunu kaldırır. Daha fazla bilgi için bkz . UTF-7 kod yolları kullanımdan kaldırıldı. |
EventSourceSupport |
olarak false ayarlandığında, EventSource ile ilgili kodu ve mantığı kaldırır. |
HttpActivityPropagationSupport |
olarak false ayarlandığında, için System.Net.Httptanılama desteğiyle ilgili kodu kaldırır. |
InvariantGlobalization |
olarak ayarlandığında, genelleştirmeye true özgü kodu ve verileri kaldırır. Daha fazla bilgi için bkz . Sabit mod. |
MetadataUpdaterSupport |
olarak false ayarlandığında, sık erişimli yeniden yüklemeyle ilgili meta veri güncelleştirmesine özgü mantığı kaldırır. |
MetricsSupport |
olarak ayarlandığında false izleme desteğini System.Diagnostics.Metrics kaldırır. |
StackTraceSupport (.NET 8+) |
olarak false ayarlandığında, çalışma zamanı tarafından yığın izlemeleri (örneğin, Environment.StackTrace veya Exception.ToString) oluşturma desteğini kaldırır. Yığın izleme dizelerinden kaldırılan bilgilerin miktarı diğer dağıtım seçeneklerine bağlı olabilir. Bu seçenek, hata ayıklayıcılar tarafından oluşturulan yığın izlemelerini etkilemez. |
UseNativeHttpHandler |
olarak true ayarlandığında, Android ve iOS için varsayılan platform uygulamasını HttpMessageHandler kullanır ve yönetilen uygulamayı kaldırır. |
UseSystemResourceKeys |
olarak true ayarlandığında, derlemeler için System.* özel durum iletilerini şeritler. Bir System.* derlemeden özel durum oluşturulduğunda, ileti tam ileti yerine basitleştirilmiş bir kaynak kimliğidir. |
XmlResolverIsNetworkingEnabledByDefault (.NET 8+) |
olarak false ayarlandığında, içindeki System.Xmldosya olmayan URL'leri çözümleme desteğini kaldırır. Yalnızca dosya sistemi çözümlemesi desteklenir. |
Bu özellikler ilgili kodun kırpılmasına ve runtimeconfig dosyası aracılığıyla özelliklerin devre dışı bırakılmasına neden olur. İlgili çalışma zamanı yapılandırma seçenekleri de dahil olmak üzere bu özellikler hakkında daha fazla bilgi için bkz . özellik anahtarları. Bazı SDK'lar bu özellikler için varsayılan değerlere sahip olabilir.
Kırpma sırasında çerçeve özellikleri devre dışı bırakıldı
Aşağıdaki özellikler, statik olarak başvurulmayan bir kod gerektirdiğinden kırpma ile uyumsuzdur. Bu özellikler kırpılan uygulamalarda varsayılan olarak devre dışı bırakılır.
Uyarı
Bu özellikleri kendi riskinize göre etkinleştirin. Dinamik olarak başvurulmuş kodu korumak için ek çalışma yapmadan kırpılan uygulamaları kesme olasılığı yüksektir.
<BuiltInComInteropSupport>
Yerleşik COM desteği devre dışı bırakıldı.
<CustomResourceTypesSupport>
Özel kaynak türlerinin kullanımı desteklenmez. Özel kaynak türleri için yansıma kullanan ResourceManager kod yolları kırpılır.
<EnableCppCLIHostActivation>
C++/CLI ana bilgisayar etkinleştirme devre dışı bırakıldı.
<EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization>
DesigntimeLicenseContextSerializer serileştirme kullanımı
BinaryFormatter
devre dışı bırakıldı.<StartupHookSupport>
ile
DOTNET_STARTUP_HOOKS
daha önceMain
kod çalıştırma desteklenmez. Daha fazla bilgi için bkz . konak başlatma kancası.