MSBuild-naslaginformatie voor .NET SDK-projecten
Deze pagina is een verwijzing voor de MSBuild-eigenschappen en -items die u kunt gebruiken om .NET-projecten te configureren.
Notitie
Deze pagina wordt uitgevoerd en bevat niet alle nuttige MSBuild-eigenschappen voor de .NET SDK. Zie Common MSBuild-eigenschappen voor een lijst met algemene MSBuild-eigenschappen.
Frameworkeigenschappen
De volgende MSBuild-eigenschappen worden beschreven in deze sectie:
TargetFramework
Met TargetFramework de eigenschap wordt de doelframeworkversie voor de app opgegeven. Zie Target-frameworks in SDK-projecten voor een lijst met geldige doelframework monikers.
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
Zie Doelframeworks in SDK-projecten voor meer informatie.
TargetFrameworks
Gebruik de TargetFrameworks eigenschap wanneer u wilt dat uw app zich op meerdere platforms richt. Zie Target-frameworks in SDK-projecten voor een lijst met geldige doelframework monikers.
Notitie
Deze eigenschap wordt genegeerd als TargetFramework (enkelvoud) is opgegeven.
<PropertyGroup>
<TargetFrameworks>netcoreapp3.1;net462</TargetFrameworks>
</PropertyGroup>
Zie Doelframeworks in SDK-projecten voor meer informatie.
NetStandardImplicitPackageVersion
Notitie
Deze eigenschap is alleen van toepassing op projecten die gebruikmaken van netstandard1.x. Dit geldt niet voor projecten die worden gebruikt netstandard2.x.
Gebruik de NetStandardImplicitPackageVersion eigenschap als u een frameworkversie wilt opgeven die lager is dan de metapackage-versie. Het projectbestand in de volgende voorbeelddoelen netstandard1.3 , maar gebruikt de versie 1.6.0 van NETStandard.Library.
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
</PropertyGroup>
Eigenschappen van assemblykenmerk
GenerateAssemblyInfo
De GenerateAssemblyInfo eigenschap bepaalt AssemblyInfo het genereren van kenmerken voor het project. De standaardwaarde is true. Gebruik false dit om het genereren van het bestand uit te schakelen:
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
De instelling GeneratedAssemblyInfoFile bepaalt de naam van het gegenereerde bestand.
Wanneer de GenerateAssemblyInfo waarde is true, worden pakketgerelateerde projecteigenschappen omgezet in assemblykenmerken. De volgende tabel bevat de projecteigenschappen waarmee de kenmerken worden gegenereerd. Er worden ook de eigenschappen weergegeven die u kunt gebruiken om die generatie op basis van een kenmerk uit te schakelen, bijvoorbeeld:
<PropertyGroup>
<GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
| MSBuild-eigenschap | Assemblykenmerk | Eigenschap om kenmerkgeneratie uit te schakelen |
|---|---|---|
Company |
AssemblyCompanyAttribute | GenerateAssemblyCompanyAttribute |
Configuration |
AssemblyConfigurationAttribute | GenerateAssemblyConfigurationAttribute |
Copyright |
AssemblyCopyrightAttribute | GenerateAssemblyCopyrightAttribute |
Description |
AssemblyDescriptionAttribute | GenerateAssemblyDescriptionAttribute |
FileVersion |
AssemblyFileVersionAttribute | GenerateAssemblyFileVersionAttribute |
InformationalVersion |
AssemblyInformationalVersionAttribute | GenerateAssemblyInformationalVersionAttribute |
Product |
AssemblyProductAttribute | GenerateAssemblyProductAttribute |
AssemblyTitle |
AssemblyTitleAttribute | GenerateAssemblyTitleAttribute |
AssemblyVersion |
AssemblyVersionAttribute | GenerateAssemblyVersionAttribute |
NeutralLanguage |
NeutralResourcesLanguageAttribute | GenerateNeutralResourcesLanguageAttribute |
Opmerkingen over deze instellingen:
AssemblyVersionenFileVersionde standaardwaarde van$(Version)zonder achtervoegsel. Als$(Version)dit bijvoorbeeld het resultaat is1.2.3-beta.4, is1.2.3de waarde .InformationalVersionwordt standaard ingesteld op de waarde van$(Version).- Als de
$(SourceRevisionId)eigenschap aanwezig is, wordt deze toegevoegd aanInformationalVersion. U kunt dit gedrag uitschakelen met behulp vanIncludeSourceRevisionInInformationalVersion. CopyrightenDescriptioneigenschappen worden ook gebruikt voor NuGet-metagegevens.Configuration, dat standaard wordt gebruiktDebug, wordt gedeeld met alle MSBuild-doelen. U kunt deze instellen via de--configurationoptie vandotnetopdrachten, bijvoorbeeld dotnet pack.- Sommige eigenschappen worden gebruikt bij het maken van een NuGet-pakket. Zie Pakketeigenschappen voor meer informatie.
Migreren vanuit .NET Framework
.NET Framework projectsjablonen maken een codebestand met deze assemblygegevenskenmerken. Het bestand bevindt zich meestal op .\Properties\AssemblyInfo.cs of .\Properties\AssemblyInfo.vb. Projecten in SDK-stijl genereren dit bestand voor u op basis van de projectinstellingen. Je kunt beide niet hebben. Wanneer u uw code overzet naar .NET 5 (of .NET Core 3.1) of hoger, voert u een van de volgende handelingen uit:
- Schakel het genereren van het tijdelijke codebestand met de kenmerken voor assemblygegevens uit door dit in te stellen
GenerateAssemblyInfofalsein uw projectbestand. Hierdoor kunt u uw AssemblyInfo-bestand behouden. - Migreer de instellingen in het
AssemblyInfobestand naar het projectbestand en verwijder hetAssemblyInfobestand.
GeneratedAssemblyInfoFile
De GeneratedAssemblyInfoFile eigenschap definieert het relatieve of absolute pad van het gegenereerde assembly-infobestand. Standaard wordt een bestand met de naam [projectnaam] gebruikt. AssemblyInfo. [cs|vb] in de $(IntermediateOutputPath) map (meestal de obj).
<PropertyGroup>
<GeneratedAssemblyInfoFile>assemblyinfo.cs</GeneratedAssemblyInfoFile>
</PropertyGroup>
Pakketeigenschappen
U kunt eigenschappen opgeven, zoals PackageId, PackageVersionPackageIcon, en TitleDescription om het pakket te beschrijven dat wordt gemaakt op basis van uw project. Zie het pakketdoel voor informatie over deze en andere eigenschappen.
<PropertyGroup>
...
<PackageId>ClassLibDotNetStandard</PackageId>
<Version>1.0.0</Version>
<Authors>John Doe</Authors>
<Company>Contoso</Company>
</PropertyGroup>
PackRelease
De PackRelease eigenschap is vergelijkbaar met de eigenschap PublishRelease , behalve dat deze het standaardgedrag van dotnet pack.
<PropertyGroup>
<PackRelease>true</PackRelease>
</PropertyGroup>
Publicatiegerelateerde eigenschappen
De volgende MSBuild-eigenschappen worden beschreven in deze sectie:
- AppendRuntimeIdentifierToOutputPath
- AppendTargetFrameworkToOutputPath
- CopyLocalLockFileAssemblies
- EnablePackageValidation
- ErrorOnDuplicatePublishOutputFiles
- GenerateRuntimeConfigDevFile
- GenerateRuntimeConfigurationFiles
- GenerateSatelliteAssembliesForCore
- IsPublishable
- PreserveCompilationContext
- PreserveCompilationReferences
- ProduceReferenceAssemblyInOutDir
- PublishRelease
- RollForward
- RuntimeFrameworkVersion
- RuntimeIdentifier
- RuntimeIdentifiers
- SatelliteResourceLanguages
- UseAppHost
AppendTargetFrameworkToOutputPath
De AppendTargetFrameworkToOutputPath eigenschap bepaalt of het doelframework moniker (TFM) wordt toegevoegd aan het uitvoerpad (dat is gedefinieerd door OutputPath). De .NET SDK voegt automatisch het doelframework toe en, indien aanwezig, de runtime-id aan het uitvoerpad. Als u AppendTargetFrameworkToOutputPath wilt false voorkomen dat tfm wordt toegevoegd aan het uitvoerpad. Zonder TFM in het uitvoerpad kunnen meerdere buildartefacten elkaar echter overschrijven.
Voor een .NET 5-app wordt bijvoorbeeld het uitvoerpad gewijzigd van bin\Debug\net5.0 in bin\Debug met de volgende instelling:
<PropertyGroup>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>
AppendRuntimeIdentifierToOutputPath
De AppendRuntimeIdentifierToOutputPath eigenschap bepaalt of de runtime-id (RID) wordt toegevoegd aan het uitvoerpad. De .NET SDK voegt automatisch het doelframework toe en, indien aanwezig, de runtime-id aan het uitvoerpad. Instelling AppendRuntimeIdentifierToOutputPath om te false voorkomen dat de RID wordt toegevoegd aan het uitvoerpad.
Voor een .NET 5-app en een RID van win10-x64bijvoorbeeld, wordt het uitvoerpad gewijzigd van bin\Debug\net5.0\win10-x64 in bin\Debug\net5.0 de volgende instelling:
<PropertyGroup>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
CopyLocalLockFileAssemblies
De CopyLocalLockFileAssemblies eigenschap is handig voor invoegtoepassingsprojecten die afhankelijk zijn van andere bibliotheken. Als u deze eigenschap trueinstelt op, worden eventuele NuGet-pakketafhankelijkheden gekopieerd naar de uitvoermap. Dat betekent dat u de uitvoer van het uitvoeren van dotnet build uw invoegtoepassing op elke computer kunt gebruiken.
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
Tip
U kunt ook de klassebibliotheek publiceren dotnet publish . Zie dotnet publish voor meer informatie.
ErrorOnDuplicatePublishOutputFiles
De ErrorOnDuplicatePublishOutputFiles eigenschap heeft betrekking op of de SDK fout NETSDK1148 genereert wanneer MSBuild dubbele bestanden detecteert in de publicatie-uitvoer, maar kan niet bepalen welke bestanden moeten worden verwijderd. Stel de ErrorOnDuplicatePublishOutputFiles eigenschap false in op als u niet wilt dat de fout wordt gegenereerd.
<PropertyGroup>
<ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
</PropertyGroup>
Deze eigenschap is geïntroduceerd in .NET 6.
EnablePackageValidation
Met EnablePackageValidation de eigenschap wordt een reeks validaties op het pakket na de pack taak ingeschakeld. Zie pakketvalidatie voor meer informatie.
<PropertyGroup>
<EnablePackageValidation>true</EnablePackageValidation>
</PropertyGroup>
Deze eigenschap is geïntroduceerd in .NET 6.
GenerateRuntimeConfigDevFile
Vanaf de .NET 6 SDK wordt het bestand [Appname].runtimesettings.dev.jsonniet meer standaard gegenereerd tijdens het compileren. Als u dit bestand nog steeds wilt genereren, stelt u de GenerateRuntimeConfigDevFile eigenschap in op true.
<PropertyGroup>
<GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>
</PropertyGroup>
GenerateRuntimeConfigurationFiles
De GenerateRuntimeConfigurationFiles eigenschap bepaalt of runtimeconfiguratieopties worden gekopieerd uit het bestand runtimeconfig.template.json naar het bestand [appname].runtimeconfig.json . Voor apps waarvoor een runtimeconfig.json-bestand is vereist, dat wil gezegd, die waarvan OutputType de eigenschap is Exe, wordt deze eigenschap standaard ingesteld trueop .
<PropertyGroup>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
</PropertyGroup>
GenerateSatelliteAssembliesForCore
De GenerateSatelliteAssembliesForCore eigenschap bepaalt of satellietassembly's worden gegenereerd met behulp van csc.exe of Al.exe (Assembly Linker) in .NET Framework projecten. (.NET Core- en .NET 5+-projecten gebruiken altijd csc.exe om satellietassembly's te genereren.) Voor .NET Framework projecten worden standaard satellietassembly's gemaakt door al.exe. Door de GenerateSatelliteAssembliesForCore eigenschap in te truestellen op , worden satellietassembly's gemaakt door csc.exe in plaats daarvan. Het gebruik van csc.exe kan in de volgende situaties voordelig zijn:
- U wilt de C#-compileroptie
deterministicgebruiken. - U bent beperkt door het feit dat al.exe geen ondersteuning heeft voor openbare ondertekening en slecht verwerkt AssemblyInformationalVersionAttribute .
<PropertyGroup>
<GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
</PropertyGroup>
IsPublishable
Met de IsPublishable eigenschap kan het Publish doel worden uitgevoerd. Deze eigenschap is alleen van invloed op processen die gebruikmaken van .*proj-bestanden en het Publish doel, zoals de opdracht dotnet publish . Het heeft geen invloed op het publiceren in Visual Studio, dat gebruikmaakt van het PublishOnly doel. De standaardwaarde is true.
Deze eigenschap is handig als u een oplossingsbestand uitvoert dotnet publish , omdat het automatisch selecteren van projecten toestaat die moeten worden gepubliceerd.
<PropertyGroup>
<IsPublishable>false</IsPublishable>
</PropertyGroup>
PreserveCompilationContext
Met de PreserveCompilationContext eigenschap kan een ingebouwde of gepubliceerde toepassing meer code tijdens runtime compileren met behulp van dezelfde instellingen die tijdens de build zijn gebruikt. De assembly's waarnaar tijdens de build wordt verwezen, worden gekopieerd naar de submap verw van de uitvoermap. De namen van de referentieassembly's worden opgeslagen in het .deps.json-bestand van de toepassing, samen met de opties die aan de compiler worden doorgegeven. U kunt deze informatie ophalen met behulp van de DependencyContext.CompileLibraries en DependencyContext.CompilationOptions eigenschappen.
Deze functionaliteit wordt meestal intern gebruikt door ASP.NET Core MVC- en Razor-pagina's ter ondersteuning van runtimecompilatie van Razor-bestanden.
<PropertyGroup>
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
PreserveCompilationReferences
De PreserveCompilationReferences eigenschap is vergelijkbaar met de eigenschap PreserveCompilationContext , behalve dat alleen de assembly's waarnaar wordt verwezen, naar de publicatiemap worden gekopieerd en niet naar het .deps.json-bestand .
<PropertyGroup>
<PreserveCompilationReferences>true</PreserveCompilationReferences>
</PropertyGroup>
Zie Razor SDK-eigenschappen voor meer informatie.
ProduceReferenceAssemblyInOutDir
In .NET 5 en eerdere versies worden verwijzingsassembly's altijd naar de OutDir map geschreven. In .NET 6 en latere versies kunt u de ProduceReferenceAssemblyInOutDir eigenschap gebruiken om te bepalen of verwijzingsassembly's naar de OutDir map worden geschreven. De standaardwaarde is falseen verwijzingsassembly's worden alleen naar de IntermediateOutputPath map geschreven. Stel de waarde in om true verwijzingsassembly's naar de OutDir map te schrijven.
<PropertyGroup>
<ProduceReferenceAssemblyInOutDir>true</ProduceReferenceAssemblyInOutDir>
</PropertyGroup>
Zie Referentieassembly's schrijven naar tussenliggende uitvoer voor meer informatie.
PublishRelease
De PublishRelease eigenschap informeert dotnet publish u over het gebruik van de Release configuratie in plaats van de Debug configuratie. We raden u aan deze eigenschap toe te voegen aan een Directory.Build.props bestand in plaats van aan een projectbestand, zodat deze vroeg genoeg wordt geëvalueerd om de configuratiewijziging door te geven.
<PropertyGroup>
<PublishRelease>true</PublishRelease>
</PropertyGroup>
Notitie
Deze eigenschap heeft geen invloed op het gedrag van dotnet build /t:Publish.
RollForward
De RollForward eigenschap bepaalt hoe de toepassing een runtime kiest wanneer er meerdere runtimeversies beschikbaar zijn. Deze waarde wordt uitgevoerd naar de .runtimeconfig.json als de rollForward instelling.
<PropertyGroup>
<RollForward>LatestMinor</RollForward>
</PropertyGroup>
Ingesteld RollForward op een van de volgende waarden:
| Waarde | Beschrijving |
|---|---|
Minor |
Standaard indien niet opgegeven. Roll-forward naar de laagste hogere secundaire versie, als de aangevraagde secundaire versie ontbreekt. Als de aangevraagde secundaire versie aanwezig is, wordt het LatestPatch beleid gebruikt. |
Major |
Roll-forward naar de volgende beschikbare hogere primaire versie en laagste secundaire versie, als de aangevraagde primaire versie ontbreekt. Als de aangevraagde primaire versie aanwezig is, wordt het Minor beleid gebruikt. |
LatestPatch |
Roll-forward naar de hoogste patchversie. Deze waarde schakelt secundaire versie roll-forward uit. |
LatestMinor |
Roll-forward naar hoogste secundaire versie, zelfs als aangevraagde secundaire versie aanwezig is. |
LatestMajor |
Roll-forward naar hoogste primaire en hoogste secundaire versie, zelfs als aangevraagde primaire is aanwezig. |
Disable |
Roll-forward niet, alleen binden aan de opgegeven versie. Dit beleid wordt niet aanbevolen voor algemeen gebruik, omdat het de mogelijkheid om door te schakelen naar de nieuwste patches wordt uitgeschakeld. Deze waarde wordt alleen aanbevolen voor testen. |
Zie Het gedrag van roll-forward van control voor meer informatie.
RuntimeFrameworkVersion
De RuntimeFrameworkVersion eigenschap geeft de versie van de runtime op die moet worden gebruikt bij het publiceren. Geef een runtimeversie op:
<PropertyGroup>
<RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>
Bij het publiceren van een frameworkafhankelijke toepassing geeft deze waarde de minimale versie op die is vereist. Bij het publiceren van een zelfstandige toepassing geeft deze waarde de exacte versie op die vereist is.
RuntimeIdentifier
Met de RuntimeIdentifier eigenschap kunt u één runtime-id (RID) voor het project opgeven. De RID maakt het mogelijk om een zelfstandige implementatie te publiceren.
<PropertyGroup>
<RuntimeIdentifier>ubuntu.16.04-x64</RuntimeIdentifier>
</PropertyGroup>
RuntimeIdentifiers
Met de RuntimeIdentifiers eigenschap kunt u een door puntkomma's gescheiden lijst met runtime-id's (RID's) voor het project opgeven. Gebruik deze eigenschap als u wilt publiceren voor meerdere runtimes. RuntimeIdentifiers wordt op het moment van herstel gebruikt om ervoor te zorgen dat de juiste assets zich in de grafiek bevinden.
Tip
RuntimeIdentifier (singular) kan snellere builds bieden wanneer slechts één runtime is vereist.
<PropertyGroup>
<RuntimeIdentifiers>win10-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
</PropertyGroup>
SatelliteResourceLanguages
Met de SatelliteResourceLanguages eigenschap kunt u opgeven voor welke talen u satellietresourceassembly's wilt behouden tijdens het bouwen en publiceren. Veel NuGet-pakketten omvatten gelokaliseerde resource-satellietassembly's in het hoofdpakket. Voor projecten die verwijzen naar deze NuGet-pakketten waarvoor geen gelokaliseerde resources nodig zijn, kunnen de gelokaliseerde assembly's de build- en publicatieuitvoergrootte onnodig vergroten. Door de SatelliteResourceLanguages eigenschap toe te voegen aan uw projectbestand, worden alleen gelokaliseerde assembly's voor de talen die u opgeeft opgenomen in de build- en publicatie-uitvoer. In het volgende projectbestand worden bijvoorbeeld alleen Engelse (AMERIKAANSE) resource-satellietassembly's bewaard.
<PropertyGroup>
<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>
Notitie
U moet deze eigenschap opgeven in het project dat verwijst naar het NuGet-pakket met gelokaliseerde resource-satellietassembly's.
UseAppHost
De UseAppHost eigenschap bepaalt of er al dan niet een systeemeigen uitvoerbaar bestand wordt gemaakt voor een implementatie. Er is een systeemeigen uitvoerbaar bestand vereist voor zelfstandige implementaties.
In .NET Core 3.0 en latere versies wordt standaard een frameworkafhankelijk uitvoerbaar bestand gemaakt. Stel de eigenschap in om het UseAppHost genereren van het uitvoerbare bestand uit te false schakelen.
<PropertyGroup>
<UseAppHost>false</UseAppHost>
</PropertyGroup>
Zie .NET-toepassingsimplementatie voor meer informatie over implementatie.
Gerelateerde eigenschappen bijsnijden
Er zijn talloze MSBuild-eigenschappen beschikbaar om het bijsnijden te verfijnen. Dit is een functie waarmee ongebruikte code wordt beperkt van zelf-ingesloten implementaties. Deze opties worden in detail besproken bij opties voor bijsnijden. De volgende tabel bevat een beknopt overzicht.
| Eigenschap | Waarden | Beschrijving |
|---|---|---|
PublishTrimmed |
true of false |
Hiermee bepaalt u of bijsnijden is ingeschakeld tijdens het publiceren. |
TrimMode |
full of partial |
De standaardinstelling is full. Bepaalt de granulariteit van het bijsnijden. |
SuppressTrimAnalysisWarnings |
true of false |
Hiermee bepaalt u of waarschuwingen voor analyse bijsnijden worden geproduceerd. |
EnableTrimAnalyzer |
true of false |
Hiermee bepaalt u of er een subset van trimanalysewaarschuwingen wordt geproduceerd. U kunt analyse inschakelen, zelfs als PublishTrimmed deze is ingesteld op false. |
ILLinkTreatWarningsAsErrors |
true of false |
Hiermee bepaalt u of waarschuwingen voor knippen worden behandeld als fouten. U kunt deze eigenschap false bijvoorbeeld instellen op wanneer TreatWarningsAsErrors deze is ingesteld op true. |
TrimmerSingleWarn |
true of false |
Hiermee bepaalt u of één waarschuwing per assembly wordt weergegeven of alle waarschuwingen. |
TrimmerRemoveSymbols |
true of false |
Hiermee bepaalt u of alle symbolen uit een bijgesneden toepassing worden verwijderd. |
Compilatiegerelateerde eigenschappen
De volgende MSBuild-eigenschappen worden beschreven in deze sectie:
- DisableImplicitFrameworkDefines
- DocumentationFile
- EmbeddedResourceUseDependentUponConvention
- EnablePreviewFeatures
- GenerateDocumentationFile
- GenerateRequiresPreviewFeaturesAttribute
- OptimizeImplicitlyTriggeredBuild
C#-compileropties, zoals LangVersion en Nullable, kunnen ook worden opgegeven als MSBuild-eigenschappen in uw projectbestand. Zie C#-compileropties voor meer informatie.
DisableImplicitFrameworkDefines
De DisableImplicitFrameworkDefines eigenschap bepaalt of de SDK al dan niet preprocessorsymbolen genereert voor het doelframework en platform voor het .NET-project. Wanneer deze eigenschap is ingesteld op false of is uitgeschakeld (dit is de standaardwaarde), worden preprocessorsymbolen gegenereerd voor:
- Framework zonder versie (
NETFRAMEWORK,NETSTANDARD,NET) - Framework met versie (
NET48,NETSTANDARD2_0,NET6_0) - Framework met versiegrens (
NET48_OR_GREATER,NETSTANDARD2_0_OR_GREATER,NET6_0_OR_GREATER)
Zie Doelframeworks voor meer informatie over doelframework monikers en deze impliciete preprocessorsymbolen.
Als u bovendien een besturingssysteemspecifiek doelframework opgeeft in het project (bijvoorbeeld net6.0-android), worden de volgende preprocessorsymbolen gegenereerd:
- Platform zonder versie (
ANDROID,IOS,WINDOWS) - Platform met versie (
IOS15_1) - Platform met minimale versiegrens (
IOS15_1_OR_GREATER)
Zie OS-specifieke TFM's voor meer informatie over besturingssysteemspecifieke doelframework-monikers.
Als uw doelframework tot slot ondersteuning voor oudere doelframeworks impliceert, worden preprocessorsymbolen voor die oudere frameworks verzonden. Impliceert bijvoorbeeld net6.0 ondersteuning voor net5.0 enzovoort helemaal terug naar .netcoreapp1.0. Voor elk van deze doelframeworks wordt het framework met het minimale gebonden versiesymbool gedefinieerd.
DocumentationFile
Met DocumentationFile de eigenschap kunt u een bestandsnaam opgeven voor het XML-bestand dat de documentatie voor uw bibliotheek bevat. Als IntelliSense correct werkt met uw documentatie, moet de bestandsnaam hetzelfde zijn als de assemblynaam en moet deze zich in dezelfde map bevinden als de assembly. Als u deze eigenschap niet opgeeft, maar u GenerateDocumentationFiletruewel instelt, wordt de naam van het documentatiebestand standaard ingesteld op de naam van uw assembly, maar met een .xml bestandsextensie. Daarom is het vaak eenvoudiger om deze eigenschap weg te laten en in plaats daarvan de eigenschap GenerateDocumentationFile te gebruiken.
Als u deze eigenschap opgeeft, maar u GenerateDocumentationFilefalseinstelt op, genereert de compiler geen documentatiebestand. Als u deze eigenschap opgeeft en de eigenschap GenerateDocumentationFile weglaat, genereert de compiler wel een documentatiebestand.
<PropertyGroup>
<DocumentationFile>path/to/file.xml</DocumentationFile>
</PropertyGroup>
EmbeddedResourceUseDependentUponConvention
Met de EmbeddedResourceUseDependentUponConvention eigenschap wordt gedefinieerd of de bestandsnamen van het resourcemanifest worden gegenereerd op basis van typegegevens in bronbestanden die zich samen met resourcebestanden bevinden. Als Form1.resx zich bijvoorbeeld in dezelfde map bevindt als Form1.cs en EmbeddedResourceUseDependentUponConvention is ingesteld trueop, neemt het gegenereerde .resources-bestand de naam op van het eerste type dat is gedefinieerd in Form1.cs. Als MyNamespace.Form1 bijvoorbeeld het eerste type is gedefinieerd in Form1.cs, is de gegenereerde bestandsnaam MyNamespace.Form1.resources.
Notitie
Als LogicalName, ManifestResourceNameof DependentUpon metagegevens worden opgegeven voor een EmbeddedResource item, is de gegenereerde manifestbestandsnaam voor dat resourcebestand in plaats daarvan gebaseerd op die metagegevens.
In een nieuw .NET-project is deze eigenschap standaard ingesteld op true. Als deze optie is ingesteld falseop , en nee LogicalName, ManifestResourceNameof DependentUpon metagegevens worden opgegeven voor het item in het EmbeddedResource projectbestand, wordt de naam van het resourcemanifestbestand gebaseerd op de hoofdnaamruimte voor het project en het relatieve bestandspad naar het RESX-bestand . Zie De naam van resourcemanifestbestanden voor meer informatie.
<PropertyGroup>
<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
</PropertyGroup>
EnablePreviewFeatures
De EnablePreviewFeatures eigenschap bepaalt of uw project afhankelijk is van api's of assembly's die zijn ingericht met het RequiresPreviewFeaturesAttribute kenmerk. Dit kenmerk wordt gebruikt om aan te geven dat een API of assembly gebruikmaakt van functies die als preview worden beschouwd voor de SDK-versie die u gebruikt. Preview-functies worden niet ondersteund en kunnen in een toekomstige versie worden verwijderd. Als u het gebruik van preview-functies wilt inschakelen, stelt u de eigenschap in op True.
<PropertyGroup>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
</PropertyGroup>
Wanneer een project deze eigenschap bevat waarop deze eigenschap is ingesteld True, wordt het volgende kenmerk op assemblyniveau toegevoegd aan het AssemblyInfo.cs-bestand :
[assembly: RequiresPreviewFeatures]
Een analyse waarschuwt of dit kenmerk aanwezig is op afhankelijkheden voor projecten waarop EnablePreviewFeatures niet is ingesteld True.
Bibliotheekauteurs die preview-assembly's willen verzenden, moeten deze eigenschap instellen op True. Als een assembly moet worden verzonden met een combinatie van preview- en niet-preview-API's, raadpleegt u de sectie GenerateRequiresPreviewFeaturesAttribute hieronder.
GenerateDocumentationFile
De GenerateDocumentationFile eigenschap bepaalt of de compiler een XML-documentatiebestand voor uw bibliotheek genereert. Als u deze eigenschap true instelt op en u geen bestandsnaam opgeeft via de eigenschap DocumentationFile, wordt het gegenereerde XML-bestand in dezelfde uitvoermap geplaatst als uw assembly en heeft dezelfde bestandsnaam (maar met een .xml-extensie ).
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
Zie de opmerkingen bij XML-documentatie (C#),Documenteer uw code met XML (Visual Basic) of Documenteer uw code met XML (Visual Basic) of Documenteer uw code met XML (F#) voor meer informatie over het genereren van documentatie uit codeopmerkingen.
GenerateRequiresPreviewFeaturesAttribute
De GenerateRequiresPreviewFeaturesAttribute eigenschap is nauw gerelateerd aan de eigenschap EnablePreviewFeatures . Als uw bibliotheek gebruikmaakt van preview-functies, maar u niet wilt dat de hele assembly wordt gemarkeerd met het RequiresPreviewFeaturesAttribute kenmerk, waarvoor consumenten preview-functies moeten inschakelen, stelt u deze eigenschap in op False.
<PropertyGroup>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
<GenerateRequiresPreviewFeaturesAttribute>False</GenerateRequiresPreviewFeaturesAttribute>
</PropertyGroup>
Belangrijk
Als u de GenerateRequiresPreviewFeaturesAttribute eigenschap Falseinstelt op , moet u er zeker van zijn dat u alle openbare API's verfraaid die afhankelijk zijn van preview-functies met RequiresPreviewFeaturesAttribute.
OptimizeImplicitlyTriggeredBuild
Om de buildtijd te versnellen, slaan builds die impliciet worden geactiveerd door Visual Studio codeanalyse over, inclusief null-analyse. Visual Studio activeert bijvoorbeeld een impliciete build wanneer u tests uitvoert. Impliciete builds worden echter alleen geoptimaliseerd als TreatWarningsAsErrors dat niet truehet enige is. Als u hebt TreatWarningsAsErrors ingesteld op true maar u nog steeds impliciet geactiveerde builds wilt optimaliseren, kunt u instellen OptimizeImplicitlyTriggeredBuild op True. Als u buildoptimalisatie wilt uitschakelen voor impliciet geactiveerde builds, stelt u deze in op OptimizeImplicitlyTriggeredBuildFalse.
<PropertyGroup>
<OptimizeImplicitlyTriggeredBuild>True</OptimizeImplicitlyTriggeredBuild>
</PropertyGroup>
Standaardeigenschappen voor itemopname
De volgende MSBuild-eigenschappen worden beschreven in deze sectie:
- DefaultItemExcludesInProjectFolder
- DefaultItemExcludes
- EnableDefaultCompileItems
- EnableDefaultEmbeddedResourceItems
- EnableDefaultItems
- EnableDefaultNoneItems
Zie Standaard- en uitsluitingen voor meer informatie.
DefaultItemExcludes
Gebruik de DefaultItemExcludes eigenschap om glob-patronen te definiëren voor bestanden en mappen die moeten worden uitgesloten van de inbegrepen, uitsluiten en verwijderen globs. Standaard worden de mappen ./bin en ./obj uitgesloten van de glob-patronen.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/*.myextension</DefaultItemExcludes>
</PropertyGroup>
DefaultItemExcludesInProjectFolder
Gebruik de DefaultItemExcludesInProjectFolder eigenschap om glob-patronen te definiëren voor bestanden en mappen in de projectmap die moeten worden uitgesloten van de insluiting, uitsluiting en verwijder globs. Mappen die beginnen met een punt (.), zoals .git en .vs, worden standaard uitgesloten van de glob-patronen.
Deze eigenschap is vergelijkbaar met de DefaultItemExcludes eigenschap, behalve dat deze alleen bestanden en mappen in de projectmap beschouwt. Wanneer een glob-patroon onbedoeld overeenkomt met items buiten de projectmap met een relatief pad, gebruikt u de DefaultItemExcludesInProjectFolder eigenschap in plaats van de DefaultItemExcludes eigenschap.
<PropertyGroup>
<DefaultItemExcludesInProjectFolder>$(DefaultItemExcludesInProjectFolder);**/myprefix*/**</DefaultItemExcludesInProjectFolder>
</PropertyGroup>
EnableDefaultItems
De EnableDefaultItems eigenschap bepaalt of items, ingesloten resource-items en None items impliciet worden opgenomen in het project. De standaardwaarde is true. Stel de EnableDefaultItems eigenschap in om alle impliciete bestandsopname uit te false schakelen.
<PropertyGroup>
<EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>
EnableDefaultCompileItems
De EnableDefaultCompileItems eigenschap bepaalt of compileeritems impliciet zijn opgenomen in het project. De standaardwaarde is true. Stel de EnableDefaultCompileItems eigenschap in om impliciete opname van *.cs en andere taalextensiebestanden uit te false schakelen.
<PropertyGroup>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
EnableDefaultEmbeddedResourceItems
De EnableDefaultEmbeddedResourceItems eigenschap bepaalt of ingesloten resource-items impliciet zijn opgenomen in het project. De standaardwaarde is true. Stel de EnableDefaultEmbeddedResourceItems eigenschap in om impliciete opname van ingesloten resourcebestanden uit te false schakelen.
<PropertyGroup>
<EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
</PropertyGroup>
EnableDefaultNoneItems
De EnableDefaultNoneItems eigenschap bepaalt of None items (bestanden die geen rol hebben in het buildproces) impliciet zijn opgenomen in het project. De standaardwaarde is true. Stel de EnableDefaultNoneItems eigenschap in om impliciete insluiting van None items uit te false schakelen.
<PropertyGroup>
<EnableDefaultNoneItems>false</EnableDefaultNoneItems>
</PropertyGroup>
Eigenschappen van codeanalyse
De volgende MSBuild-eigenschappen worden beschreven in deze sectie:
- AnalysisLevel
- AnalysisLevel-categorie<>
- AnalysisMode
- AnalysisMode-categorie<>
- CodeAnalysisTreatWarningsAsErrors
- EnableNETAnalyzers
- EnforceCodeStyleInBuild
- _SkipUpgradeNetAnalyzersNuGetWarning
AnalysisLevel
Met de AnalysisLevel eigenschap kunt u een set codeanalyses opgeven die moeten worden uitgevoerd volgens een .NET-release. Elke .NET-release, te beginnen in .NET 5, heeft een set codeanalyseregels. Van die set worden uw code geanalyseerd door de regels die standaard zijn ingeschakeld voor die release. Als u bijvoorbeeld een upgrade uitvoert naar .NET 6, maar niet wilt dat de standaardset codeanalyseregels worden gewijzigd, ingesteld op AnalysisLevel5.
<PropertyGroup>
<AnalysisLevel>preview</AnalysisLevel>
</PropertyGroup>
U kunt eventueel, vanaf .NET 6, een samengestelde waarde opgeven voor deze eigenschap die ook aangeeft hoe agressief regels moeten worden ingeschakeld. Samengestelde waarden hebben de vorm <version>-<mode>, waarbij de <mode> waarde een van de AnalysisMode-waarden is. In het volgende voorbeeld wordt de preview-versie van codeanalyses gebruikt en wordt de aanbevolen set regels ingeschakeld.
<PropertyGroup>
<AnalysisLevel>preview-recommended</AnalysisLevel>
</PropertyGroup>
Notitie
Als u de .NET 6 SDK instelt AnalysisLevel5-<mode> en 5.0-<mode> vervolgens installeert en uw project opnieuw compileert, ziet u mogelijk onverwachte nieuwe buildwaarschuwingen. Zie dotnet/roslyn-analyzers#5679 voor meer informatie.
Standaardwaarde:
- Als uw project is gericht op .NET 5 of hoger of als u de eigenschap AnalysisMode hebt toegevoegd, is
latestde standaardwaarde. - Anders wordt deze eigenschap weggelaten, tenzij u deze expliciet toevoegt aan het projectbestand.
In de volgende tabel ziet u de waarden die u kunt opgeven.
| Waarde | Betekenis |
|---|---|
latest |
De meest recente codeanalyses die zijn uitgebracht, worden gebruikt. Dit is de standaardinstelling. |
latest-<mode> |
De meest recente codeanalyses die zijn uitgebracht, worden gebruikt. De <mode> waarde bepaalt welke regels zijn ingeschakeld. |
preview |
De nieuwste codeanalyses worden gebruikt, zelfs als ze in preview zijn. |
preview-<mode> |
De nieuwste codeanalyses worden gebruikt, zelfs als ze in preview zijn. De <mode> waarde bepaalt welke regels zijn ingeschakeld. |
6.0 |
De set regels die beschikbaar waren voor de .NET 6-release, wordt gebruikt, zelfs als er nieuwere regels beschikbaar zijn. |
6.0-<mode> |
De set regels die beschikbaar waren voor de .NET 6-release, wordt gebruikt, zelfs als er nieuwere regels beschikbaar zijn. De <mode> waarde bepaalt welke regels zijn ingeschakeld. |
6 |
De set regels die beschikbaar waren voor de .NET 6-release, wordt gebruikt, zelfs als er nieuwere regels beschikbaar zijn. |
6-<mode> |
De set regels die beschikbaar waren voor de .NET 6-release, wordt gebruikt, zelfs als er nieuwere regels beschikbaar zijn. De <mode> waarde bepaalt welke regels zijn ingeschakeld. |
5.0 |
De set regels die beschikbaar waren voor de .NET 5-release, wordt gebruikt, zelfs als er nieuwere regels beschikbaar zijn. |
5.0-<mode> |
De set regels die beschikbaar waren voor de .NET 5-release, wordt gebruikt, zelfs als er nieuwere regels beschikbaar zijn. De <mode> waarde bepaalt welke regels zijn ingeschakeld. |
5 |
De set regels die beschikbaar waren voor de .NET 5-release, wordt gebruikt, zelfs als er nieuwere regels beschikbaar zijn. |
5-<mode> |
De set regels die beschikbaar waren voor de .NET 5-release, wordt gebruikt, zelfs als er nieuwere regels beschikbaar zijn. De <mode> waarde bepaalt welke regels zijn ingeschakeld. |
Notitie
- In .NET 5 en eerdere versies is deze eigenschap alleen van invloed op caxxxx-regels (codekwaliteit). Als u EnforceCodeStyleInBuild
trueinstelt in .NET 6, is deze eigenschap ook van invloed op IDEXXXX-regels (Code Style ). - Als u een samengestelde waarde instelt voor
AnalysisLevel, hoeft u geen AnalysisMode op te geven. Als u dat doet,AnalysisLevelheeft echter voorrang opAnalysisMode. - Deze eigenschap heeft geen effect op codeanalyse in projecten die niet verwijzen naar een project-SDK, bijvoorbeeld verouderde .NET Framework projecten die verwijzen naar het NuGet-pakket Microsoft.CodeAnalysis.NetAnalyzers.
AnalysisLevel-categorie<>
Deze eigenschap is geïntroduceerd in .NET 6 en is hetzelfde als AnalysisLevel, behalve dat deze alleen van toepassing is op een specifieke categorie codeanalyseregels. Met deze eigenschap kunt u een andere versie van codeanalyses voor een specifieke categorie gebruiken of regels op een ander niveau in- of uitschakelen voor de andere regelcategorieën. Als u deze eigenschap weglaat voor een bepaalde categorie regels, wordt deze standaard ingesteld op de waarde AnalysisLevel . De beschikbare waarden zijn hetzelfde als die voor AnalysisLevel.
<PropertyGroup>
<AnalysisLevelSecurity>preview</AnalysisLevelSecurity>
</PropertyGroup>
<PropertyGroup>
<AnalysisLevelSecurity>preview-recommended</AnalysisLevelSecurity>
</PropertyGroup>
De volgende tabel bevat de eigenschapsnaam voor elke regelcategorie.
| Naam van eigenschap | Regelcategorie |
|---|---|
<AnalysisLevelDesign> |
Ontwerpregels |
<AnalysisLevelDocumentation> |
Documentatieregels |
<AnalysisLevelGlobalization> |
Globaliseringsregels |
<AnalysisLevelInteroperability> |
Regels voor draagbaarheid en interoperabiliteit |
<AnalysisLevelMaintainability> |
Regels voor onderhoudbaarheid |
<AnalysisLevelNaming> |
Naamgevingsregels |
<AnalysisLevelPerformance> |
Prestatieregels |
<AnalysisLevelSingleFile> |
Toepassingsregels met één bestand |
<AnalysisLevelReliability> |
Betrouwbaarheidsregels |
<AnalysisLevelSecurity> |
Beveiligingsregels |
<AnalysisLevelStyle> |
Regels voor codestijl (IDEXXXX) |
<AnalysisLevelUsage> |
Gebruiksregels |
AnalysisMode
Vanaf .NET 5 wordt de .NET SDK geleverd met alle 'CA'-codekwaliteitsregels. Standaard worden slechts enkele regels ingeschakeld als buildwaarschuwingen in elke .NET-release. Met AnalysisMode de eigenschap kunt u de set regels aanpassen die standaard zijn ingeschakeld. U kunt overschakelen naar een agressievere analysemodus, waar u zich afzonderlijk kunt afmelden voor regels of een conservatievere analysemodus waarin u zich kunt aanmelden voor specifieke regels. Als u bijvoorbeeld alle regels wilt inschakelen als buildwaarschuwingen, stelt u de waarde in op All.
<PropertyGroup>
<AnalysisMode>All</AnalysisMode>
</PropertyGroup>
In de volgende tabel ziet u de beschikbare optiewaarden in .NET 5 en .NET 6. Ze worden weergegeven in toenemende volgorde van het aantal regels dat ze inschakelen.
| .NET 6+ waarde | .NET 5-waarde | Betekenis |
|---|---|---|
None |
AllDisabledByDefault |
Alle regels zijn uitgeschakeld. U kunt ervoor kiezen om afzonderlijke regels selectief in te schakelen. |
Default |
Default |
Standaardmodus, waarbij bepaalde regels zijn ingeschakeld als buildwaarschuwingen, worden bepaalde regels ingeschakeld als Visual Studio IDE-suggesties en de rest wordt uitgeschakeld. |
Minimum |
N.v.t. | Agressievere modus dan de Default modus. Bepaalde suggesties die sterk worden aanbevolen voor het afdwingen van builds, worden ingeschakeld als buildwaarschuwingen. |
Recommended |
N.v.t. | Agressievere modus dan de Minimum modus, waarbij meer regels zijn ingeschakeld als buildwaarschuwingen. |
All |
AllEnabledByDefault |
Alle regels zijn ingeschakeld als buildwaarschuwingen. U kunt selectief afmelden voor afzonderlijke regels om deze uit te schakelen. |
Notitie
- In .NET 5 is deze eigenschap alleen van invloed op caxxxx-regels (codekwaliteit). Als u EnforceCodeStyleInBuild
trueinstelt in .NET 6, is deze eigenschap ook van invloed op IDEXXXX-regels (Code Style ). - Als u bijvoorbeeld een samengestelde waarde voor AnalysisLevel gebruikt,
<AnalysisLevel>5-recommended</AnalysisLevel>kunt u deze eigenschap volledig weglaten. Als u echter beide eigenschappen opgeeft,AnalysisLevelheeft voorrang opAnalysisMode. - Als
AnalysisModedeze optie is ingesteld5opAllEnabledByDefaultofAnalysisLevel5.0en u vervolgens de .NET 6 SDK installeert en uw project opnieuw compileert, ziet u mogelijk onverwachte nieuwe buildwaarschuwingen. Zie dotnet/roslyn-analyzers#5679 voor meer informatie. - Deze eigenschap heeft geen effect op codeanalyse in projecten die niet verwijzen naar een project-SDK, bijvoorbeeld verouderde .NET Framework projecten die verwijzen naar het NuGet-pakket Microsoft.CodeAnalysis.NetAnalyzers.
AnalysisMode-categorie<>
Deze eigenschap is geïntroduceerd in .NET 6 en is hetzelfde als AnalysisMode, behalve dat deze alleen van toepassing is op een specifieke categorie codeanalyseregels. Met deze eigenschap kunt u regels op een ander niveau in- of uitschakelen voor de andere regelcategorieën. Als u deze eigenschap weglaat voor een bepaalde categorie regels, wordt deze standaard ingesteld op de waarde AnalysisMode . De beschikbare waarden zijn hetzelfde als die voor AnalysisMode.
<PropertyGroup>
<AnalysisModeSecurity>All</AnalysisModeSecurity>
</PropertyGroup>
De volgende tabel bevat de eigenschapsnaam voor elke regelcategorie.
| Naam van eigenschap | Regelcategorie |
|---|---|
<AnalysisModeDesign> |
Ontwerpregels |
<AnalysisModeDocumentation> |
Documentatieregels |
<AnalysisModeGlobalization> |
Globaliseringsregels |
<AnalysisModeInteroperability> |
Regels voor draagbaarheid en interoperabiliteit |
<AnalysisModeMaintainability> |
Regels voor onderhoudbaarheid |
<AnalysisModeNaming> |
Naamgevingsregels |
<AnalysisModePerformance> |
Prestatieregels |
<AnalysisModeSingleFile> |
Toepassingsregels met één bestand |
<AnalysisModeReliability> |
Betrouwbaarheidsregels |
<AnalysisModeSecurity> |
Beveiligingsregels |
<AnalysisModeStyle> |
Regels voor codestijl (IDEXXXX) |
<AnalysisModeUsage> |
Gebruiksregels |
CodeAnalysisTreatWarningsAsErrors
Met CodeAnalysisTreatWarningsAsErrors de eigenschap kunt u configureren of waarschuwingen voor codekwaliteitsanalyse (CAxxxx) moeten worden behandeld als waarschuwingen en de build moeten breken. Als u de vlag gebruikt bij het -warnaserror bouwen van uw projecten, worden waarschuwingen voor kwaliteitsanalyse van .NET-code ook behandeld als fouten. Als u niet wilt dat waarschuwingen voor codekwaliteitsanalyse worden behandeld als fouten, kunt u de CodeAnalysisTreatWarningsAsErrors eigenschap false MSBuild instellen op in uw projectbestand.
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
EnableNETAnalyzers
Kwaliteitsanalyse van .NET-code is standaard ingeschakeld voor projecten die gericht zijn op .NET 5 of een latere versie. Als u ontwikkelt met behulp van de .NET 5+ SDK, kunt u .NET-codeanalyse inschakelen voor SDK-projecten die gericht zijn op eerdere versies van .NET door de EnableNETAnalyzers eigenschap in te stellen op true. Als u codeanalyse in een project wilt uitschakelen, stelt u deze eigenschap in op false.
<PropertyGroup>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
</PropertyGroup>
Notitie
Deze eigenschap is specifiek van toepassing op de ingebouwde analyses in de .NET 5+ SDK. Deze moet niet worden gebruikt wanneer u een NuGet-codeanalysepakket installeert.
EnforceCodeStyleInBuild
Analyse van .NET-codestijl is standaard uitgeschakeld op build voor alle .NET-projecten. U kunt codestijlanalyse voor .NET-projecten inschakelen door de EnforceCodeStyleInBuild eigenschap in te stellen op true.
<PropertyGroup>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
Alle regels voor codestijlen die zijn geconfigureerd om waarschuwingen of fouten te zijn, worden uitgevoerd bij het maken en rapporteren van schendingen.
Notitie
Als u .NET 6 (of Visual Studio 2022, waaronder .NET 6), installeert, maar uw project wilt bouwen met Visual Studio 2019, ziet u mogelijk nieuwe CS8032-waarschuwingen als u de EnforceCodeStyleInBuild eigenschap hebt ingesteld op true. Als u de waarschuwingen wilt oplossen, kunt u de versie van de .NET SDK opgeven waarmee u uw project kunt bouwen (in dit geval iets als 5.0.404) door een global.json-vermelding toe te voegen.
_SkipUpgradeNetAnalyzersNuGetWarning
Met de _SkipUpgradeNetAnalyzersNuGetWarning eigenschap kunt u configureren of u een waarschuwing ontvangt als u codeanalyses gebruikt van een NuGet-pakket dat verouderd is in vergelijking met de codeanalyses in de nieuwste .NET SDK. De waarschuwing ziet er ongeveer als volgt uit:
De .NET SDK heeft nieuwere analyses met versie 6.0.0 dan versie 5.0.3 van het pakket Microsoft.CodeAnalysis.NetAnalyzers. Werk deze pakketreferentie bij of verwijder deze.
Als u deze waarschuwing wilt verwijderen en de versie van codeanalyses in het NuGet-pakket wilt blijven gebruiken, stelt u dit _SkipUpgradeNetAnalyzersNuGetWarningtrue in uw projectbestand in.
<PropertyGroup>
<_SkipUpgradeNetAnalyzersNuGetWarning>true</_SkipUpgradeNetAnalyzersNuGetWarning>
</PropertyGroup>
Eigenschappen van runtimeconfiguratie
U kunt bepaalde uitvoeringsgedragen configureren door MSBuild-eigenschappen op te geven in het projectbestand van de app. Zie Runtime-configuratie-instellingen voor informatie over andere manieren om runtimegedrag te configureren.
- ConcurrentGarbageCollection
- InvariantGlobalization
- Vooraf gedefinieerdeCulturesOnly
- RetainVMGarbageCollection
- ServerGarbageCollection
- ThreadPoolMaxThreads
- ThreadPoolMinThreads
- TieredCompilation
- TieredCompilationQuickJit
- TieredCompilationQuickJitForLoops
ConcurrentGarbageCollection
De ConcurrentGarbageCollection eigenschap configureert of de achtergrond (gelijktijdige) garbagecollection is ingeschakeld. Stel de waarde in om garbagecollection op de achtergrond uit te false schakelen. Zie Achtergrond-GC voor meer informatie.
<PropertyGroup>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
InvariantGlobalization
De InvariantGlobalization eigenschap configureert of de app wordt uitgevoerd in de modus globalization-invariant , wat betekent dat deze geen toegang heeft tot cultuurspecifieke gegevens. Stel de waarde in op true uitvoering in de modus Globalization-invariant. Zie de invariantmodus voor meer informatie.
<PropertyGroup>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
Vooraf gedefinieerdeCulturesOnly
In .NET 6 en latere versies configureert de PredefinedCulturesOnly eigenschap of apps andere culturen dan de invariante cultuur kunnen maken wanneer de globalisatie-invariantmodus is ingeschakeld. De standaardwaarde is true. Stel de waarde in om false het maken van een nieuwe cultuur in de modus Globalization-invariant mogelijk te maken.
<PropertyGroup>
<PredefinedCulturesOnly>false</PredefinedCulturesOnly>
</PropertyGroup>
Zie Cultuur maken en casetoewijzing in de modus Globalization-invariant voor meer informatie.
RetainVMGarbageCollection
Met RetainVMGarbageCollection de eigenschap configureert u de garbagecollector om verwijderde geheugensegmenten op een stand-bylijst te plaatsen voor toekomstig gebruik of deze vrij te geven. Als u de waarde instelt om true de garbagecollector de segmenten op een stand-bylijst te plaatsen. Zie VM behouden voor meer informatie.
<PropertyGroup>
<RetainVMGarbageCollection>true</RetainVMGarbageCollection>
</PropertyGroup>
ServerGarbageCollection
De ServerGarbageCollection eigenschap configureert of de toepassing gebruikmaakt van garbagecollection van werkstations of de garbagecollection van de server. Stel de waarde in op true het gebruik van de garbagecollection van de server. Zie Workstation versus server voor meer informatie.
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
ThreadPoolMaxThreads
De ThreadPoolMaxThreads eigenschap configureert het maximum aantal threads voor de werkrolthreadgroep. Zie Maximumthreads voor meer informatie.
<PropertyGroup>
<ThreadPoolMaxThreads>20</ThreadPoolMaxThreads>
</PropertyGroup>
ThreadPoolMinThreads
Met ThreadPoolMinThreads de eigenschap wordt het minimum aantal threads voor de werkthreadgroep geconfigureerd. Zie Minimumthreads voor meer informatie.
<PropertyGroup>
<ThreadPoolMinThreads>4</ThreadPoolMinThreads>
</PropertyGroup>
Gelaagdecompilation
De TieredCompilation eigenschap configureert of de Just-In-Time-compiler (JIT) gebruikmaakt van gelaagde compilatie. Stel de waarde in om gelaagde compilatie uit te false schakelen. Zie Gelaagde compilatie voor meer informatie.
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
TieredCompilationQuickJit
De TieredCompilationQuickJit eigenschap configureert of de JIT-compiler snelle JIT gebruikt. Stel de waarde in om snelle JIT uit te false schakelen. Zie Quick JIT voor meer informatie.
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
TieredCompilationQuickJitForLoops
De TieredCompilationQuickJitForLoops eigenschap configureert of de JIT-compiler snelle JIT gebruikt op methoden die lussen bevatten. Stel de waarde in om snelle JIT in te true schakelen voor methoden die lussen bevatten. Zie Snelle JIT voor lussen voor meer informatie.
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
Referentie-eigenschappen
De volgende MSBuild-eigenschappen worden beschreven in deze sectie:
- AssetTargetFallback
- DisableImplicitFrameworkReferences
- DisableTransitiveProjectReferences
- Eigenschappen met betrekking tot herstellen
- ValidateExecutableReferencesMatchSelfContained
AssetTargetFallback
Met de AssetTargetFallback eigenschap kunt u aanvullende compatibele frameworkversies opgeven voor projectverwijzingen en NuGet-pakketten. Als u bijvoorbeeld een pakketafhankelijkheid opgeeft die wordt gebruikt PackageReference , maar dat pakket geen assets bevat die compatibel zijn met de projecten TargetFramework, wordt de AssetTargetFallback eigenschap in gebruik. De compatibiliteit van het pakket waarnaar wordt verwezen, wordt opnieuw gecontroleerd met elk doelframework dat is opgegeven in AssetTargetFallback. Deze eigenschap vervangt de afgeschafte eigenschap PackageTargetFallback.
U kunt de AssetTargetFallback eigenschap instellen op een of meer doelframeworkversies.
<PropertyGroup>
<AssetTargetFallback>net461</AssetTargetFallback>
</PropertyGroup>
DisableImplicitFrameworkReferences
De DisableImplicitFrameworkReferences eigenschap bepaalt impliciete FrameworkReference items bij het richten van .NET Core 3.0 en nieuwere versies. Wanneer u zich richt op .NET Core 2.1 of .NET Standard 2.0 en eerdere versies, worden impliciete PackageReference-items beheerd naar pakketten in een metapackage. (Een metapackage is een framework-pakket dat alleen bestaat uit afhankelijkheden van andere pakketten.) Deze eigenschap bepaalt ook impliciete verwijzingen, zoals System en System.Core bij het richten van .NET Framework.
Stel deze eigenschap in om impliciete FrameworkReference of PackageReference-items uit te true schakelen. Als u deze eigenschap trueinstelt op, kunt u expliciete verwijzingen toevoegen aan alleen de frameworks of pakketten die u nodig hebt.
<PropertyGroup>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
</PropertyGroup>
DisableTransitiveProjectReferences
De DisableTransitiveProjectReferences eigenschap bepaalt impliciete projectverwijzingen. Stel deze eigenschap in om impliciete ProjectReference items uit te true schakelen. Het uitschakelen van impliciete projectverwijzingen resulteert in niet-transitief gedrag dat vergelijkbaar is met het verouderde projectsysteem.
Wanneer deze eigenschap is true, heeft deze een vergelijkbaar effect op die van het instellen PrivateAssets="All" op alle afhankelijkheden van het afhankelijke project.
Als u deze eigenschap trueinstelt op, kunt u expliciete verwijzingen toevoegen aan alleen de projecten die u nodig hebt.
<PropertyGroup>
<DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
</PropertyGroup>
Eigenschappen met betrekking tot herstellen
Het herstellen van een pakket waarnaar wordt verwezen, installeert alle directe afhankelijkheden en alle afhankelijkheden van deze afhankelijkheden. U kunt pakketherstel aanpassen door eigenschappen zoals RestorePackagesPath en RestoreIgnoreFailedSources. Zie het hersteldoel voor meer informatie over deze en andere eigenschappen.
<PropertyGroup>
<RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>
</PropertyGroup>
ValidateExecutableReferencesMatchSelfContained
De ValidateExecutableReferencesMatchSelfContained eigenschap kan worden gebruikt om fouten met betrekking tot uitvoerbare projectverwijzingen uit te schakelen. Als .NET detecteert dat een zelfstandig uitvoerbaar project verwijst naar een frameworkafhankelijk uitvoerbaar project, of omgekeerd, genereert het respectievelijk fouten NETSDK1150 en NETSDK1151. Als u deze fouten wilt voorkomen wanneer de verwijzing opzettelijk is, stelt u de ValidateExecutableReferencesMatchSelfContained eigenschap in op false.
<PropertyGroup>
<ValidateExecutableReferencesMatchSelfContained>false</ValidateExecutableReferencesMatchSelfContained>
</PropertyGroup>
WindowsSdkPackageVersion
De WindowsSdkPackageVersion eigenschap kan worden gebruikt om de versie van het Windows SDK-doelpakket te overschrijven. Deze eigenschap is geïntroduceerd in .NET 5 en vervangt het gebruik van het FrameworkReference item voor dit doel.
<PropertyGroup>
<WindowsSdkPackageVersion>10.0.19041.18</WindowsSdkPackageVersion>
</PropertyGroup>
Notitie
We raden u niet aan om de Windows SDK-versie te overschrijven, omdat de Windows SDK-doelpakketten zijn opgenomen in de .NET 5+ SDK. Werk in plaats daarvan uw versie van de .NET SDK bij om te verwijzen naar het nieuwste Windows SDK-pakket. Deze eigenschap mag alleen worden gebruikt in zeldzame gevallen, zoals het gebruik van preview-pakketten of het overschrijven van de versie van C#/WinRT.
Run-gerelateerde eigenschappen
De volgende eigenschappen worden gebruikt voor het starten van een app met de dotnet run opdracht:
RunArguments
De RunArguments eigenschap definieert de argumenten die worden doorgegeven aan de app wanneer deze wordt uitgevoerd.
<PropertyGroup>
<RunArguments>-mode dryrun</RunArguments>
</PropertyGroup>
Tip
U kunt extra argumenten opgeven die aan de app moeten worden doorgegeven met behulp van de -- optie voor dotnet run.
RunWorkingDirectory
De RunWorkingDirectory eigenschap definieert de werkmap waarin het toepassingsproces moet worden gestart. Dit kan een absoluut pad of een pad zijn dat relatief is ten opzichte van de projectmap. Als u geen map opgeeft, OutDir wordt deze gebruikt als de werkmap.
<PropertyGroup>
<RunWorkingDirectory>c:\temp</RunWorkingDirectory>
</PropertyGroup>
Hostinggerelateerde eigenschappen
De volgende MSBuild-eigenschappen worden beschreven in deze sectie:
EnableComHosting
De EnableComHosting eigenschap geeft aan dat een assembly een COM-server biedt. Het instellen van de EnableComHosting to true impliceert ook dat EnableDynamicLoading is true.
<PropertyGroup>
<EnableComHosting>True</EnableComHosting>
</PropertyGroup>
Zie .NET-onderdelen beschikbaar maken voor COM voor meer informatie.
EnableDynamicLoading
De EnableDynamicLoading eigenschap geeft aan dat een assembly een dynamisch geladen onderdeel is. Het onderdeel kan een COM-bibliotheek of een niet-COM-bibliotheek zijn die kan worden gebruikt vanaf een systeemeigen host of als invoegtoepassing kan worden gebruikt. Het instellen van deze eigenschap op true de volgende effecten:
- Er wordt een .runtimeconfig.json-bestand gegenereerd.
- RollForward is ingesteld op
LatestMinor. - NuGet-verwijzingen worden lokaal gekopieerd.
<PropertyGroup>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
Gegenereerde bestandseigenschappen
De volgende eigenschappen betreffen code in gegenereerde bestanden:
DisableImplicitNamespaceImports
De DisableImplicitNamespaceImports eigenschap kan worden gebruikt om impliciete naamruimteimporten uit te schakelen in Visual Basic-projecten die gericht zijn op .NET 6 of een latere versie. Impliciete naamruimten zijn de standaardnaamruimten die globaal worden geïmporteerd in een Visual Basic-project. Stel deze eigenschap in om impliciete naamruimteimporten uit te true schakelen.
<PropertyGroup>
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
</PropertyGroup>
ImplicitUsings
De ImplicitUsings eigenschap kan worden gebruikt om impliciete global using instructies in C#-projecten in te schakelen en uit te schakelen die gericht zijn op .NET 6 of een latere versie en C# 10 of een latere versie. Wanneer de functie is ingeschakeld, voegt global using de .NET SDK instructies toe voor een set standaardnaamruimten op basis van het type project-SDK. Stel deze eigenschap true in op of enable schakel impliciete global using instructies in. Als u impliciete global using instructies wilt uitschakelen, verwijdert u de eigenschap of stelt u deze in op false of disable.
<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
Notitie
De sjablonen voor nieuwe C#-projecten waarop .NET 6 of hoger is gericht, zijn ImplicitUsings standaard ingesteld enable .
Als u een expliciete global using instructie wilt definiëren, voegt u een using-item toe.
Items
MSBuild-items zijn invoer in het buildsysteem. Items worden opgegeven volgens het type, de naam van het element. Dit zijn bijvoorbeeld CompileReference twee veelvoorkomende itemtypen. De volgende extra itemtypen worden beschikbaar gesteld door de .NET SDK:
U kunt bijvoorbeeld Include een van de standaarditemkenmerken gebruiken en Updateop deze items. Gebruik Include deze optie om een nieuw item toe te voegen en Update een bestaand item te wijzigen. Wordt bijvoorbeeld Update vaak gebruikt om een item te wijzigen dat impliciet is toegevoegd door de .NET SDK.
AssemblyMetadata
Het AssemblyMetadata item geeft een assemblykenmerk voor sleutel-waardepaar AssemblyMetadataAttribute op. De Include metagegevens worden de sleutel en de Value metagegevens worden de waarde.
<ItemGroup>
<AssemblyMetadata Include="Serviceable" Value="True" />
</ItemGroup>
InternalsVisibleTo
Het InternalsVisibleTo item genereert een InternalsVisibleToAttribute assemblykenmerk voor de opgegeven vriendassembly.
<ItemGroup>
<InternalsVisibleTo Include="MyProject.Tests" />
</ItemGroup>
Als de vriendassembly is ondertekend, kunt u een optionele Key metagegevens opgeven om de volledige openbare sleutel op te geven. Als u geen metagegevens opgeeft Key en er een $(PublicKey) beschikbaar is, wordt die sleutel gebruikt. Anders wordt er geen openbare sleutel toegevoegd aan het kenmerk.
PackageReference
Het PackageReference item definieert een verwijzing naar een NuGet-pakket.
Het Include kenmerk geeft de pakket-id op. Het Version kenmerk geeft het versie- of versiebereik op. Zie Versiebereiken voor informatie over het opgeven van een minimale versie, maximale versie, bereik of exacte overeenkomst.
Het projectbestandsfragment in het volgende voorbeeld verwijst naar het System.Runtime-pakket .
<ItemGroup>
<PackageReference Include="System.Runtime" Version="4.3.0" />
</ItemGroup>
U kunt ook afhankelijkheidsassets beheren met behulp van metagegevens zoals PrivateAssets.
<ItemGroup>
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
Zie Pakketverwijzingen in projectbestanden voor meer informatie.
TrimmerRootAssembly
Met TrimmerRootAssembly het item kunt u een assembly uitsluiten van bijsnijden. Bijsnijden is het proces voor het verwijderen van ongebruikte onderdelen van de runtime uit een verpakte toepassing. In sommige gevallen kan het bijsnijden de vereiste verwijzingen onjuist verwijderen.
Met de volgende XML wordt de System.Security assembly uitgesloten van bijsnijden.
<ItemGroup>
<TrimmerRootAssembly Include="System.Security" />
</ItemGroup>
Zie Opties voor bijsnijden voor meer informatie.
Gebruiken
Using Met het item kunt u globaal een naamruimte opnemen in uw C#-project, zodat u geen instructie hoeft toe te voegen using voor de naamruimte boven aan uw bronbestanden. Dit item is vergelijkbaar met het Import item dat kan worden gebruikt voor hetzelfde doel in Visual Basic-projecten. Deze eigenschap is beschikbaar vanaf .NET 6.
<ItemGroup>
<Using Include="My.Awesome.Namespace" />
</ItemGroup>
U kunt het Using item ook gebruiken om globale using <alias> en using static <type> richtlijnen te definiëren.
<ItemGroup>
<Using Include="My.Awesome.Namespace" Alias="Awesome" />
</ItemGroup>
Bijvoorbeeld:
<Using Include="Microsoft.AspNetCore.Http.Results" Alias="Results" />Stootglobal using Results = global::Microsoft.AspNetCore.Http.Results;<Using Include="Microsoft.AspNetCore.Http.Results" Static="True" />Stootglobal using static global::Microsoft.AspNetCore.Http.Results;
Zie instructie gebruiken voor meer informatie over aliasrichtlijnen using en using static <type> richtlijnen.
Metagegevens van items
Naast de standaard MSBuild-itemkenmerken worden de volgende metagegevenstags van items beschikbaar gesteld door de .NET SDK:
CopyToPublishDirectory
De CopyToPublishDirectory metagegevens op een MSBuild-item bepalen wanneer het item wordt gekopieerd naar de publicatiemap. Toegestane waarden zijn PreserveNewest, waarmee alleen het item wordt gekopieerd als het is gewijzigd, Alwayswaardoor het item altijd wordt gekopieerd en Neverdat nooit het item kopieert. Vanuit het oogpunt van prestaties is het PreserveNewest beter omdat hiermee een incrementele build wordt ingeschakeld.
<ItemGroup>
<None Update="appsettings.Development.json" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
LinkBase
Voor een item dat zich buiten de projectmap en de bijbehorende submappen bevindt, gebruikt het publicatiedoel de metagegevens van het item Koppelen om te bepalen waar het item naartoe moet worden gekopieerd. Linkbepaalt ook hoe items buiten de projectstructuur worden weergegeven in het Solution Explorer venster van Visual Studio.
Als Link dit niet is opgegeven voor een item dat zich buiten de projectcone bevindt, wordt dit standaard ingesteld %(LinkBase)\%(RecursiveDir)%(Filename)%(Extension)op . LinkBase hiermee kunt u een verstandige basismap opgeven voor items buiten de projectcone. De maphiërarchie onder de basismap blijft behouden via RecursiveDir. Als LinkBase dit niet is opgegeven, wordt deze weggelaten uit het Link pad.
<ItemGroup>
<Content Include="..\Extras\**\*.cs" LinkBase="Shared"/>
</ItemGroup>
In de volgende afbeelding ziet u hoe een bestand dat is opgenomen via het vorige item Include glob, wordt weergegeven in Solution Explorer.