Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En ändringsvåg är en uppsättning beteendeändringar i MSBuild som du kan välja bort genom att ange en viss flagga som en miljövariabel. Syftet med detta är att varna dig för potentiellt störande ändringar så att du har flexibilitet att anpassa dig till dessa ändringar innan de blir standardfunktioner. Alla funktioner i en specifik ändringsvåg kan bara aktiveras eller inaktiveras tillsammans, inte individuellt.
När du uppgraderar till en ny version av MSBuild aktiveras ändringar som potentiellt bryter som standard, men om en funktion påverkar ditt bygge negativt kan du enkelt inaktivera den vågen av ändringar. Varje ändringsvåg identifieras av ett MSBuild-versionsnummer (till exempel 16.8), men om du ställer in ändringsvågen styrs endast vissa funktioner som kan påverka byggprocessen, inte alla ändringar i den MSBuild-versionen. En lista över funktionerna i varje ändringsvåg visas senare i den här artikeln. Om du inaktiverar en ändringsvåg inaktiveras även ändringsvågor av högre versioner.
Avregistrera dig från funktioner för ändringsvåg
Om du vill inaktivera funktionerna i en ändringsvåg anger du miljövariabeln MSBuildDisableFeaturesFromVersion till ändringsvågen (eller MSBuild-versionen) som innehåller den funktion som du vill inaktiverad. Det här är den version av MSBuild som funktionerna har utvecklats för. Se mappningen av ändringsvågor till följande funktioner.
Bestående MSBuild-processer behåller det värde för MSBuildDisableFeaturesFromVersion som de startade med. När du har ändrat miljövariabeln stänger du av beständiga byggprocesser innan du kör en annan version. För versioner som körs med .NET CLI använder du dotnet build-server shutdown. För versioner som körs med Visual Studio eller MSBuild.exestänger du Visual Studio och avslutar eventuella återstående MSBuild.exe processer. Annars kan återanvända processer fortsätta att använda det tidigare värdet och projekt som skapats parallellt kan använda olika värden.
MSBuildDisableFeaturesFromVersion -värden
Du får en varning och/eller återställs till en specifik våg om du inte anger MSBuildDisableFeaturesFromVersion till en giltig våg för ändringar. I följande tabell visas de möjliga inställningarna:
MSBuildDisableFeaturesFromVersion värde |
Resultat | Får du en varning? |
|---|---|---|
| Inaktivera | Aktivera alla ändringsvågor, vilket innebär att alla funktioner bakom varje ändringsvåg är aktiverade. | Nej |
Alla giltiga och aktuella ändringsvågor (till exempel 16.8) |
Inaktivera alla funktioner bakom ändringsvågen 16.8och högre. |
Nej |
Ogiltigt värde (till exempel 16.9 när giltiga värden är 16.8 och 16.10) |
Standardisera till det närmaste giltiga värdet (stigande). Om du till exempel ställer in 16.9 kommer du som standard att hamna på 16.10. |
Nej |
Utanför rotation (till exempel 17.1 när den högsta vågen är 17.0) |
Justera mot närmaste giltiga värde. Till exempel 17.1 fäster till 17.0och 16.5 fäster till 16.8 |
Ja |
Ogiltigt format (till exempel 16x8, 17_0, garbage) |
Aktivera alla ändringsvågor, vilket innebär att alla funktioner bakom varje ändringsvåg är aktiverade. | Ja |
Ändra vågor och tillhörande funktioner
Nuvarande rotation för ändringsvågor
18,12
- Flertrådade byggen använder en tom sentinel som aktuell katalog, kontrollerar CWD efter jobb och identifierar skrivningar med relativa sökvägar som inte har lösts när projektet/bygget slutförs.
- TaskHosts som används för att köra en aktivitet utanför processen under
-mthålls anslutna till den process som startade dem och avslutas tillsammans med den, i stället för att förbli tillgängliga för andra processer att återanvända. TaskHosts för en annan körning eller arkitektur påverkas inte. - Händelser som en aktivitet loggar från en TaskHost – utökade fel, varningar och meddelanden, kritiska meddelanden, telemetri och annan händelsetyp som routern inte räknade upp – når den överordnade processen i stället för att kasseras.
- RAR skriver en strukturerad sökhändelse för varje referens i stället för ett meddelande för varje avvisad sammansättningskandidat. Den här ändringen minskar storleken på binärloggen. Händelsens standardmeddelande använder den invarianta kulturen, medan konsolen och terminalloggarna återger den med den aktuella användargränssnittskulturen. Ställ in
MSBUILDDISABLEFEATURESFROMVERSION=18.12för att behålla enskilda kandidatmeddelanden. - RAR loggar nu strukturerade händelser för detaljer om beroenden med versionskonflikter. Dessa händelser ersätter stora textmeddelanden för MSB3277 varningar och diagnostik med låg prioritet.
- Händelserna innehåller angripar- och offeridentiteter, beroendekedjor och källobjekt.
- Händelser renderar invarianta engelska meddelanden från deras strukturerade data utan att överföra lokaliserade formatsträngar. Inbyggda användarriktade loggare återger dem i den aktiva användargränssnittskulturen. andra konsumenter kan använda de strukturerade fälten för att göra detsamma.
- Läsare med strikt tolkning som är äldre än binärloggformat 28 avvisar det nyare formatet. Framåtkompatibla läsare hoppar över de strukturerade konfliktposterna.
- Ange
MSBUILDDISABLEFEATURESFROMVERSION=18.12för att återställa de äldre lokaliserade oformaterade oformaterade händelserna.
18.11
- XmlPeek, XmlPoke och XslTransformation är som standard inställda på att förbjuda inbäddade DTD:ar
- Out-of-proc-kommunikation använder större buffertar för förhandsläsning och förbuffrar TaskHost-paketens innehåll för att minska pipe-läsningar.
- Återställningen tar inte längre bort en ProjectRootElementCache som läser in ändrade filer från disken igen, så bygget som följer på en implicit återställning parsar inte importkedjan igen.
-
Använd optimerad MSBuild-filspecifikationsmatchning och uppräkning. Regex-backade filglober använder kulturinvariant skiftlägesvikning; ställ in
MSBUILDUSELEGACYCULTURESENSITIVEFILEGLOBS=1för att bevara äldre skiftlägesvikning enligt aktuell kultur utan att inaktivera andra Wave 18.11-funktioner. -
Isolerade (
-graph -isolate) byggen misslyckas deterministiskt med MSB4252 på en referens mellan projekt till ett mål som inte deklareras viaProjectReferenceTargets, i stället för att lyckas om det refererade projektet råkade bygga på den noden tidigare.
18.10
-
Tolka relativa projektsökvägar utifrån den logiska aktuella Unix-katalogen från
PWD, så att byggen under symlänkade kataloger ger stabila fullständiga projektsökvägar och relaterade utdatasökvägar. -
Återställningen skickas
ExcludeRestorePackageImports=truesom en global egenskap så NuGets återställning utlöser inte längre en andra utvärdering av varje projekt. -
-getProperty/-getItem(utan mål) stoppa utvärderingen efter passet som genererar begärda data i stället för att köra en fullständig utvärdering, så att du undviker senare pass, till exempel målregistrering.
18,9
- GenerateResource: Inskrivna ResX-data-/metadataposter i Mark-of-the-Web-filer behandlas nu som obetrodda och blockerade med MSB3821; avblockera filen (eller ange MSBUILDDISABLEFEATURESFROMVERSION=18.9) för att återställa tidigare beteende. ResXFileRef-poster blockeras alltid oavsett den här vågen.
- TaskHost-buffertar med namnet pipe är som standard 1 MB (var 128 KB), vilket minskar sändningstrycket för stora TaskHostConfiguration-paket. Kan justeras via MSBUILDNODECONNECTIONBUFFERSIZE
18.8
- RAR-uppgift: för flera indataegenskaper matchas relativa sökvägar mot projektkatalogen (inte processens aktuella katalog)
- Konsol-, parallellkonsol- och terminalloggare skriver ut sökvägarna till loggfiler som skrivits av registrerade loggare (till exempel filloggare och binär loggare) som en del av sammanfattningen av slutet av bygget.
18.7
- Kopiera uppgiftsförsök på ERROR_ACCESS_DENIED på plattformar som inte är Windows för att hantera tillfälliga låskonflikter (t.ex. macOS CoW-filsystem)
- Åtgärda ASP.NET-webbplatsprojekt för att hantera netstandard2.0-beroenden – Skicka TargetFrameworkVersion till RAR-aktiviteten och kopiera fasaden netstandard.dll för webbprojekt för .NET Framework 4.7.1 och senare.
18.6
- AbsolutePath.GetCanonicalForm-optimering – undvik dyra Path.GetFullPath-anrop när sökvägar inte behöver kanoniskisering
- TaskHostTask vidarebefordrar globala egenskaper på begärandenivå (t.ex. MSBuildRestoreSessionId) till det TaskHost som körs utanför processen i -mt-läge
- Åtgärda ShouldTreatWarningAsError i OOP TaskHost som kontrollerar fel samling (WarningsAsMessages i stället för WarningsAsErrors)
- Åtgärda ToolTask-låsning när verktyget skapar barnbarnsprocesser som ärver stdout-/stderr-rörhandtag
18,5
- FindUnderPath- och AssignTargetPath-uppgifter genererar inte längre ogiltiga sökvägstecken när du använder TaskEnvironment.GetAbsolutePath
- AssignTargetPath i Linux tar hänsyn till filsystemets skillnad mellan stora och små bokstäver i stället för att alltid bortse från den
18.4
Ändringsvågorna är inte längre i rotation
16.8
- Aktivera NoWarn-
- Trunkera mål/uppgifter hoppade över loggmeddelanden till 1 024 tecken
- Expandera inte fullständiga enhetsglober med falskt villkor
16.10
- Fel när en egenskapsutvidgning i ett villkor har blanksteg
- Tillåt anpassad CopyToOutputDirectory-plats med TargetPath-
- Tillåt användare som har vissa specialtecken i sitt användarnamn att bygga framgångsrikt när de använder exec
- återställningsåtgärder misslyckas när en SDK är olösbar
- Optimera glob-mönstermatchning
17.0
- Scheduler bör respektera BuildParameters.DisableInprocNode
- Kompilera inte mönstermatchande regexar på .NET Framework
- Standard för att transitivt kopiera innehållsobjekt
-
Referensbibliotek placeras nu inte längre i katalogen
binsom standardinställning (återställs här och återinförs här) - Förbättra felsökningsupplevelsen: lägg till den globala växeln MSBuildDebugEngine; Mata in binär logger från BuildManager; skriva ut statisk graf som .dot-fil
- Åtgärda dödläge i BuildManager mot LoggingService
- Optimera diag-nivå för filloggare och konsolloggare
- Uppdaterade kontroller av optimerade oföränderliga filer
- Lägg till Microsoft.IO.Redist för kataloguppräkning
- Processomfattande cachelagring av ToolsetConfigurationSection
- Normalisera RAR-utdatasökvägar
17.4
- Respektera deps.json vid inläsning av sammansättningar
-
Överväg
Platformsom standard vid Plattformförhandling - Lägga till godkända SDK-namnmatchningsmönster i SDK-manifest
- Kast varning som indikerar ogiltiga projekttyper
- MSBuild-server
17.6
- Analysera ogiltig egenskap under mål
- Eliminera projektsträngscachen
- Logga ett fel när ingen angiven sökväg för en import finns
- Loggsammansättning läser in
- AnyHaveMetadataValue returnerar falskt när en tom lista passeras
- Loggobjektets självexpansion
17.8
- [RAR] Gör inte I/O på SDK-tillhandahållna referenser
- Ta bort målfil innan du kopierar
- Flytta från SHA1 till SHA256 för Hash-aktivitet
-
Avskrivning av anpassade härledda BuildEventArgs: funktionen kan endast avaktiveras om BinaryFormatter tillåts vid körning genom att redigera
MSBuild.runtimeconfig.json
17.10
-
AppDomain-konfigurationen serialiseras utan att använda BinFmt – funktionen kan endast väljas bort om BinaryFormatter tillåts vid körning genom att redigera
MSBuild.runtimeconfig.json. Observera att all användning av BinaryFormatter är osäker. - Warning om anpassade serialiseringshändelser som standard i .NET framework
- Cache SDK-resolverdata för hela processen
- Målparametrarna tas bort, vilket innebär att symbolen ";" i parameterns målnamn alltid behandlas som avgränsare
- Lägga till länkmetadata till resurser i AssignLinkMetadata-målet
- Ändra utdata för versionsväxel till slut med en ny rad
- Ladda NuGet.Frameworks i sekundär AppDomain (endast MSBuild.exe)
- Uppdatera egenskaper när miljön har ändrats
- Exec-aktiviteten trimmar inte bort inledande blanksteg för ConsoleOutput
- Inför överlagrade versioner av [MSBuild]::StableStringHash
- Se till att kodningen av standardutdata och -fel är konsekvent med konsolkodsidan för ToolTask
17.12
- Log TaskParameterEvent för skalära parametrar
- Convert.ToString under en egenskapsutvärdering använder InvariantCulture för alla typer
- Åtgärda överdelning av build-resultat i ResultsCache
- Lägg till ParameterName och PropertyName i TaskParameterEventArgs
- Avge evalrekvisita om det begärs av en mottagare
- Läs in Microsoft.DotNet.MSBuildSdkResolver i standardinläsningskontexten (endast MSBuild.exe)
17.14
-
. SLNX-stöd – använd den nya parsern för .sln och .slnxåterställdes efter att kompatibilitetsproblem upptäckts -
Stöd för anpassad kultur i RAR– se 11607 för mer information - VS-telemetri
18.3
FAQ
Varför rikta in sig på alla andra versioner för att rotera ut ändringsvågor?
Vi anser att detta är tillräckligt med tid för att föra diskussioner med de drabbade och bidra till att anpassa sig till förändringarna.
Varför en miljövariabel och inte en projektegenskap?
Det finns scenarier där vi vill placera en funktion under en ändringsvåg innan MSBuild har läst in projektet. Därför kräver ändringsvågor att miljövariabler används.
Varför avregistrera dig för att anmäla dig?
Valfri avregistrering är en bättre metod för oss, annars skulle vi sannolikt få begränsad feedback när en funktion påverkar kundens byggprocesser.