Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Halaman ini adalah referensi untuk properti dan item MSBuild yang dapat Anda gunakan untuk mengonfigurasi proyek .NET.
Note
Halaman ini adalah pekerjaan yang sedang berlangsung dan tidak mencantumkan semua properti MSBuild yang berguna untuk SDK .NET. Untuk daftar properti MSBuild umum, lihat Properti MSBuild Umum.
Properti validasi rakitan
Properti dan item ini diteruskan ke ValidateAssemblies tugas. Untuk informasi selengkapnya tentang validasi perakitan, lihat Validasi perakitan.
Properti MSBuild berikut ini didokumentasikan di bagian ini:
Note
Properti ini bukan bagian dari SDK .NET (belum). Untuk menggunakannya, Anda juga harus menambahkan PackageReference ke Microsoft. DotNet.ApiCompat.Task.
Selain itu, properti berikut yang didokumenkan dalam properti Validasi paket juga berlaku untuk validasi perakitan:
- ApiCompatEnableRuleAttributesMustMatch
- ApiCompatEnableRuleCannotChangeParameterName
- ApiCompatExcludeAttributesFile
- ApiCompatGenerateSuppressionFile
- ApiCompatPermitUnnecessarySuppressions
- ApiCompatPreserveUnnecessarySuppressions
- ApiCompatRespectInternals
- ApiCompatSuppressionFile
- ApiCompatSuppressionOutputFile
- NoWarn
- RoslynAssembliesPath
ApiCompatStrictMode
Ketika diatur ke true, ApiCompatStrictMode properti menentukan bahwa pemeriksaan kompatibilitas API harus dilakukan dalam mode ketat.
<PropertyGroup>
<ApiCompatStrictMode>true</ApiCompatStrictMode>
</PropertyGroup>
ApiCompatValidateAssemblies
Properti ApiCompatValidateAssemblies memungkinkan serangkaian validasi pada rakitan yang ditentukan. Untuk informasi selengkapnya, lihat Validasi rakitan.
<PropertyGroup>
<ApiCompatValidateAssemblies>true</ApiCompatValidateAssemblies>
</PropertyGroup>
Properti atribut rakitan
- GenerateAssemblyInfo
- GeneratedAssemblyInfoFile
- SertakanSourceRevisionInInformationalVersion
- SourceRevisionId
GenerateAssemblyInfo
Properti GenerateAssemblyInfo mengontrol pembuatan atribut AssemblyInfo untuk proyek. Nilai defaultnya adalah true. Gunakan false untuk menonaktifkan pembuatan file:
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
Pengaturan GeneratedAssemblyInfoFile mengontrol nama file yang dibuat.
Ketika nilai GenerateAssemblyInfo adalah true, properti proyek terkait paket diubah menjadi atribut rakitan.
Untuk informasi selengkapnya tentang membuat atribut rakitan menggunakan file proyek, lihat Mengatur atribut perakitan dalam file proyek.
GeneratedAssemblyInfoFile
Properti GeneratedAssemblyInfoFile mendefinisikan jalur relatif atau absolut dari file info perakitan yang dibuat. Default ke file bernama [project-name]. AssemblyInfo. [cs|vb] dalam direktori $(IntermediateOutputPath) (biasanya obj).
<PropertyGroup>
<GeneratedAssemblyInfoFile>assemblyinfo.cs</GeneratedAssemblyInfoFile>
</PropertyGroup>
SertakanSourceRevisionInInformationalVersion
Properti IncludeSourceRevisionInInformationalVersion mengontrol apakah SourceRevisionId nilai ditambahkan ke atribut assembly InformationalVersion . Nilai defaultnya adalah true. Atur ke false untuk menonaktifkan perilaku ini:
<PropertyGroup>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup>
Untuk informasi selengkapnya, lihat Source Link yang disertakan dalam .NET SDK.
SourceRevisionId
Properti SourceRevisionId menyimpan ID revisi kontrol sumber untuk build, seperti hash penerapan Git. Mulai .NET 8, SDK .NET secara otomatis mengisi properti ini dengan hash penerapan saat Source Link ada. Saat diatur, nilainya ditambahkan ke atribut assembly InformationalVersion .
<PropertyGroup>
<SourceRevisionId>abc1234</SourceRevisionId>
</PropertyGroup>
Untuk informasi selengkapnya, lihat Source Link yang disertakan dalam .NET SDK.
Properti kerangka kerja
Properti MSBuild berikut ini didokumentasikan di bagian ini:
TargetFramework
Properti TargetFramework menentukan versi kerangka kerja target untuk aplikasi. Untuk daftar moniker kerangka kerja target yang valid, lihat Kerangka kerja target dalam proyek bergaya SDK.
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
Note
Nilainya TargetFramework adalah alias. SDK .NET mengurainya dan mengatur properti moniker kanonis: TargetFrameworkMoniker, TargetFrameworkIdentifier, TargetFrameworkVersion, dan, jika berlaku, TargetPlatformIdentifier, TargetPlatformVersion, dan TargetPlatformMoniker. Jika Anda menggunakan alias kustom, Anda dapat mengatur properti ini langsung di file proyek Anda.
Untuk mengetahui informasi selengkapnya, lihat Kerangka kerja target dalam proyek bergaya SDK.
TargetFrameworks
Gunakan properti TargetFrameworks saat Anda ingin aplikasi menargetkan beberapa platform. Untuk daftar moniker kerangka kerja target yang valid, lihat Kerangka kerja target dalam proyek bergaya SDK.
Note
Jika TargetFrameworks (jamak) ditentukan, TargetFramework (tunggal) diabaikan.
<PropertyGroup>
<TargetFrameworks>net8.0;net462</TargetFrameworks>
</PropertyGroup>
Note
Dimulai dengan .NET SDK 10.0.300, beberapa nilai dapat diselesaikan ke kerangka kerja efektif yang sama. Misalnya, <TargetFrameworks>linux;mac</TargetFrameworks> valid di mana kedua alias diselesaikan net10.0 sebagai kerangka kerja target.
Untuk mengetahui informasi selengkapnya, lihat Kerangka kerja target dalam proyek bergaya SDK.
NetStandardImplicitPackageVersion
Note
Properti ini hanya berlaku untuk proyek yang menggunakan netstandard1.x. Ini tidak berlaku untuk proyek yang menggunakan netstandard2.x.
Gunakan properti NetStandardImplicitPackageVersion saat Anda ingin menentukan versi kerangka kerja yang lebih rendah dari versi metapackage. File proyek dalam contoh berikut menargetkan netstandard1.3 tetapi menggunakan versi 1.6.0 dari NETStandard.Library.
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
</PropertyGroup>
Properti paket
Properti deskriptif
Anda dapat menentukan properti seperti PackageId, PackageVersion, PackageIcon, Title, dan Description untuk menjelaskan paket yang dibuat dari proyek Anda. Untuk mengetahui informasi tentang properti ini dan properti lainnya, lihat target paket.
<PropertyGroup>
...
<PackageId>ClassLibDotNetStandard</PackageId>
<Version>1.0.0</Version>
<Authors>John Doe</Authors>
<Company>Contoso</Company>
</PropertyGroup>
PackRelease
Properti PackRelease ini mirip dengan properti PublishRelease , kecuali mengubah perilaku dotnet packdefault . Properti ini diperkenalkan di .NET 7.
<PropertyGroup>
<PackRelease>true</PackRelease>
</PropertyGroup>
Note
Mulai dari .NET 8 SDK, PackRelease default ke true. Untuk informasi selengkapnya, lihat 'dotnet pack' menggunakan konfigurasi Rilis.
Properti validasi paket
Properti dan item ini diteruskan ke ValidatePackage tugas. Untuk informasi selengkapnya tentang validasi paket, lihat Gambaran umum validasi paket.
Untuk properti untuk tugas, ValidateAssemblies lihat Properti validasi rakitan.
Properti dan item MSBuild berikut ini didokumenkan di bagian ini:
- ApiCompatEnableRuleAttributesMustMatch
- ApiCompatEnableRuleCannotChangeParameterName
- ApiCompatExcludeAttributesFile
- ApiCompatGenerateSuppressionFile
- ApiCompatPermitUnnecessarySuppressions
- ApiCompatPreserveUnnecessarySuppressions
- ApiCompatRespectInternals
- ApiCompatSuppressionFile
- ApiCompatSuppressionOutputFile
- EnablePackageValidation
- EnableStrictModeForBaselineValidation
- EnableStrictModeForCompatibleFrameworksInPackage
- EnableStrictModeForCompatibleTfms
- NoWarn
- PackageValidationBaselineFrameworkToIgnore
- PackageValidationBaselineName
- PackageValidationBaselineVersion
- PackageValidationReferencePath
- RoslynAssembliesPath
ApiCompatEnableRuleAttributesMustMatch
Saat diatur ke true, ApiCompatEnableRuleAttributesMustMatch properti mengaktifkan aturan validasi yang memeriksa apakah atribut cocok. Defaultnya adalah false.
<PropertyGroup>
<ApiCompatEnableRuleAttributesMustMatch>true</ApiCompatEnableRuleAttributesMustMatch>
</PropertyGroup>
ApiCompatEnableRuleCannotChangeParameterName
Saat diatur ke true, ApiCompatEnableRuleCannotChangeParameterName properti mengaktifkan aturan validasi yang memeriksa apakah nama parameter telah berubah dalam metode publik. Defaultnya adalah false.
<PropertyGroup>
<ApiCompatEnableRuleCannotChangeParameterName>true</ApiCompatEnableRuleCannotChangeParameterName>
</PropertyGroup>
ApiCompatExcludeAttributesFile
Item ApiCompatExcludeAttributesFile menentukan jalur ke file yang berisi atribut yang akan dikecualikan dalam format DocId .
<ItemGroup>
<ApiCompatExcludeAttributesFile Include="ApiCompatExcludedAttributes.txt" />
<ApiCompatExcludeAttributesFile Include="ApiCompatBaselineExcludedAttributes.txt" />
</ItemGroup>
ApiCompatGenerateSuppressionFile
Properti ApiCompatGenerateSuppressionFile menentukan apakah akan menghasilkan file supresi kompatibilitas.
<PropertyGroup>
<ApiCompatGenerateSuppressionFile>true</ApiCompatGenerateSuppressionFile>
</PropertyGroup>
ApiCompatPermitUnnecessarySuppressions
Properti ApiCompatPermitUnnecessarySuppressions menentukan apakah akan mengizinkan supresi yang tidak perlu dalam file supresi.
Defaultnya adalah false.
<PropertyGroup>
<ApiCompatPermitUnnecessarySuppressions>true</ApiCompatPermitUnnecessarySuppressions>
</PropertyGroup>
ApiCompatPreserveUnnecessarySuppressions
Properti ApiCompatPreserveUnnecessarySuppressions menentukan apakah akan mempertahankan supresi yang tidak perlu saat meregenerasi file supresi. Ketika file supresi yang ada diregenerasi, kontennya dibaca, dideserialisasi ke dalam serangkaian supresi, lalu disimpan dalam daftar. Beberapa supresi mungkin tidak lagi diperlukan jika ketidaksesuaian telah diperbaiki. Ketika supresi diserialisasikan kembali ke disk, Anda dapat memilih untuk menyimpan semua ekspresi (deserialisasi) yang ada dengan mengatur properti ini ke true.
Defaultnya adalah false.
<PropertyGroup>
<ApiCompatPreserveUnnecessarySuppressions>true</ApiCompatPreserveUnnecessarySuppressions>
</PropertyGroup>
ApiCompatRespectInternals
Properti ApiCompatRespectInternals menentukan apakah internal API harus diperiksa kompatibilitasnya selain public API.
<PropertyGroup>
<ApiCompatRespectInternals>true</ApiCompatRespectInternals>
</PropertyGroup>
ApiCompatSuppressionFile
Item ApiCompatSuppressionFile menentukan jalur ke satu atau beberapa file supresi untuk dibaca. Jika tidak ditentukan, file <supresi project-directory>/CompatibilitySuppressions.xml dibaca (jika ada).
<ItemGroup>
<ApiCompatSuppressionFile Include="CompatibilitySuppressions.xml;CompatibilitySuppressions.WasmThreads.xml" />
</ItemGroup>
ApiCompatSuppressionOutputFile
Properti ApiCompatSuppressionOutputFile menentukan jalur ke file supresi yang akan ditulis ketika <ApiCompatGenerateSuppressionFile> adalah true. Jika tidak ditentukan, item pertama ApiCompatSuppressionFile digunakan.
EnablePackageValidation
Properti EnablePackageValidation memungkinkan serangkaian validasi pada paket setelah tugas Pack. Untuk mengetahui informasi selengkapnya, lihat validasi paket.
<PropertyGroup>
<EnablePackageValidation>true</EnablePackageValidation>
</PropertyGroup>
EnableStrictModeForBaselineValidation
Saat diatur ke true, EnableStrictModeForBaselineValidation properti mengaktifkan mode ketat untuk pemeriksaan garis besar paket. Defaultnya adalah false.
EnableStrictModeForCompatibleFrameworksInPackage
Saat diatur ke true, EnableStrictModeForCompatibleFrameworksInPackage properti memungkinkan mode ketat untuk rakitan yang kompatibel berdasarkan kerangka kerja targetnya. Defaultnya adalah false.
EnableStrictModeForCompatibleTfms
Saat diatur ke true, EnableStrictModeForCompatibleTfms properti memungkinkan mode ketat untuk rakitan kontrak dan implementasi untuk semua kerangka kerja target yang kompatibel. Defaultnya adalah true.
NoWarn
Properti NoWarn menentukan ID diagnostik untuk ditekan.
<PropertyGroup>
<NoWarn>$(NoWarn);PKV0001</NoWarn>
</PropertyGroup>
PackageValidationBaselineFrameworkToIgnore
Item PackageValidationBaselineFrameworkToIgnore menentukan kerangka kerja target untuk diabaikan dari paket garis besar. String kerangka kerja harus sama persis dengan nama folder dalam paket garis besar.
<ItemGroup>
<PackageValidationBaselineFrameworkToIgnore Include="netcoreapp2.1" />
</ItemGroup>
PackageValidationBaselineName
Properti PackageValidationBaselineName menentukan nama paket garis besar untuk memvalidasi paket saat ini. Jika tidak ditentukan, PackageId nilai digunakan.
PackageValidationBaselineVersion
Properti PackageValidationBaselineVersion menentukan versi paket garis besar untuk memvalidasi paket saat ini.
PackageValidationReferencePath
Item PackageValidationReferencePath menentukan jalur direktori tempat perakitan referensi dapat ditemukan per TFM.
<ItemGroup>
<PackageValidationReferencePath Include="path/to/reference-assembly" TargetFramework="net9.0" />
</ItemGroup>
RoslynAssembliesPath
Properti RoslynAssembliesPath menentukan jalur ke direktori yang berisi Microsoft. Rakitan CodeAnalysis yang ingin Anda gunakan. Anda hanya perlu mengatur properti ini jika Anda ingin menguji dengan pengkompilasi yang lebih baru daripada apa yang ada di SDK.
Properti terkait penerbitan
Properti MSBuild berikut ini didokumentasikan di bagian ini:
- AppendRuntimeIdentifierToOutputPath
- AppendTargetFrameworkToOutputPath
- CopyLocalLockFileAssemblies
- ErrorOnDuplicatePublishOutputFiles
- GenerateRuntimeConfigDevFile
- GenerateRuntimeConfigurationFiles
- GenerateSatelliteAssembliesForCore
- IsPublishable
- PreserveCompilationContext
- PreserveCompilationReferences
- ProduceReferenceAssemblyInOutDir
- PublishDocumentationFile
- PublishDocumentationFiles
- PublishReferencesDocumentationFiles
- PublishReferencesSymbols
- PublishRelease
- PublishSelfContained
- RollForward
- RuntimeFrameworkVersion
- RuntimeIdentifier
- RuntimeIdentifiers
- SatelliteResourceLanguages
- SelfContained
- UseAppHost
- UseNativeLibPrefix
AppendTargetFrameworkToOutputPath
Properti AppendTargetFrameworkToOutputPath mengontrol apakah moniker kerangka kerja target (TFM) ditambahkan ke jalur output (yang ditentukan oleh OutputPath). SDK .NET secara otomatis menambahkan kerangka kerja target dan, jika ada, pengidentifikasi runtime ke jalur output. Mengatur AppendTargetFrameworkToOutputPath ke false mencegah TFM ditambahkan ke jalur output. Namun, tanpa TFM di jalur output, beberapa artefak build dapat saling menimpa.
Misalnya, untuk aplikasi .NET 5, jalur output berubah dari bin\Debug\net5.0 menjadi bin\Debug dengan pengaturan berikut:
<PropertyGroup>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>
AppendRuntimeIdentifierToOutputPath
Properti AppendRuntimeIdentifierToOutputPath mengontrol apakah pengidentifikasi runtime (RID) ditambahkan ke jalur output. SDK .NET secara otomatis menambahkan kerangka kerja target dan, jika ada, pengidentifikasi runtime (RID) ke jalur output. Mengatur AppendRuntimeIdentifierToOutputPath ke false mencegah RID ditambahkan ke jalur output. (Namun , RID masih ditambahkan ke jalur penerbitan. Untuk informasi selengkapnya, lihat dotnet/sdk#12114.)
Misalnya, untuk aplikasi .NET 9 dan RID win-x64, pengaturan berikut mengubah jalur output dari bin\Debug\net9.0\win-x64 menjadi bin\Debug\net9.0:
<PropertyGroup>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
CopyLocalLockFileAssemblies
Properti CopyLocalLockFileAssemblies ini berguna untuk proyek plugin yang memiliki dependensi pada pustaka lain. Jika Anda mengatur properti ini ke true, dependensi paket NuGet transitif apa pun disalin ke direktori output. Itu berarti Anda dapat menggunakan output dotnet build untuk menjalankan plugin di komputer apa pun.
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
Nilai CopyLocalLockFileAssemblies default dapat bervariasi berdasarkan jenis output. Misalnya, untuk pustaka kelas, nilai defaultnya adalah false, sedangkan untuk aplikasi konsol defaultnya adalah true. Anda dapat menentukan properti ini secara eksplisit untuk mengambil alih default jika diperlukan.
Tip
Atau, Anda dapat menggunakan dotnet publish untuk menerbitkan pustaka kelas. Untuk mengetahui informasi selengkapnya, lihat dotnet publish.
ErrorOnDuplicatePublishOutputFiles
Properti ErrorOnDuplicatePublishOutputFiles berkaitan dengan apakah SDK membuat kesalahan NETSDK1148 saat MSBuild mendeteksi file duplikat dalam output penerbitan, tetapi tidak dapat menentukan file mana yang akan dihapus. Atur properti ErrorOnDuplicatePublishOutputFiles ke false jika Anda tidak ingin kesalahan dihasilkan.
<PropertyGroup>
<ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
</PropertyGroup>
Properti ini diperkenalkan di .NET 6.
GenerateRuntimeConfigDevFile
Dimulai dengan .NET 6 SDK, file [Appname].runtimesettings.dev.jsontidak lagi dihasilkan secara default pada waktu kompilasi. Jika Anda masih ingin file ini dibuat, atur properti GenerateRuntimeConfigDevFile ke true.
<PropertyGroup>
<GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>
</PropertyGroup>
GenerateRuntimeConfigurationFiles
Properti GenerateRuntimeConfigurationFiles mengontrol apakah opsi konfigurasi runtime disalin dari file runtimeconfig.template.json ke file [appname].runtimeconfig.json. Untuk aplikasi yang memerlukan file runtimeconfig.json, yaitu, yang OutputType-nya merupakan Exe, properti ini default ke true.
<PropertyGroup>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
</PropertyGroup>
GenerateSatelliteAssembliesForCore
Properti GenerateSatelliteAssembliesForCore mengontrol apakah rakitan satelit dihasilkan menggunakan csc.exe atau Al.exe (Assembly Linker) dalam proyek .NET Framework. (.NET Core dan .NET 5+ proyek selalu menggunakan csc.exe untuk menghasilkan rakitan satelit.) Untuk proyek .NET Framework, rakitan satelit dibuat oleh al.exe, secara default. Dengan mengatur properti GenerateSatelliteAssembliesForCore ke true, rakitan satelit dibuat oleh csc.exe sebagai gantinya. Menggunakan csc.exe dapat menguntungkan dalam situasi berikut:
- Anda ingin menggunakan opsi
deterministickompilator C#. - Anda dibatasi oleh fakta bahwa al.exe tidak memiliki dukungan untuk penandatanganan publik dan menangani AssemblyInformationalVersionAttribute dengan buruk.
<PropertyGroup>
<GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
</PropertyGroup>
IsPublishable
Properti IsPublishable memungkinkan target Publish berjalan. Properti ini hanya memengaruhi proses yang menggunakan file .*proj dan target Publish, seperti perintah dotnet publish. Ini tidak memengaruhi penerbitan di Visual Studio, yang menggunakan target PublishOnly. Nilai defaultnya adalah true.
Properti ini berguna jika Anda menjalankan dotnet publish di file solusi, karena memungkinkan pemilihan proyek otomatis yang harus diterbitkan.
<PropertyGroup>
<IsPublishable>false</IsPublishable>
</PropertyGroup>
PreserveCompilationContext
Properti PreserveCompilationContext memungkinkan aplikasi bawaan atau yang diterbitkan untuk mengkompilasi lebih banyak kode saat runtime menggunakan pengaturan yang sama yang digunakan pada waktu build. Rakitan yang direferensikan pada waktu build akan disalin ke subdirektori ref dari direktori output. Nama rakitan referensi disimpan dalam file .deps.json aplikasi bersama dengan opsi yang diteruskan ke kompilator. Anda dapat mengambil informasi ini menggunakan properti DependencyContext.CompileLibraries dan DependencyContext.CompilationOptions.
Fungsionalitas ini sebagian besar digunakan secara internal oleh ASP.NET Core halaman MVC dan Razor untuk mendukung kompilasi runtime file Razor.
<PropertyGroup>
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
PreserveCompilationReferences
Properti PreserveCompilationReferences mirip dengan properti PreserveCompilationContext, kecuali properti hanya menyalin rakitan yang direferensikan ke direktori penerbitan, dan bukan file .deps.json.
<PropertyGroup>
<PreserveCompilationReferences>true</PreserveCompilationReferences>
</PropertyGroup>
Untuk mengetahui informasi selengkapnya, lihat Properti SDK Razor.
ProduceReferenceAssemblyInOutDir
Dalam .NET 5 dan versi yang lebih lama, rakitan referensi selalu ditulis ke direktori OutDir. Dalam .NET 6 dan versi yang lebih baru, Anda dapat menggunakan properti ProduceReferenceAssemblyInOutDir untuk mengontrol apakah rakitan referensi ditulis ke direktori OutDir. Nilai defaultnya adalah false, dan rakitan referensi hanya ditulis ke direktori IntermediateOutputPath. Atur nilai ke true untuk menulis rakitan referensi ke direktori OutDir.
<PropertyGroup>
<ProduceReferenceAssemblyInOutDir>true</ProduceReferenceAssemblyInOutDir>
</PropertyGroup>
Untuk mengetahui informasi selengkapnya, lihat Menulis rakitan referensi ke output perantara.
PublishDocumentationFile
Ketika properti ini adalah true, file dokumentasi XML untuk proyek, jika dibuat, disertakan dalam output penerbitan untuk proyek. Properti ini default ke true.
Tip
Atur GenerateDocumentationFile ke true untuk menghasilkan file dokumentasi XML pada waktu kompilasi.
PublishDocumentationFiles
Properti ini adalah bendera pengaktifan untuk beberapa properti lain yang mengontrol apakah berbagai jenis file dokumentasi XML disalin ke direktori penerbitan secara default, yaitu PublishDocumentationFile dan PublishReferencesDocumentationFiles. Jika properti tersebut tidak diatur, dan properti ini diatur, maka properti tersebut akan default ke true. Properti ini default ke true.
PublishReferencesDocumentationFiles
Ketika properti ini adalah true, file dokumentasi XML untuk referensi proyek disalin ke direktori penerbitan, alih-alih hanya aset runtime seperti file DLL. Properti ini default ke true.
PublishReferencesSymbols
Ketika properti ini adalah true, file simbol (juga dikenal sebagai file PDB) untuk referensi proyek disalin ke direktori penerbitan, bukan hanya aset runtime seperti file DLL. Properti ini default ke true.
PublishRelease
Properti PublishRelease menginformasikan dotnet publish untuk menggunakan Release konfigurasi secara default alih-alih Debug konfigurasi. Properti ini diperkenalkan di .NET 7.
<PropertyGroup>
<PublishRelease>true</PublishRelease>
</PropertyGroup>
Note
- Mulai dari .NET 8 SDK,
PublishReleasedefault ketrueuntuk proyek yang menargetkan .NET 8 atau yang lebih baru. Untuk informasi selengkapnya, lihat 'penerbitan dotnet' menggunakan konfigurasi Rilis. - Properti ini tidak memengaruhi perilaku
dotnet build /t:Publish, dan mengubah konfigurasi hanya saat menerbitkan melalui .NET CLI.
PublishSelfContained
Properti PublishSelfContained menginformasikan dotnet publish untuk menerbitkan aplikasi sebagai aplikasi mandiri. Properti ini berguna saat Anda tidak dapat menggunakan --self-contained argumen untuk perintah terbitkan dotnet—misalnya, saat Anda menerbitkan di tingkat solusi. Dalam hal ini, Anda dapat menambahkan PublishSelfContained properti MSBuild ke proyek atau file Directory.Build.Props .
Properti ini diperkenalkan di .NET 7. Ini mirip dengan properti SelfContained , kecuali khusus untuk publish kata kerja. Disarankan untuk menggunakan PublishSelfContained alih-alih SelfContained.
<PropertyGroup>
<PublishSelfContained>true</PublishSelfContained>
</PropertyGroup>
RollForward
Properti RollForward mengontrol cara aplikasi memilih runtime saat beberapa versi runtime tersedia. Nilai ini adalah output ke .runtimeconfig.json sebagai pengaturan rollForward.
<PropertyGroup>
<RollForward>LatestMinor</RollForward>
</PropertyGroup>
Atur RollForward ke salah satu nilai berikut:
| Value | Description |
|---|---|
Minor |
Default jika tidak ditentukan. Roll-forward ke versi minor yang lebih tinggi berikutnya yang tersedia (dan versi patch tertinggi yang tersedia dalam versi minor tersebut), jika versi minor yang diminta hilang. Jika versi minor yang diminta ada, maka kebijakan LatestPatch digunakan. |
Major |
Roll-forward ke versi utama yang lebih tinggi yang tersedia berikutnya (pada versi minor terendah yang tersedia, dan versi patch tertinggi yang tersedia dalam versi minor tersebut), jika versi utama yang diminta hilang. Jika versi utama yang diminta ada, maka kebijakan Minor digunakan. |
LatestPatch |
Roll-forward ke versi patch tertinggi yang tersedia untuk versi utama dan minor yang diminta. Nilai ini menonaktifkan pindah ke versi kecil. |
LatestMinor |
Roll-forward ke versi minor tertinggi yang tersedia untuk versi utama yang diminta (dan versi patch tertinggi yang tersedia dalam versi minor tersebut), bahkan jika versi minor yang diminta ada. |
LatestMajor |
Roll-forward ke versi utama tertinggi yang tersedia (dan versi minor dan patch tertinggi yang tersedia dalam versi utama tersebut), bahkan jika mayor yang diminta ada. |
Disable |
Jangan pindah, hanya ikat ke versi yang ditentukan. Kebijakan ini tidak disarankan untuk penggunaan umum karena menonaktifkan kemampuan untuk berpindah ke patch terbaru. Nilai ini hanya disarankan untuk pengujian. |
Untuk mengetahui informasi selengkapnya, lihat Mengontrol perilaku berpindah.
RuntimeFrameworkVersion
Properti RuntimeFrameworkVersion menentukan versi runtime yang akan digunakan saat menerbitkan. Tentukan versi runtime:
<PropertyGroup>
<RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>
Saat menerbitkan aplikasi yang bergantung pada kerangka kerja, nilai ini menentukan versi minimum yang diperlukan. Saat menerbitkan aplikasi mandiri, nilai ini menentukan versi yang tepat yang diperlukan.
RuntimeIdentifier
Properti RuntimeIdentifier memungkinkan Anda menentukan pengidentifikasi runtime (RID) tunggal untuk proyek. RID memungkinkan penerbitan penyebaran mandiri.
<PropertyGroup>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
</PropertyGroup>
RuntimeIdentifiers
Properti RuntimeIdentifiers memungkinkan Anda menentukan daftar pengidentifikasi runtime (RID) yang dibatasi titik koma untuk proyek. Gunakan properti ini jika Anda perlu menerbitkan untuk beberapa runtime.
RuntimeIdentifiers digunakan pada waktu pemulihan untuk memastikan aset yang tepat ada dalam grafik.
Tip
RuntimeIdentifier (tunggal) dapat menyediakan build yang lebih cepat saat hanya satu runtime yang diperlukan.
<PropertyGroup>
<RuntimeIdentifiers>win-x64;osx-x64;linux-x64</RuntimeIdentifiers>
</PropertyGroup>
SatelliteResourceLanguages
Properti SatelliteResourceLanguages memungkinkan Anda menentukan bahasa mana yang ingin Anda pertahankan rakitan sumber daya satelitnya selama build dan penerbitan. Banyak paket NuGet termasuk rakitan satelit sumber daya yang dilokalkan dalam paket utama. Untuk proyek yang mereferensikan paket NuGet ini yang tidak memerlukan sumber daya yang dilokalkan, rakitan yang dilokalkan tidak perlu meningkatkan ukuran output build dan penerbitan. Dengan menambahkan properti SatelliteResourceLanguages ke file proyek Anda, hanya rakitan lokal untuk bahasa yang Anda tentukan yang akan disertakan dalam output build dan penerbitan. Misalnya, dalam file proyek berikut, hanya rakitan satelit sumber daya Inggris (AS) dan Jerman (Jerman) yang akan dipertahankan.
<PropertyGroup>
<SatelliteResourceLanguages>en-US;de-DE</SatelliteResourceLanguages>
</PropertyGroup>
Note
Anda harus menentukan properti ini dalam proyek yang mereferensikan paket NuGet dengan rakitan satelit sumber daya yang dilokalkan.
Untuk menentukan beberapa bahasa sebagai argumen ke
dotnet publish, Anda harus menambahkan tiga pasang tanda kutip di sekitar pengidentifikasi bahasa. Contohnya:dotnet msbuild multi.msbuildproj -p:SatelliteResourceLanguages="""de;en"""
SelfContained
Properti SelfContained menginformasikan dotnet build dan dotnet publish untuk membangun atau menerbitkan aplikasi sebagai aplikasi mandiri. Properti ini berguna ketika Anda tidak dapat menggunakan --self-contained argumen dengan perintah dotnet —misalnya, saat Anda menerbitkan di tingkat solusi. Dalam hal ini, Anda dapat menambahkan SelfContained properti MSBuild ke proyek atau file Directory.Build.Props .
Properti ini mirip dengan properti PublishSelfContained . Disarankan untuk menggunakan PublishSelfContained alih-alih SelfContained jika memungkinkan.
<PropertyGroup>
<SelfContained>true</SelfContained>
</PropertyGroup>
UseAppHost
Properti UseAppHost mengontrol apakah executable native dibuat untuk penyebaran atau tidak. Executable native diperlukan untuk penyebaran mandiri. Executable yang bergantung pada kerangka kerja dibuat secara default. Atur properti UseAppHost ke false untuk menonaktifkan pembuatan executable.
<PropertyGroup>
<UseAppHost>false</UseAppHost>
</PropertyGroup>
Untuk informasi selengkapnya tentang penyebaran, lihat penyebaran aplikasi .NET.
UseNativeLibPrefix
Properti UseNativeLibPrefix mengontrol apakah NativeAOT menerapkan lib awalan ke output pustaka asli yang tidak dapat dieksekusi pada platform Unix. Secara default, awalan lib diterapkan, yang selaras dengan konvensi penamaan Unix untuk pustaka bersama dan statis (misalnya, libmylib.so, libmylib.a).
Atur UseNativeLibPrefix ke false untuk menolak perilaku default:
<PropertyGroup>
<UseNativeLibPrefix>false</UseNativeLibPrefix>
</PropertyGroup>
Properti ini diperkenalkan di .NET 11. Untuk informasi selengkapnya, lihat NativeAOT menggunakan awalan lib untuk output pustaka asli di Unix.
Properti terkait pemangkasan
Banyak properti MSBuild tersedia untuk menyempurnakan pemangkasan, yang merupakan fitur yang memangkas kode yang tidak digunakan dari penyebaran mandiri. Opsi ini dibahas secara rinci di Opsi pemangkasan. Tabel berikut ini menyediakan referensi cepat.
| Property | Values | Description |
|---|---|---|
PublishTrimmed |
true atau false |
Mengontrol apakah pemangkasan diaktifkan selama penerbitan. |
TrimMode |
full atau partial |
Defaultnya adalah full. Mengontrol granularitas pemangkasan. |
SuppressTrimAnalysisWarnings |
true atau false |
Mengontrol apakah peringatan analisis pemangkasan dihasilkan. |
EnableTrimAnalyzer |
true atau false |
Mengontrol apakah subset peringatan analisis pemangkasan dihasilkan. Anda dapat mengaktifkan analisis meskipun PublishTrimmed diatur ke false. |
ILLinkTreatWarningsAsErrors |
true atau false |
Mengontrol apakah peringatan pemangkasan diperlakukan sebagai kesalahan. Misalnya, Anda mungkin ingin mengatur properti ini ke false saat TreatWarningsAsErrors diatur ke true. |
TrimmerSingleWarn |
true atau false |
Mengontrol apakah satu peringatan per rakitan ditampilkan atau semua peringatan. |
TrimmerRemoveSymbols |
true atau false |
Mengontrol apakah semua simbol dihapus dari aplikasi yang dipangkas. |
Properti terkait build
Properti MSBuild berikut ini didokumentasikan di bagian ini:
- ContinuousIntegrationBuild
- CopyDebugSymbolFilesFromPackages
- CopyDocumentationFilesFromPackages
- DisableImplicitFrameworkDefines
- DocumentationFile
- EmbeddedResourceUseDependentUponConvention
- EnablePreviewFeatures
- EnableWindowsTargeting
- GenerateDocumentationFile
- GenerateRequiresPreviewFeaturesAttribute
- OptimizeImplicitlyTriggeredBuild
- DisableRuntimeMarshalling
- BuildWithNetFrameworkHostedCompiler
- RoslynCompilerType
Opsi kompilator C#, seperti LangVersion dan Nullable, juga dapat ditentukan sebagai properti MSBuild dalam file proyek Anda. Untuk mengetahui informasi selengkapnya, lihat Opsi kompilator C#.
ContinuousIntegrationBuild
Properti ContinuousIntegrationBuild menunjukkan apakah build dijalankan pada server integrasi berkelanjutan (CI). Ketika diatur ke true, properti ini memungkinkan pengaturan yang hanya berlaku untuk build resmi dibandingkan dengan build lokal pada komputer pengembang. Misalnya, jalur file tersimpan dinormalisasi untuk build resmi. Tetapi pada komputer pengembangan lokal, debugger tidak dapat menemukan file sumber lokal jika jalur file dinormalisasi.
Anda dapat menggunakan variabel sistem CI Anda untuk mengatur ContinuousIntegrationBuild properti secara kondisional. Misalnya, nama variabel untuk Azure Pipelines TF_BUILD:
<PropertyGroup Condition="'$(TF_BUILD)' == 'true'">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>
Untuk GitHub Actions, nama variabel GITHUB_ACTIONS:
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>
CopyDebugSymbolFilesFromPackages
Ketika properti ini diatur ke true, semua file simbol (juga dikenal sebagai file PDB) dari PackageReference item dalam proyek disalin ke output build. File-file ini dapat memberikan jejak tumpukan yang lebih informatif untuk pengecualian dan membuat cadangan memori dan jejak aplikasi yang sedang berjalan lebih mudah dipahami. Namun, termasuk file-file ini menghasilkan peningkatan ukuran bundel penyebaran.
Properti ini diperkenalkan di .NET SDK 7.0.100, meskipun defaultnya tidak ditentukan.
CopyDocumentationFilesFromPackages
Ketika properti ini diatur ke true, semua file dokumentasi XML yang dihasilkan dari PackageReference item dalam proyek disalin ke output build. Perhatikan bahwa mengaktifkan fitur ini akan menghasilkan peningkatan ukuran bundel penyebaran.
Properti ini diperkenalkan di .NET SDK 7.0.100, meskipun defaultnya tidak ditentukan.
DisableImplicitFrameworkDefines
Properti DisableImplicitFrameworkDefines mengontrol apakah SDK menghasilkan simbol pra-prosesor atau tidak untuk kerangka kerja target dan platform untuk proyek .NET. Saat properti ini diatur ke false atau tidak diatur (yang merupakan nilai default) simbol pra-prosesor dihasilkan untuk:
- Kerangka kerja tanpa versi (
NETFRAMEWORK,NETSTANDARD,NET) - Kerangka kerja dengan versi (
NET48,NETSTANDARD2_0,NET6_0) - Kerangka kerja dengan batas minimum versi (
NET48_OR_GREATER,NETSTANDARD2_0_OR_GREATER,NET6_0_OR_GREATER)
Untuk mengetahui informasi selengkapnya tentang moniker kerangka kerja target dan simbol pra-prosesor implisit ini, lihat Kerangka kerja target.
Selain itu, jika Anda menentukan kerangka kerja target khusus sistem operasi dalam proyek (misalnya net6.0-android), simbol praprosesor berikut dibuat:
- Platform tanpa versi (
ANDROID,IOS,WINDOWS) - Platform dengan versi (
IOS15_1) - Kerangka kerja dengan batas minimum versi (
IOS15_1_OR_GREATER)
Untuk mengetahui informasi selengkapnya tentang moniker kerangka kerja target khusus sistem operasi, lihat TFM khusus OS.
Terakhir, jika kerangka kerja target Anda menyiratkan dukungan untuk kerangka kerja target yang lebih lama, simbol prapemroses untuk kerangka kerja lama tersebut dikeluarkan. Misalnya, net6.0menyiratkan dukungan untuk net5.0 dan sebagainya sepanjang perjalanan kembali ke .netcoreapp1.0. Jadi, untuk setiap kerangka kerja target ini, simbol Kerangka Kerja dengan batas minimum versi akan ditentukan.
DocumentationFile
Properti DocumentationFile memungkinkan Anda menentukan nama file untuk file XML yang berisi dokumentasi untuk pustaka. Agar IntelliSense berfungsi dengan benar dengan dokumentasi Anda, nama file harus sama dengan nama rakitan dan harus berada di direktori yang sama dengan rakitan. Jika Anda tidak menentukan properti ini tetapi mengatur GenerateDocumentationFile ke true, nama file dokumentasi default ke nama rakitan Anda tetapi dengan ekstensi file .xml. Karena alasan ini, sering kali lebih mudah untuk menghapus properti ini dan menggunakan properti GenerateDocumentationFile sebagai gantinya.
Jika Anda menentukan properti ini tetapi mengatur GenerateDocumentationFile ke false, kompilator tidak membuat file dokumentasi. Jika Anda menentukan properti ini dan menghapus properti GenerateDocumentationFile, kompilator benar-benar membuat file dokumentasi.
<PropertyGroup>
<DocumentationFile>path/to/file.xml</DocumentationFile>
</PropertyGroup>
EmbeddedResourceUseDependentUponConvention
Properti EmbeddedResourceUseDependentUponConvention menentukan apakah nama file manifes sumber daya dibuat dari informasi jenis dalam file sumber yang terletak bersama dengan file sumber daya. Misalnya, jika Form1.resx berada di folder yang sama dengan Form1.cs, dan EmbeddedResourceUseDependentUponConvention diatur ke true, file .resources yang dibuat mengambil namanya dari jenis pertama yang ditentukan dalam Form1.cs. Jika MyNamespace.Form1 adalah jenis pertama yang ditentukan dalam Form1.cs, nama file yang dihasilkan adalah MyNamespace.Form1.resources.
Note
Jika metadata LogicalName, ManifestResourceName, atau DependentUpon ditentukan untuk item EmbeddedResource, nama file manifes yang dibuat untuk file sumber daya tersebut didasarkan pada metadata tersebut sebagai gantinya.
Secara default, dalam proyek .NET baru yang menargetkan .NET Core 3.0 atau versi yang lebih baru, properti ini diatur ke true. Jika diatur ke false, dan tidak ada metadata LogicalName, ManifestResourceName, atau DependentUpon ditentukan untuk item EmbeddedResource dalam file proyek, nama file manifes sumber daya didasarkan pada namespace layanan akar untuk proyek dan jalur file relatif ke file .resx. Untuk mengetahui informasi selengkapnya, lihat Cara file manifes sumber daya diberi nama.
<PropertyGroup>
<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
</PropertyGroup>
EnablePreviewFeatures
Properti EnablePreviewFeatures menentukan apakah proyek Anda bergantung pada API atau rakitan apa pun yang dihiasi dengan atribut RequiresPreviewFeaturesAttribute. Atribut ini digunakan untuk menandakan bahwa API atau rakitan menggunakan fitur yang dianggap dalam pratinjau untuk versi SDK yang digunakan. Fitur pratinjau tidak didukung dan dapat dihapus dalam versi mendatang. Untuk mengaktifkan penggunaan fitur pratinjau, atur properti ke True.
<PropertyGroup>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
</PropertyGroup>
Saat proyek berisi properti ini diatur ke True, atribut tingkat rakitan berikut ditambahkan ke file AssemblyInfo.cs:
[assembly: RequiresPreviewFeatures]
Penganalisis memperingatkan apakah atribut ini ada pada dependensi untuk proyek yang mana EnablePreviewFeatures tidak diatur ke True.
Penulis pustaka yang ingin mengirim rakitan pratinjau harus mengatur properti ini ke True. Jika rakitan perlu dikirim dengan campuran API pratinjau dan non-pratinjau, lihat bagian GenerateRequiresPreviewFeaturesAttribute di bawah ini.
EnableWindowsTargeting
Atur properti EnableWindowsTargeting ke true untuk membangun aplikasi Windows (misalnya, aplikasi Formulir Windows atau Windows Presentation Foundation) di platform non-Windows. Jika Anda tidak mengatur properti ini ke true, Anda akan mendapatkan NETSDK1100 peringatan build. Kesalahan ini terjadi karena penargetan dan paket runtime tidak diunduh secara otomatis pada platform yang tidak didukung. Dengan mengatur properti ini, paket tersebut diunduh saat penargetan silang.
Note
Properti ini saat ini disarankan untuk memungkinkan pengembangan pada platform non-Windows. Tetapi ketika aplikasi siap dirilis, aplikasi harus dibangun di atas Windows. Saat dibangun di platform non-Windows, output mungkin tidak sama seperti saat membangun di Windows. Secara khusus, executable tidak ditandai sebagai aplikasi Windows (yang berarti akan selalu meluncurkan jendela konsol) dan tidak akan memiliki ikon yang disematkan.
<PropertyGroup>
<EnableWindowsTargeting>true</EnableWindowsTargeting>
</PropertyGroup>
GenerateDocumentationFile
Properti GenerateDocumentationFile mengontrol apakah kompilator menghasilkan file dokumentasi XML untuk pustaka Anda. Jika Anda mengatur properti ini ke true dan tidak menentukan nama file melalui properti DocumentationFile, file XML yang dihasilkan ditempatkan di direktori output yang sama dengan rakitan Anda dan memiliki nama file yang sama (tetapi dengan ekstensi .xml).
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
Untuk informasi selengkapnya tentang menghasilkan dokumentasi dari komentar kode, lihat komentar dokumentasi XML (C#), Document kode Anda dengan XML (Visual Basic), atau Document kode Anda dengan XML (F#).
GenerateRequiresPreviewFeaturesAttribute
Properti GenerateRequiresPreviewFeaturesAttribute terkait erat dengan properti EnablePreviewFeatures. Jika pustaka Anda menggunakan fitur pratinjau tetapi Anda tidak ingin seluruh rakitan ditandai dengan atribut RequiresPreviewFeaturesAttribute, yang akan mengharuskan konsumen mengaktifkan fitur pratinjau, atur properti ini ke False.
<PropertyGroup>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
<GenerateRequiresPreviewFeaturesAttribute>False</GenerateRequiresPreviewFeaturesAttribute>
</PropertyGroup>
Important
Jika mengatur properti GenerateRequiresPreviewFeaturesAttribute ke False, Anda harus yakin untuk menghias semua API publik yang mengandalkan fitur pratinjau dengan RequiresPreviewFeaturesAttribute.
OptimizeImplicitlyTriggeredBuild
Untuk mempercepat waktu build, build yang secara implisit dipicu oleh Visual Studio melewati analisis kode, termasuk analisis nullable. Visual Studio memicu build implisit saat Anda menjalankan pengujian, misalnya. Namun, build implisit hanya dioptimalkan jika TreatWarningsAsErrors bukan true. Jika Anda telah mengatur TreatWarningsAsErrors ke true tetapi masih ingin build yang dipicu secara implisit dioptimalkan, Anda dapat mengatur OptimizeImplicitlyTriggeredBuild ke True. Untuk menonaktifkan pengoptimalan build untuk build yang dipicu secara implisit, atur OptimizeImplicitlyTriggeredBuild ke False.
<PropertyGroup>
<OptimizeImplicitlyTriggeredBuild>True</OptimizeImplicitlyTriggeredBuild>
</PropertyGroup>
DisableRuntimeMarshalling
Properti memungkinkan DisableRuntimeMarshalling Anda menentukan bahwa Anda ingin menonaktifkan dukungan marshalling runtime untuk proyek Anda. Jika properti ini diatur ke true, maka DisableRuntimeMarshallingAttribute ditambahkan ke rakitan dan P/Invokes atau interop berbasis delegasi akan mengikuti aturan untuk marshalling runtime yang dinonaktifkan.
<PropertyGroup>
<DisableRuntimeMarshalling>True</DisableRuntimeMarshalling>
</PropertyGroup>
BuildWithNetFrameworkHostedCompiler
Menentukan BuildWithNetFrameworkHostedCompiler=true setara dengan menentukan RoslynCompilerType=FrameworkPackage. Untuk informasi selengkapnya, lihat RoslynCompilerType.
Menentukan BuildWithNetFrameworkHostedCompiler=false memastikan keikutsertaan RoslynCompilerType=FrameworkPackage otomatis tidak terjadi.
Jika RoslynCompilerType ditentukan secara eksplisit, BuildWithNetFrameworkHostedCompiler tidak berpengaruh.
RoslynCompilerType
Properti RoslynCompilerType mengontrol versi pengkompilasi C# atau Visual Basic. Nilai berikut dikenali:
-
Core: Gunakan pengkompilasi yang dilengkapi dengan SDK .NET. Ini adalah default sejak .NET 10, bahkan saat menggunakan .NET Framework MSBuild. -
Framework: Gunakan pengkompilasi yang dilengkapi dengan .NET Framework MSBuild. -
FrameworkPackage: Saat menggunakan .NET Framework MSBuild, unduh dan gunakan paket dengan pengkompilasi .NET Framework yang sesuai dengan versi SDK .NET.
Properti penyertaan item default
Properti MSBuild berikut ini didokumentasikan di bagian ini:
- DefaultItemExcludesInProjectFolder
- DefaultItemExcludes
- EnableDefaultCompileItems
- EnableDefaultEmbeddedResourceItems
- EnableDefaultItems
- EnableDefaultNoneItems
Untuk mengetahui informasi selengkapnya, lihat Penyertaan dan pengecualian default.
DefaultItemExcludes
Gunakan properti DefaultItemExcludes untuk menentukan pola glob untuk file dan folder yang harus dikecualikan dari penyertaan, pengecualian, dan penghapusan glob. Secara default, folder ./bin dan ./obj dikecualikan dari pola glob.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/*.myextension</DefaultItemExcludes>
</PropertyGroup>
Note
Properti DefaultItemExcludes mengecualikan file dan folder agar tidak ditonton oleh dotnet watch. Untuk informasi selengkapnya, lihat Mengabaikan folder dan file tertentu dari dotnet watch.
DefaultItemExcludesInProjectFolder
Gunakan properti DefaultItemExcludesInProjectFolder untuk menentukan pola glob untuk file dan folder di folder proyek yang harus dikecualikan dari penyertaan, pengecualian, dan penghapusan glob. Secara default, folder yang dimulai dengan titik (.), seperti .git dan .vs, dikecualikan dari pola glob.
Properti ini sangat mirip dengan properti DefaultItemExcludes, kecuali hanya mempertimbangkan file dan folder di folder proyek. Saat pola glob secara tidak sengaja akan mencocokkan item di luar folder proyek dengan jalur relatif, gunakan properti DefaultItemExcludesInProjectFolder alih-alih properti DefaultItemExcludes.
<PropertyGroup>
<DefaultItemExcludesInProjectFolder>$(DefaultItemExcludesInProjectFolder);**/myprefix*/**</DefaultItemExcludesInProjectFolder>
</PropertyGroup>
EnableDefaultItems
Properti EnableDefaultItems mengontrol apakah item kompilasi, item sumber daya yang disematkan, dan item None disertakan secara implisit dalam proyek. Nilai defaultnya adalah true. Atur properti EnableDefaultItems ke false untuk menonaktifkan semua penyertaan file implisit.
<PropertyGroup>
<EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>
EnableDefaultCompileItems
Properti EnableDefaultCompileItems mengontrol apakah item kompilasi disertakan secara implisit dalam proyek. Nilai defaultnya adalah true. Atur properti EnableDefaultCompileItems ke false untuk menonaktifkan penyertaan implisit *.cs dan file ekstensi bahasa lainnya.
<PropertyGroup>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
EnableDefaultEmbeddedResourceItems
Properti EnableDefaultEmbeddedResourceItems mengontrol apakah item sumber daya tersemat disertakan secara implisit dalam proyek. Nilai defaultnya adalah true. Atur EnableDefaultEmbeddedResourceItems properti ke false untuk menonaktifkan penyertaan implisit file sumber daya tersemat.
<PropertyGroup>
<EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
</PropertyGroup>
EnableDefaultNoneItems
Properti EnableDefaultNoneItems mengontrol apakah item None (file yang tidak memiliki peran dalam proses build) secara implisit disertakan dalam proyek. Nilai defaultnya adalah true. Atur properti EnableDefaultNoneItems ke false untuk menonaktifkan penyertaan implisit item None.
<PropertyGroup>
<EnableDefaultNoneItems>false</EnableDefaultNoneItems>
</PropertyGroup>
Properti analisis kode
Properti MSBuild berikut ini didokumentasikan di bagian ini:
- AnalysisLevel
- Kategori AnalysisLevel<>
- AnalysisMode
- Kategori Mode Analisis<>
- CodeAnalysisTreatWarningsAsErrors
- EnableNETAnalyzers
- EnforceCodeStyleInBuild
- _SkipUpgradeNetAnalyzersNuGetWarning
AnalysisLevel
Properti AnalysisLevel memungkinkan Anda menentukan sekumpulan penganalisis kode untuk dijalankan sesuai dengan rilis .NET. Setiap rilis .NET memiliki sekumpulan aturan analisis kode. Dari set tersebut, aturan yang diaktifkan secara default untuk rilis tersebut menganalisis kode Anda. Misalnya, jika Anda meningkatkan dari .NET 8 ke .NET 9 tetapi tidak ingin kumpulan aturan analisis kode default berubah, atur AnalysisLevel ke 8.
<PropertyGroup>
<AnalysisLevel>8</AnalysisLevel>
</PropertyGroup>
Secara opsional, Anda dapat menentukan nilai gabungan untuk properti ini yang juga menentukan seberapa agresif untuk mengaktifkan aturan. Nilai campuran mengambil formulir <version>-<mode>, yang mana nilai <mode> adalah salah satu nilai AnalysisMode. Contoh berikut menggunakan versi penganalisis previewrecommended kode, dan mengaktifkan kumpulan aturan.
<PropertyGroup>
<AnalysisLevel>preview-recommended</AnalysisLevel>
</PropertyGroup>
Nilai default:
- Jika proyek Anda menargetkan .NET 5 atau yang lebih baru, atau jika Anda telah menambahkan properti AnalysisMode, nilai defaultnya adalah
latest. - Jika tidak, properti ini dihilangkan kecuali Anda menambahkannya ke file proyek secara eksplisit.
Tabel berikut ini menunjukkan nilai yang dapat Anda tentukan.
| Value | Meaning |
|---|---|
latest |
Penganalisis kode terbaru yang telah dirilis digunakan. Ini adalah default. |
latest-<mode> |
Penganalisis kode terbaru yang telah dirilis digunakan. Nilai <mode> menentukan aturan mana yang diaktifkan. |
preview |
Penganalisis kode terbaru digunakan, meskipun masih dalam pratinjau. |
preview-<mode> |
Penganalisis kode terbaru digunakan, meskipun masih dalam pratinjau. Nilai <mode> menentukan aturan mana yang diaktifkan. |
10.0 |
Seperangkat aturan yang tersedia untuk rilis .NET 10 digunakan, bahkan jika aturan yang lebih baru tersedia. |
10.0-<mode> |
Seperangkat aturan yang tersedia untuk rilis .NET 10 digunakan, bahkan jika aturan yang lebih baru tersedia. Nilai <mode> menentukan aturan mana yang diaktifkan. |
10 |
Seperangkat aturan yang tersedia untuk rilis .NET 10 digunakan, bahkan jika aturan yang lebih baru tersedia. |
10-<mode> |
Seperangkat aturan yang tersedia untuk rilis .NET 10 digunakan, bahkan jika aturan yang lebih baru tersedia. Nilai <mode> menentukan aturan mana yang diaktifkan. |
9.0 |
Seperangkat aturan yang tersedia untuk rilis .NET 9 digunakan, bahkan jika aturan yang lebih baru tersedia. |
9.0-<mode> |
Seperangkat aturan yang tersedia untuk rilis .NET 9 digunakan, bahkan jika aturan yang lebih baru tersedia. Nilai <mode> menentukan aturan mana yang diaktifkan. |
9 |
Seperangkat aturan yang tersedia untuk rilis .NET 9 digunakan, bahkan jika aturan yang lebih baru tersedia. |
9-<mode> |
Seperangkat aturan yang tersedia untuk rilis .NET 9 digunakan, bahkan jika aturan yang lebih baru tersedia. Nilai <mode> menentukan aturan mana yang diaktifkan. |
8.0 |
Seperangkat aturan yang tersedia untuk rilis .NET 8 digunakan, bahkan jika aturan yang lebih baru tersedia. |
8.0-<mode> |
Seperangkat aturan yang tersedia untuk rilis .NET 8 digunakan, bahkan jika aturan yang lebih baru tersedia. Nilai <mode> menentukan aturan mana yang diaktifkan. |
8 |
Seperangkat aturan yang tersedia untuk rilis .NET 8 digunakan, bahkan jika aturan yang lebih baru tersedia. |
8-<mode> |
Seperangkat aturan yang tersedia untuk rilis .NET 8 digunakan, bahkan jika aturan yang lebih baru tersedia. Nilai <mode> menentukan aturan mana yang diaktifkan. |
Note
- Jika Anda mengatur EnforceCodeStyleInBuild ke
true, properti ini memengaruhi aturan gaya kode (IDEXXXX) (selain aturan kualitas kode). - Jika menetapkan nilai gabungan untuk
AnalysisLevel, Anda tidak perlu menentukan AnalysisMode. Namun, jika Anda melakukannya,AnalysisLevellebih diutamakan daripadaAnalysisMode. - Properti ini tidak berpengaruh pada analisis kode dalam proyek yang tidak mereferensikan proyek SDK, misalnya, proyek warisan .NET Framework yang mereferensikan Microsoft. Paket CodeAnalysis.NetAnalyzers NuGet. Untuk informasi selengkapnya, lihat Mengaktifkan analisis kode dalam proyek warisan.
Kategori AnalysisLevel<>
Properti ini sama dengan AnalysisLevel, kecuali hanya berlaku untuk kategori aturan analisis kode tertentu. Properti ini memungkinkan Anda menggunakan versi penganalisis kode yang berbeda untuk kategori tertentu, atau mengaktifkan atau menonaktifkan aturan pada tingkat yang berbeda dengan kategori aturan lainnya. Jika Anda menghilangkan properti ini untuk kategori aturan tertentu, properti tersebut default ke nilai AnalysisLevel. Nilai yang tersedia sama dengan nilai untuk AnalysisLevel.
<PropertyGroup>
<AnalysisLevelSecurity>preview</AnalysisLevelSecurity>
</PropertyGroup>
<PropertyGroup>
<AnalysisLevelSecurity>preview-recommended</AnalysisLevelSecurity>
</PropertyGroup>
Tabel berikut mencantumkan nama properti untuk setiap kategori aturan.
| Nama properti | Kategori aturan |
|---|---|
<AnalysisLevelDesign> |
Aturan desain |
<AnalysisLevelDocumentation> |
Aturan dokumentasi |
<AnalysisLevelGlobalization> |
Aturan globalisasi |
<AnalysisLevelInteroperability> |
Aturan portabilitas dan interoperabilitas |
<AnalysisLevelMaintainability> |
Aturan pemeliharaan |
<AnalysisLevelNaming> |
Aturan penamaan |
<AnalysisLevelPerformance> |
Aturan kinerja |
<AnalysisLevelSingleFile> |
Aturan aplikasi file tunggal |
<AnalysisLevelReliability> |
Aturan keandalan |
<AnalysisLevelSecurity> |
Aturan keamanan |
<AnalysisLevelStyle> |
Aturan gaya kode (IDEXXXX) |
<AnalysisLevelUsage> |
Aturan penggunaan |
AnalysisMode
SDK .NET dikirim dengan semua aturan kualitas kode "CA". Secara default, hanya aturan some yang diaktifkan sebagai peringatan build di setiap rilis .NET. Properti AnalysisMode ini memungkinkan Anda menyesuaikan sekumpulan aturan yang diaktifkan secara default. Anda dapat beralih ke mode analisis yang lebih agresif yang mana Anda dapat menolak aturan satu per satu, atau mode analisis yang lebih konservatif tempat Anda dapat memilih aturan tertentu. Misalnya, jika Anda ingin mengaktifkan semua aturan sebagai peringatan build, atur nilainya ke All.
<PropertyGroup>
<AnalysisMode>All</AnalysisMode>
</PropertyGroup>
Tabel berikut ini memperlihatkan nilai opsi yang tersedia. Nilai tersebut tercantum dalam urutan peningkatan jumlah aturan yang diaktifkan.
| Value | Description |
|---|---|
None |
Semua aturan dinonaktifkan. Anda dapat secara selektif memilih aturan individual untuk mengaktifkannya. |
Default |
Mode default, di mana aturan tertentu diaktifkan sebagai peringatan build, aturan tertentu diaktifkan sebagai saran Visual Studio IDE, dan sisanya dinonaktifkan. |
Minimum |
Mode yang lebih agresif daripada Default mode. Saran tertentu yang sangat disarankan untuk penegakan build diaktifkan sebagai peringatan build. Untuk melihat aturan mana yang disertakan, periksa %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET. File Sdk/analyzers/build/config/analysislevel_[level]_minimum.globalconfig. (Untuk .NET 7 dan versi yang lebih lama, ekstensi file .editorconfig.) |
Recommended |
Mode yang lebih agresif daripada Minimum mode, di mana lebih banyak aturan diaktifkan sebagai peringatan build. Untuk melihat aturan mana yang disertakan, periksa %ProgramFiles%/dotnet/sdk/[version]/Sdks/Microsoft.NET. File Sdk/analyzers/build/config/analysislevel_[level]_recommended.globalconfig. (Untuk .NET 7 dan versi yang lebih lama, ekstensi file .editorconfig.) |
All |
Semua aturan diaktifkan sebagai peringatan* build. Anda dapat secara selektif keluar dari aturan individual untuk menonaktifkannya. * Aturan berikut tidak diaktifkan dengan mengatur AnalysisMode ke All atau dengan mengatur AnalysisLevel ke latest-all: CA1017, CA1045, CA1005, CA1014, CA1060, CA1021, dan aturan penganalisis metrik kode (CA1501, CA1502, CA1505, CA1506, dan CA1509). Aturan warisan ini mungkin tidak digunakan lagi dalam versi mendatang. Namun, Anda masih dapat mengaktifkannya satu per satu menggunakan dotnet_diagnostic.CAxxxx.severity = <severity> entri. |
Note
- Jika Anda mengatur EnforceCodeStyleInBuild ke
true, properti ini memengaruhi aturan gaya kode (IDEXXXX) (selain aturan kualitas kode). - Jika Anda menggunakan nilai gabungan untuk AnalysisLevel, misalnya,
<AnalysisLevel>9-recommended</AnalysisLevel>, Anda dapat menghilangkan properti ini sepenuhnya. Namun, jika Anda menentukan kedua properti,AnalysisLevellebih diutamakan daripadaAnalysisMode.
Kategori Mode Analisis<>
Properti ini sama dengan AnalysisMode, kecuali hanya berlaku untuk kategori aturan analisis kode tertentu. Properti ini memungkinkan Anda mengaktifkan atau menonaktifkan aturan pada tingkat yang berbeda dengan kategori aturan lainnya. Jika Anda menghilangkan properti ini untuk kategori aturan tertentu, properti tersebut default ke nilai AnalysisMode. Nilai yang tersedia sama dengan nilai untuk AnalysisMode.
<PropertyGroup>
<AnalysisModeSecurity>All</AnalysisModeSecurity>
</PropertyGroup>
Tabel berikut mencantumkan nama properti untuk setiap kategori aturan.
| Nama properti | Kategori aturan |
|---|---|
<AnalysisModeDesign> |
Aturan desain |
<AnalysisModeDocumentation> |
Aturan dokumentasi |
<AnalysisModeGlobalization> |
Aturan globalisasi |
<AnalysisModeInteroperability> |
Aturan portabilitas dan interoperabilitas |
<AnalysisModeMaintainability> |
Aturan pemeliharaan |
<AnalysisModeNaming> |
Aturan penamaan |
<AnalysisModePerformance> |
Aturan kinerja |
<AnalysisModeSingleFile> |
Aturan aplikasi file tunggal |
<AnalysisModeReliability> |
Aturan keandalan |
<AnalysisModeSecurity> |
Aturan keamanan |
<AnalysisModeStyle> |
Aturan gaya kode (IDEXXXX) |
<AnalysisModeUsage> |
Aturan penggunaan |
CodeAnalysisTreatWarningsAsErrors
Properti CodeAnalysisTreatWarningsAsErrors memungkinkan Anda mengonfigurasi apakah peringatan analisis kualitas kode (CAxxxx) harus diperlakukan sebagai peringatan dan merusak build. Jika Anda menggunakan bendera -warnaserror saat membuat proyek, .NET analisis kualitas kode peringatan juga diperlakukan sebagai kesalahan. Jika tidak ingin peringatan analisis kualitas kode diperlakukan sebagai kesalahan, Anda dapat mengatur properti MSBuild CodeAnalysisTreatWarningsAsErrors ke false dalam file proyek Anda.
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
EnableNETAnalyzers
.NET analisis kualitas kode diaktifkan, secara default, untuk proyek yang menargetkan .NET 5 atau versi yang lebih baru. Jika Anda mengembangkan menggunakan .NET 5+ SDK, Anda dapat mengaktifkan analisis kode .NET untuk proyek gaya SDK yang menargetkan versi .NET sebelumnya dengan mengatur properti EnableNETAnalyzers ke true. Untuk menonaktifkan analisis kode dalam proyek apa pun, atur properti ini ke false.
<PropertyGroup>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
</PropertyGroup>
Note
Properti ini berlaku khusus untuk penganalisis bawaan di .NET 5+ SDK. Ini tidak boleh digunakan saat Anda menginstal paket analisis kode NuGet.
EnforceCodeStyleInBuild
.NET analisis gaya kode dinonaktifkan, secara default, pada build untuk semua proyek .NET. Anda dapat mengaktifkan analisis gaya kode untuk proyek .NET dengan mengatur properti EnforceCodeStyleInBuild ke true.
(Tetapi karena alasan performa, beberapa aturan gaya kode yang hanya berlaku di Visual Studio IDE tidak akan dijalankan.)
<PropertyGroup>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
Semua aturan gaya kode yang dikonfigurasi menjadi peringatan atau kesalahan akan dijalankan pada pelanggaran build dan laporan.
_SkipUpgradeNetAnalyzersNuGetWarning
Properti _SkipUpgradeNetAnalyzersNuGetWarning memungkinkan Anda mengonfigurasi apakah Anda menerima peringatan jika Anda menggunakan penganalisis kode dari paket NuGet yang kedaluarsa jika dibandingkan dengan penganalisis kode di SDK .NET terbaru. Peringatan terlihat mirip dengan:
SDK .NET memiliki penganalisis yang lebih baru dengan versi '6.0.0' daripada versi '5.0.3' dari 'Microsoft' versi apa. Paket CodeAnalysis.NetAnalyzers menyediakan. Perbarui atau hapus referensi paket ini.
Untuk menghapus peringatan ini dan terus menggunakan versi penganalisis kode dalam paket NuGet, atur _SkipUpgradeNetAnalyzersNuGetWarning ke true dalam file proyek Anda.
<PropertyGroup>
<_SkipUpgradeNetAnalyzersNuGetWarning>true</_SkipUpgradeNetAnalyzersNuGetWarning>
</PropertyGroup>
Properti konfigurasi runtime
Anda dapat mengonfigurasi beberapa perilaku runtime dengan menentukan properti MSBuild dalam file proyek aplikasi. Untuk informasi tentang cara lain mengonfigurasi perilaku runtime, lihat Pengaturan konfigurasi runtime.
- AutoreleasePoolSupport
- ConcurrentGarbageCollection
- InvariantGlobalization
- PredefinedCulturesOnly
- RetainVMGarbageCollection
- ServerGarbageCollection
- ThreadPoolMaxThreads
- ThreadPoolMinThreads
- TieredCompilation
- TieredCompilationQuickJit
- TieredCompilationQuickJitForLoops
- TieredPGO
- UseWindowsThreadPool
AutoreleasePoolSupport
Properti AutoreleasePoolSupport mengonfigurasi apakah setiap utas terkelola menerima NSAutoreleasePool implisit saat berjalan pada platform macOS yang didukung. Untuk informasi selengkapnya, lihat AutoreleasePool untuk utas terkelola.
<PropertyGroup>
<AutoreleasePoolSupport>true</AutoreleasePoolSupport>
</PropertyGroup>
ConcurrentGarbageCollection
Properti ConcurrentGarbageCollection mengonfigurasi apakah pengumpulan sampah latar belakang (bersamaan) diaktifkan. Atur nilai ke false untuk menonaktifkan pengumpulan sampah latar belakang. Untuk mengetahui informasi selengkapnya, lihat Pengumpulan sampah latar belakang.
<PropertyGroup>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
InvariantGlobalization
Properti InvariantGlobalization mengonfigurasi apakah aplikasi berjalan dalam mode globaliasi-invarian, yang berarti tidak memiliki akses ke data khusus kultur. Atur nilai ke true untuk dijalankan dalam mode globalisasi-invarian. Untuk mengetahui informasi selengkapnya, lihat Mode Invarian.
<PropertyGroup>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
PredefinedCulturesOnly
Dalam .NET 6 dan versi yang lebih baru, properti PredefinedCulturesOnly mengonfigurasi apakah aplikasi dapat membuat budaya selain budaya yang invarian saat globalization-invariant mode diaktifkan. Defaultnya adalah true. Atur nilai ke false untuk memungkinkan pembuatan budaya baru apa pun dalam mode globalisasi-invarian.
<PropertyGroup>
<PredefinedCulturesOnly>false</PredefinedCulturesOnly>
</PropertyGroup>
Untuk mengetahui informasi selengkapnya, lihat Pembuatan kultur dan pemetaan kasus dalam mode globalisasi-invarian.
RetainVMGarbageCollection
Properti RetainVMGarbageCollection mengonfigurasi pengumpul sampah untuk menempatkan segmen memori yang dihapus pada daftar siaga untuk penggunaan di masa mendatang atau melepaskannya. Mengatur nilai untuk true memberi tahu pengumpul sampah untuk menempatkan segmen pada daftar siaga. Untuk mengetahui informasi selengkapnya, lihat Mempertahankan VM.
<PropertyGroup>
<RetainVMGarbageCollection>true</RetainVMGarbageCollection>
</PropertyGroup>
ServerGarbageCollection
Properti ServerGarbageCollection mengonfigurasi apakah aplikasi menggunakan pengumpulan sampah stasiun kerja atau pengumpulan sampah server. Atur nilai ke true untuk menggunakan pengumpulan sampah server. Untuk mengetahui informasi selengkapnya, lihat Stasiun kerja vs. server.
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
ThreadPoolMaxThreads
Properti ThreadPoolMaxThreads mengonfigurasi jumlah maksimum rangkaian untuk kumpulan rangkaian pekerja. Untuk mengetahui informasi selengkapnya, lihat Rangkaian maksimum.
<PropertyGroup>
<ThreadPoolMaxThreads>20</ThreadPoolMaxThreads>
</PropertyGroup>
ThreadPoolMinThreads
Properti ThreadPoolMinThreads mengonfigurasi jumlah minimum rangkaian untuk kumpulan rangkaian pekerja. Untuk mengetahui informasi selengkapnya, lihat Rangkaian minimum.
<PropertyGroup>
<ThreadPoolMinThreads>4</ThreadPoolMinThreads>
</PropertyGroup>
TieredCompilation
Properti TieredCompilation mengonfigurasi apakah kompilator just-in-time (JIT) menggunakan kompilasi bertingkat. Atur nilai ke false untuk menonaktifkan kompilasi bertingkat. Untuk mengetahui informasi selengkapnya, lihat Kompilasi bertingkat.
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
TieredCompilationQuickJit
Properti TieredCompilationQuickJit mengonfigurasi apakah kompilator JIT menggunakan JIT cepat. Atur nilai ke false untuk menonaktifkan JIT cepat. Untuk mengetahui informasi selengkapnya, lihat JIT cepat.
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
TieredCompilationQuickJitForLoops
Properti TieredCompilationQuickJitForLoops mengonfigurasi apakah kompilator JIT menggunakan JIT cepat pada metode yang berisi perulangan. Atur nilai ke true untuk mengaktifkan JIT cepat pada metode yang berisi perulangan. Untuk mengetahui informasi selengkapnya, lihat JIT cepat untuk perulangan.
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
TieredPGO
Properti TieredPGO mengontrol apakah pengoptimalan yang dipandu profil dinamis atau berjenjang (PGO) diaktifkan. Atur nilai ke true untuk mengaktifkan PGO bertingkat. Untuk informasi selengkapnya, lihat Pengoptimalan yang dipandu profil.
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
UseWindowsThreadPool
Properti UseWindowsThreadPool mengonfigurasi apakah manajemen utas kumpulan utas didelegasikan ke kumpulan utas Windows (hanya Windows). Nilai defaultnya adalah false, dalam hal ini kumpulan utas .NET digunakan. Untuk informasi selengkapnya, lihat kumpulan utas Windows.
<PropertyGroup>
<UseWindowsThreadPool>true</UseWindowsThreadPool>
</PropertyGroup>
Properti terkait referensi
Properti MSBuild berikut ini didokumentasikan di bagian ini:
- AssetTargetFallback
- DisableImplicitFrameworkReferences
- DisableTransitiveFrameworkReferenceDownloads
- DisableTransitiveProjectReferences
- ManagePackageVersionsCentrally
- Properti terkait pemulihan
- UseMauiEssentials
- ValidateExecutableReferencesMatchSelfContained
AssetTargetFallback
Properti AssetTargetFallback memungkinkan Anda menentukan versi kerangka kerja tambahan yang kompatibel untuk referensi proyek dan paket NuGet. Misalnya, jika Anda menentukan dependensi paket menggunakan PackageReference tetapi paket tersebut tidak berisi aset yang kompatibel dengan TargetFramework proyek, properti AssetTargetFallback mulai diputar. Kompatibilitas paket yang direferensikan diperiksa ulang menggunakan setiap framework sasaran yang ditentukan dalam AssetTargetFallback. Properti ini menggantikan PackageTargetFallback properti yang tidak digunakan lagi.
Anda dapat mengatur properti AssetTargetFallback ke satu atau beberapa versi kerangka kerja target.
<PropertyGroup>
<AssetTargetFallback>net461</AssetTargetFallback>
</PropertyGroup>
DisableImplicitFrameworkReferences
Properti DisableImplicitFrameworkReferences mengontrol item FrameworkReference implisit saat menargetkan .NET Core 3.0 dan versi yang lebih baru. Saat menargetkan .NET Core 2.1 atau .NET Standard 2.0 dan versi yang lebih lama, ia mengontrol item implisit PackageReference ke paket dalam metapackage. (Metapackage adalah paket berbasis kerangka kerja yang hanya terdiri dari dependensi pada paket lain.) Properti ini juga mengontrol referensi implisit seperti System dan System.Core saat menargetkan .NET Framework.
Atur properti ini ke true untuk menonaktifkan item FrameworkReference implisit atau PackageReference. Jika mengatur properti ini ke true, Anda dapat menambahkan referensi eksplisit hanya ke kerangka kerja atau paket yang dibutuhkan.
<PropertyGroup>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
</PropertyGroup>
DisableTransitiveFrameworkReferenceDownloads
Atur DisableTransitiveFrameworkReferenceDownloads properti ke true untuk menghindari pengunduhan runtime tambahan dan paket penargetan yang tidak langsung dirujuk oleh proyek Anda.
<PropertyGroup>
<DisableTransitiveFrameworkReferenceDownloads>true</DisableTransitiveFrameworkReferenceDownloads>
</PropertyGroup>
DisableTransitiveProjectReferences
Properti DisableTransitiveProjectReferences mengontrol referensi proyek implisit. Atur properti ini ke true untuk menonaktifkan item implisit ProjectReference . Menonaktifkan referensi proyek implisit menghasilkan perilaku non-transitif yang mirip dengan sistem proyek warisan.
Ketika properti ini , trueproperti ini memiliki efek yang mirip dengan pengaturan PrivateAssets="All" pada semua dependensi proyek dependensi.
Jika Anda mengatur properti ini ke true, Anda dapat menambahkan referensi eksplisit hanya ke proyek yang Anda butuhkan.
<PropertyGroup>
<DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
</PropertyGroup>
ManagePackageVersionsCentrally
Properti ManagePackageVersionsCentrally diperkenalkan di .NET 7. Dengan mengaturnya ke true dalam file Directory.Packages.props di akar repositori Anda, Anda dapat mengelola dependensi umum dalam proyek Anda dari satu lokasi. Tambahkan versi untuk dependensi paket umum menggunakan PackageVersion item dalam file Directory.Packages.props . Kemudian, dalam file proyek individual, Anda dapat menghilangkan Version atribut dari item apa pun PackageReference yang merujuk ke paket yang dikelola secara terpusat.
Contoh file Directory.Packages.props :
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
...
<ItemGroup>
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
</ItemGroup>
File proyek individual:
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" />
</ItemGroup>
Untuk informasi selengkapnya, lihat manajemen paket pusat (CPM).
Properti terkait pemulihan
Memulihkan paket yang direferensikan menginstal semua dependensi langsungnya dan semua dependensi dari dependensi tersebut. Anda dapat menyesuaikan pemulihan paket dengan menentukan properti seperti RestorePackagesPath dan RestoreIgnoreFailedSources. Untuk mengetahui informasi selengkapnya tentang properti ini dan properti lainnya, lihat memulihkan target.
<PropertyGroup>
<RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>
</PropertyGroup>
UseMauiEssentials
Atur UseMauiEssentials properti ke true untuk mendeklarasikan referensi eksplisit ke proyek atau paket yang bergantung pada MAUI Essentials. Pengaturan ini memastikan bahwa proyek Anda menarik referensi kerangka kerja yang diketahui dengan benar untuk MAUI Essentials. Jika proyek Anda mereferensikan proyek yang menggunakan MAUI Essentials tetapi Anda tidak mengatur properti ini ke true, Anda mungkin mengalami peringatan NETSDK1186build .
<PropertyGroup>
<UseMauiEssentials>true</UseMauiEssentials>
</PropertyGroup>
ValidateExecutableReferencesMatchSelfContained
Properti ValidateExecutableReferencesMatchSelfContained dapat digunakan untuk menonaktifkan kesalahan yang terkait dengan referensi proyek executable. Jika .NET mendeteksi bahwa proyek yang dapat dieksekusi mandiri mereferensikan proyek yang dapat dieksekusi tergantung kerangka kerja, atau sebaliknya, proyek tersebut menghasilkan kesalahan masing-masing NETSDK1150 dan NETSDK1151. Untuk menghindari kesalahan ini saat referensi disengaja, atur ValidateExecutableReferencesMatchSelfContained properti ke false.
<PropertyGroup>
<ValidateExecutableReferencesMatchSelfContained>false</ValidateExecutableReferencesMatchSelfContained>
</PropertyGroup>
WindowsSdkPackageVersion
Properti WindowsSdkPackageVersion dapat digunakan untuk mengambil alih versi paket penargetan SDK Windows. Properti ini diperkenalkan di .NET 5, dan menggantikan penggunaan item FrameworkReference untuk tujuan ini.
<PropertyGroup>
<WindowsSdkPackageVersion>10.0.19041.18</WindowsSdkPackageVersion>
</PropertyGroup>
Note
Sebaiknya jangan mengesampingkan versi SDK Windows, karena paket penargetan SDK Windows disertakan dengan .NET 5+ SDK. Sebagai gantinya, untuk mereferensikan paket SDK Windows terbaru, perbarui versi SDK .NET Anda. Properti ini hanya boleh digunakan dalam kasus yang jarang terjadi seperti menggunakan paket pratinjau atau perlu mengambil alih versi C#/WinRT.
Properti terkait eksekusi
Properti berikut digunakan untuk meluncurkan aplikasi dengan perintah dotnet run:
RunArguments
Properti RunArguments menentukan argumen yang diteruskan ke aplikasi saat dijalankan.
<PropertyGroup>
<RunArguments>-mode dryrun</RunArguments>
</PropertyGroup>
Tip
Anda dapat menentukan argumen tambahan yang akan diteruskan ke aplikasi dengan menggunakan opsi -- untuk dotnet run.
RunWorkingDirectory
Properti RunWorkingDirectory menentukan direktori kerja untuk proses aplikasi yang akan dimulai. Ini bisa menjadi jalur absolut atau jalur yang relatif terhadap direktori proyek. Jika Anda tidak menentukan direktori, OutDir digunakan sebagai direktori kerja.
<PropertyGroup>
<RunWorkingDirectory>c:\temp</RunWorkingDirectory>
</PropertyGroup>
Properti terkait SDK
Properti MSBuild berikut ini didokumentasikan di bagian ini:
SdkAnalysisLevel
Diperkenalkan di .NET 9, properti SdkAnalysisLevel dapat digunakan untuk mengonfigurasi seberapa strict alat SDK. Ini membantu Anda mengelola tingkat peringatan SDK dalam situasi di mana Anda mungkin tidak dapat menyematkan SDK melalui global.json atau cara lain. Anda dapat menggunakan properti ini untuk memberi tahu SDK yang lebih baru untuk berulah seolah-olah itu adalah SDK yang lebih lama, sehubungan dengan alat atau fitur tertentu, tanpa harus menginstal SDK yang lebih lama.
Nilai yang diizinkan dari properti ini adalah pita fitur SDK, misalnya, 8.0.100 dan 8.0.400. Nilai default ke pita fitur SDK dari SDK yang sedang berjalan. Misalnya, untuk SDK 9.0.102, nilai yang akan digunakan adalah 9.0.100. (Untuk informasi tentang bagaimana versi SDK .NET, lihat Cara .NET diberi versi.)
<PropertyGroup>
<SdkAnalysisLevel>8.0.400</SdkAnalysisLevel>
</PropertyGroup>
Untuk informasi selengkapnya, lihat Properti dan Penggunaan Tingkat Analisis SDK.
Tabel berikut ini meringkas diagnostik dan perilaku yang terpengaruh oleh SDKAnalysisLevel.
| SDKAnalysisLevel | Description | Perilaku yang diperbarui |
|---|---|---|
| 9.0.100 | Memulihkan diagnostik sumber HTTP | Mengeluarkan kesalahan NU1302 alih-alih peringatan NU1803 . |
| 10.0.100 | Pemangkasan paket 'Pulihkan' | PrunePackageReference diaktifkan secara default untuk proyek yang menargetkan .NET 8+ atau .NET Standard 2.0+. |
| 10.0.100 | Pemecah masalah 'Pulihkan' dengan file kunci | Menggunakan resolver grafik dependensi .NET 9 yang ditingkatkan alih-alih pemecah grafik dependensi warisan (.NET 8 SDK dan yang lebih lama). |
| 10.0.100 | Perilaku 'Pulihkan' untuk PackageReference tanpa versi | Memancarkan kesalahan NU1015 alih-alih peringatan NU1603 . |
Note
Perilaku yang diaktifkan oleh nilai kedaluwarsa SdkAnalysisLevel (kedaluwarsa) setelah tiga rilis utama. Misalnya, versi 11.0.100 hanya menghormati nilai hingga 8.0.100. Dalam versi 12.0.100, fitur yang dapat, di versi sebelumnya, dinonaktifkan dengan menetapkan SdkAnalysisLevel nilai 8.0.100 tidak akan lagi dinonaktifkan.
Microsoft. Properti terkait Testing.Platform–
Properti MSBuild berikut ini didokumentasikan di bagian ini:
- IsTestingPlatformApplication
- Enable[NugetPackageNameWithoutDots]
- EnableAspireTesting
- EnableMSTestRunner
- EnableNUnitRunner
- EnablePlaywright
- GenerateTestingPlatformConfigurationFile
- GenerateTestingPlatformEntryPoint
- TestingExtensionsProfile
- TestingPlatformCaptureOutput
- TestingPlatformCommandLineArguments
- TestingPlatformDotnetTestSupport
- TestingPlatformShowTestsFailure
- UseMicrosoftTestingPlatformRunner
IsTestingPlatformApplication
Saat proyek Anda mereferensikan Microsoft. Paket Testing.Platform.MSBuild, mengatur IsTestingPlatformApplication ke true (yang juga merupakan nilai default jika tidak ditentukan) melakukan hal berikut:
- Menghasilkan titik masuk ke proyek pengujian.
- Menghasilkan file konfigurasi.
- Mendeteksi ekstensi.
Mengatur properti untuk false menonaktifkan dependensi transitif ke paket.
Dependensi transitif adalah ketika proyek yang mereferensikan proyek lain yang mereferensikan paket tertentu berulah seolah-olah mereferensikan paket. Anda biasanya akan mengatur properti ini ke false dalam proyek non-pengujian yang mereferensikan proyek pengujian. Untuk informasi selengkapnya, lihat kesalahan CS8892.
Jika proyek pengujian Anda mereferensikan MSTest, NUnit, atau xUnit, properti ini diatur ke nilai yang sama dengan EnableMSTestRunner, EnableNUnitRunner, atau UseMicrosoftTestingPlatformRunner (untuk xUnit).
Enable[NugetPackageNameWithoutDots]
Gunakan properti dengan pola Enable[NugetPackageNameWithoutDots] untuk mengaktifkan atau menonaktifkan Microsoft. Ekstensi Testing.Platform (MTP).
Misalnya, untuk mengaktifkan ekstensi crash dump (paket NuGet Microsoft. Testing.Extensions.CrashDump), atur EnableMicrosoftTestingExtensionsCrashDump ke true.
Untuk informasi selengkapnya, lihat Mengaktifkan atau menonaktifkan ekstensi.
EnableAspireTesting
Ketika Anda menggunakan proyek MSTest SDK, Anda dapat menggunakan EnableAspireTesting properti untuk membawa semua dependensi dan arahan default using yang Anda butuhkan untuk pengujian dengan Aspire dan MSTest. Properti ini tersedia di MSTest 3.4 dan versi yang lebih baru.
Untuk informasi selengkapnya, lihat Menguji dengan Aspire.
EnablePlaywright
Ketika Anda menggunakan proyek MSTest SDK, Anda dapat menggunakan EnablePlaywright properti untuk membawa semua dependensi dan arahan default using yang Anda butuhkan untuk pengujian dengan Playwright dan MSTest. Properti ini tersedia di MSTest 3.4 dan versi yang lebih baru.
Untuk informasi selengkapnya, lihat Playwright.
EnableMSTestRunner
Properti ini EnableMSTestRunner memungkinkan atau menonaktifkan penggunaan MTP, alternatif ringan dan portabel untuk VSTest. Properti ini tersedia di MSTest 3.2 dan versi yang lebih baru.
Note
Jika proyek Anda menentukan MSTest SDK, Anda tidak perlu mengatur properti ini. Ini diatur secara otomatis.
EnableNUnitRunner
Properti EnableNUnitRunner mengaktifkan atau menonaktifkan penggunaan runner NUnit. Pelari NUnit adalah alternatif ringan dan portabel untuk VSTest. Properti ini tersedia di NUnit3TestAdapter di versi 5.0 dan yang lebih baru.
UseMicrosoftTestingPlatformRunner
Properti UseMicrosoftTestingPlatformRunner mengaktifkan atau menonaktifkan penggunaan pelari MTP dalam proyek pengujian xUnit.v3 .
GenerateTestingPlatformEntryPoint
GenerateTestingPlatformEntryPoint Mengatur properti untuk false menonaktifkan pembuatan otomatis titik masuk program dalam proyek pengujian yang menggunakan MTP. Anda mungkin ingin mengatur properti ini ke false ketika Anda menentukan titik entri secara manual, atau ketika Anda mereferensikan proyek pengujian dari executable yang juga memiliki titik masuk.
Untuk informasi selengkapnya, lihat kesalahan CS8892.
Untuk mengontrol pembuatan titik masuk dalam proyek VSTest, gunakan GenerateProgramFile properti .
GenerateTestingPlatformConfigurationFile
Properti GenerateTestingPlatformConfigurationFile hanya tersedia ketika IsTestingPlatformApplication adalah true. Ini digunakan untuk mengizinkan penyalinan dan penggantian nama file konfigurasi di folder output.
TestingPlatformCaptureOutput
Properti TestingPlatformCaptureOutput mengontrol apakah semua output konsol yang ditulis dapat dieksekusi pengujian diambil dan disembunyikan dari pengguna saat Anda menggunakan dotnet test untuk menjalankan pengujian MTP. Secara default, output konsol disembunyikan. Output ini mencakup banner, informasi versi, dan informasi pengujian yang diformat. Atur properti ini ke false untuk menampilkan informasi ini bersama dengan output MSBuild.
Untuk informasi selengkapnya, lihat Menampilkan output platform lengkap.
TestingPlatformCommandLineArguments
Properti TestingPlatformCommandLineArguments memungkinkan Anda menentukan argumen baris perintah ke aplikasi pengujian saat Anda menggunakan dotnet test untuk menjalankan pengujian MTP. Cuplikan file proyek berikut menunjukkan contoh.
<PropertyGroup>
...
<TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>
TestingPlatformDotnetTestSupport
Properti TestingPlatformDotnetTestSupport memungkinkan pengujian aplikasi MTP saat menggunakan mode VSTest dari dotnet test.
Note
Jangan memanggil dotnet test solusi yang memiliki proyek VSTest dan MTP, karena skenario tersebut tidak didukung.
Untuk informasi selengkapnya, lihat Pengujian dengan 'uji dotnet'.
TestingPlatformShowTestsFailure
Properti TestingPlatformShowTestsFailure memungkinkan Anda mengontrol apakah satu kegagalan atau semua kesalahan dalam pengujian yang gagal dilaporkan saat Anda menggunakan dotnet test untuk menjalankan pengujian. Secara default, kegagalan pengujian diringkas ke dalam file .log, dan satu kegagalan per proyek pengujian dilaporkan ke MSBuild. Untuk menampilkan kesalahan per pengujian yang gagal, atur properti ini ke true dalam file proyek Anda.
TestingExtensionsProfile
Saat Anda menggunakan SDK proyek MSTest, TestingExtensionsProfile properti memungkinkan Anda memilih profil untuk digunakan. Tabel berikut ini memperlihatkan nilai yang diizinkan.
| Value | Description |
|---|---|
Default |
Mengaktifkan ekstensi yang direkomendasikan untuk versi MSTest.SDK ini. |
None |
Tidak ada ekstensi yang diaktifkan. |
AllMicrosoft |
Aktifkan semua ekstensi yang dikirim oleh Microsoft (termasuk ekstensi dengan lisensi terbatas). |
Untuk informasi selengkapnya, lihat profil MTP.
Properti terkait VSTest
Properti MSBuild berikut ini didokumentasikan di bagian ini:
IsTestProject
Properti IsTestProject diatur ke true oleh Microsoft.NET. Paket Test.Sdk NuGet. Ini menandakan apakah proyek adalah proyek pengujian VSTest sehingga diakui oleh dotnet test.
Note
Jika proyek Anda menentukan MSTest SDK, Anda tidak perlu mengatur properti ini, karena MSTest.Sdk mereferensikan Microsoft.NET. Paket Test.Sdk NuGet.
UseVSTest
Atur UseVSTest properti ke true untuk beralih dari MTP ke runner VSTest saat menggunakan proyek MSTest SDK.
Properti terkait MSTest
Properti MSBuild berikut ini didokumentasikan di bagian ini:
MSTestAnalysisMode
Properti ini memutuskan penganalisis mana yang diaktifkan pada tingkat keparahan mana. Untuk informasi selengkapnya, lihat analisis kode MSTest.
Properti terkait hosting
Properti MSBuild berikut ini didokumentasikan di bagian ini:
AppHostDotNetSearch
Properti AppHostDotNetSearch mengonfigurasi bagaimana yang dapat dieksekusi asli diproduksi untuk aplikasi akan mencari penginstalan .NET. Properti ini hanya berdampak pada executable yang dihasilkan pada publikasi, bukan build.
<PropertyGroup>
<AppHostDotNetSearch>Global</AppHostDotNetSearch>
</PropertyGroup>
Tabel berikut ini mencantumkan nilai yang valid. Anda dapat menentukan beberapa nilai, dipisahkan oleh titik koma.
| Value | Meaning |
|---|---|
AppLocal |
Folder yang dapat dieksekusi aplikasi |
AppRelative |
Jalur relatif terhadap aplikasi yang dapat dieksekusi seperti yang ditentukan oleh AppHostRelativeDotNet |
EnvironmentVariable |
DOTNET_ROOT[_<arch>] Nilai variabel lingkungan |
Global |
Lokasi penginstalan global terdaftar dan default |
Properti ini diperkenalkan di .NET 9.
AppHostRelativeDotNet
Properti AppHostRelativeDotNet memungkinkan menentukan jalur relatif untuk aplikasi yang dapat dieksekusi untuk mencari penginstalan .NET saat konfigurasi untuk melakukannya.
AppHostRelativeDotNet Mengatur properti menyiratkan yaitu AppHostDotNetSearchAppRelative. Properti ini hanya berdampak pada executable yang dihasilkan pada publikasi, bukan build.
<PropertyGroup>
<AppHostRelativeDotNet>./relative/path/to/runtime</AppHostRelativeDotNet>
</PropertyGroup>
Properti ini diperkenalkan di .NET 9.
EnableComHosting
Properti EnableComHosting menunjukkan bahwa rakitan menyediakan server COM. Mengatur EnableComHosting ke true juga menyiratkan bahwa EnableDynamicLoading adalah true.
<PropertyGroup>
<EnableComHosting>True</EnableComHosting>
</PropertyGroup>
Untuk informasi selengkapnya, lihat komponen .NET Expose ke COM.
EnableDynamicLoading
Properti EnableDynamicLoading menunjukkan bahwa rakitan adalah komponen yang dimuat secara dinamis. Komponen dapat berupa pustaka COM atau pustaka non-COM yang dapat digunakan dari host asli atau digunakan sebagai plugin. Mengatur properti ini ke true memiliki efek berikut:
- File .runtimeconfig.json dibuat.
-
RollForward diatur ke
LatestMinor. - Referensi NuGet disalin secara lokal.
<PropertyGroup>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
Properti file yang dibuat
Properti berikut menyangkut kode dalam file yang dibuat:
- CompilerGeneratedFilesOutputPath
- DisableImplicitNamespaceImports
- EmitCompilerGeneratedFiles
- ImplicitUsings
CompilerGeneratedFilesOutputPath
Properti CompilerGeneratedFilesOutputPath menentukan direktori tempat file output generator sumber ditulis ketika EmitCompilerGeneratedFiles diatur ke true. Jalur dapat absolut atau relatif terhadap direktori proyek. Jika Anda tidak mengatur properti ini, file yang dihasilkan ditempatkan dalam subdirektori yang dihasilkan di bawah jalur output menengah (biasanya obj/<configuration>/<targetframework>/generated).
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>Generated</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
Jika Anda mengatur properti ini ke jalur di dalam pohon sumber proyek Anda, file yang dihasilkan mungkin diambil sebagai file sumber oleh build mendatang. Untuk menghindari kompilasi ganda, kecualikan file yang dihasilkan dari Compile item:
<ItemGroup>
<Compile Remove="$(CompilerGeneratedFilesOutputPath)\**\*.cs" />
</ItemGroup>
DisableImplicitNamespaceImports
Properti DisableImplicitNamespaceImports dapat digunakan untuk menonaktifkan impor namespace implisit dalam proyek Visual Basic yang menargetkan .NET 6 atau versi yang lebih baru. Namespace implisit adalah namespace default yang diimpor secara global dalam proyek Visual Basic. Atur properti ini ke true untuk menonaktifkan impor namespace implisit.
<PropertyGroup>
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
</PropertyGroup>
EmitCompilerGeneratedFiles
Properti EmitCompilerGeneratedFiles mengontrol apakah file output generator sumber ditulis ke disk selama build. Atur properti ini ke true untuk mengaktifkan perilaku ini. Secara default, output generator sumber hanya ada dalam memori dan tidak ditulis ke disk.
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
</PropertyGroup>
Ketika Anda mengatur properti ini ke true, file yang dihasilkan ditempatkan dalam subdirektori yang dihasilkan di bawah jalur output menengah (biasanya obj/<configuration>/<targetframework>/generated) kecuali Anda menentukan lokasi yang berbeda menggunakan properti CompilerGeneratedFilesOutputPath .
Menulis file yang dihasilkan ke disk memungkinkan Anda memeriksanya. Hanya terapkan file yang dihasilkan ke kontrol sumber ketika Anda memiliki alasan tertentu, seperti ketika generator tidak tersedia di lingkungan build Anda atau ketika Anda perlu meninjau artefak yang dihasilkan deterministik.
ImplicitUsings
Properti ImplicitUsings dapat digunakan untuk mengaktifkan dan menonaktifkan arahan global using implisit dalam proyek C# yang menargetkan .NET 6 atau versi yang lebih baru dan C# 10 atau versi yang lebih baru. Saat fitur diaktifkan, .NET SDK menambahkan direktif global using untuk sekumpulan namespace default berdasarkan jenis proyek SDK. Atur properti ini ke true atau enable untuk mengaktifkan arahan global using implisit. Untuk menonaktifkan arahan global using implisit, hapus properti atau atur ke false atau disable.
<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
Note
Templat untuk proyek C# baru yang menargetkan .NET 6 atau yang lebih baru memiliki ImplicitUsings diatur ke enable secara default.
Untuk menentukan arahan global using eksplisit, tambahkan item Menggunakan.
Items
Item MSBuild adalah input ke dalam sistem build. Item ditentukan sesuai dengan jenisnya, yang merupakan nama elemen. Misalnya, Compile dan Reference adalah dua jenis item umum. Jenis item tambahan berikut ini disediakan oleh SDK .NET:
Anda dapat menggunakan salah satu atribut item standar, misalnya, Include dan Update, pada item ini. Gunakan Include untuk menambahkan item baru, dan gunakan Update untuk mengubah item yang sudah ada. Misalnya, Update sering digunakan untuk memodifikasi item yang secara implisit telah ditambahkan oleh SDK .NET.
AssemblyMetadata
Item AssemblyMetadata menentukan atribut rakitan AssemblyMetadataAttribute pasangan kunci-nilai. Metadata Include menjadi kunci, dan metadata Value menjadi nilai.
<ItemGroup>
<AssemblyMetadata Include="Serviceable" Value="True" />
</ItemGroup>
InternalsVisibleTo
Item InternalsVisibleTo menghasilkan atribut rakitan InternalsVisibleToAttribute untuk rakitan teman yang ditentukan.
<ItemGroup>
<InternalsVisibleTo Include="MyProject.Tests" />
</ItemGroup>
Jika rakitan teman ditandatangani, Anda dapat menentukan metadata Key opsional untuk menentukan kunci publik lengkapnya. Jika Anda tidak menentukan metadata Key dan $(PublicKey) tersedia, kunci tersebut akan digunakan. Jika tidak, tidak ada kunci publik yang ditambahkan ke atribut.
FrameworkReference
Item FrameworkReference menentukan referensi ke kerangka kerja bersama .NET.
Atribut Include menentukan ID kerangka kerja.
Cuplikan file proyek dalam contoh berikut mereferensikan kerangka kerja bersama Microsoft.AspNetCore.App.
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
PackageReference
Item PackageReference menentukan referensi ke paket NuGet.
Atribut Include menentukan ID paket. Atribut Version menentukan versi atau rentang versi. Untuk mengetahui informasi tentang cara menentukan versi minimum, versi maksimum, rentang, atau kecocokan persis, lihat Rentang versi.
Cuplikan file proyek dalam contoh berikut mereferensikan paket System.Runtime.
<ItemGroup>
<PackageReference Include="System.Runtime" Version="4.3.0" />
</ItemGroup>
Anda juga dapat mengontrol aset dependensi menggunakan metadata seperti PrivateAssets.
<ItemGroup>
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
Untuk mengetahui informasi selengkapnya, lihat Referensi paket di file proyek.
TrimmerRootAssembly
Item TrimmerRootAssembly memungkinkan Anda mengecualikan rakitan dari pemangkasan. Pemangkasan adalah proses menghapus bagian runtime yang tidak digunakan dari aplikasi yang dikemas. Dalam beberapa kasus, pemangkasan mungkin salah menghapus referensi yang diperlukan.
XML berikut mengecualikan rakitan System.Security dari pemangkasan.
<ItemGroup>
<TrimmerRootAssembly Include="System.Security" />
</ItemGroup>
Untuk mengetahui informasi selengkapnya, lihat Opsi pemangkasan.
Using
Item Using memungkinkan Anda menyertakan namespace secara global di seluruh proyek C#, sehingga Anda tidak perlu menambahkan arahan using untuk namespace di bagian atas file sumber Anda. Item ini mirip dengan item Import yang dapat digunakan untuk tujuan yang sama dalam proyek Visual Basic. Properti ini tersedia mulai dari .NET 6.
<ItemGroup>
<Using Include="My.Awesome.Namespace" />
</ItemGroup>
Anda juga dapat menggunakan item Using untuk menentukan arahan using <alias> dan using static <type> global.
<ItemGroup>
<Using Include="My.Awesome.Namespace" Alias="Awesome" />
</ItemGroup>
Contohnya:
-
<Using Include="Microsoft.AspNetCore.Http.Results" Alias="Results" />memancarkanglobal using Results = global::Microsoft.AspNetCore.Http.Results; -
<Using Include="Microsoft.AspNetCore.Http.Results" Static="True" />memancarkanglobal using static global::Microsoft.AspNetCore.Http.Results;
Untuk informasi selengkapnya, lihat using alias.
Metadata item
Selain atribut item MSBuild standar, tag metadata item berikut disediakan oleh SDK .NET:
CopyToPublishDirectory
Metadata CopyToPublishDirectory pada item MSBuild mengontrol kapan item disalin ke direktori penerbitan. Tabel berikut ini memperlihatkan nilai yang diizinkan.
| Value | Description |
|---|---|
PreserveNewest |
Hanya menyalin item jika telah berubah di lokasi sumber. |
IfDifferent |
Hanya menyalin item jika telah berubah baik di lokasi sumber atau target. Pengaturan ini berguna untuk situasi di mana Anda perlu mengatur ulang perubahan yang terjadi setelah penerbitan. |
Always |
Selalu salin item. |
Never |
Jangan pernah menyalin item. |
Dari sudut performa, PreserveNewest lebih disukai karena memungkinkan build bertambah bertahap. Hindari menggunakan Always dan gunakan IfDifferent sebagai gantinya, yang menghindari penulisan I/O tanpa efek.
<ItemGroup>
<None Update="appsettings.Development.json" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
LinkBase
Untuk item yang berada di luar direktori proyek dan subdirektorinya, target penerbitan menggunakan metadata Link item untuk menentukan tempat menyalin item.
Link juga menentukan bagaimana item di luar pohon proyek ditampilkan di jendela Penjelajah Solusi Visual Studio.
Jika Link tidak ditentukan untuk item yang berada di luar kerucut proyek, defaultnya adalah %(LinkBase)\%(RecursiveDir)%(Filename)%(Extension).
LinkBase memungkinkan Anda menentukan folder dasar yang masuk akal untuk item di luar kerucut proyek. Hierarki folder di bawah folder dasar dipertahankan melalui RecursiveDir. Jika LinkBase tidak ditentukan, ini dihilangkan dari jalur Link.
<ItemGroup>
<Content Include="..\Extras\**\*.cs" LinkBase="Shared"/>
</ItemGroup>
Gambar berikut menunjukkan bagaimana file yang disertakan melalui item sebelumnya Include glob ditampilkan di Penjelajah Solusi.