documentation/Changelog.md
This version of MSBuild shipped with Visual Studio 2022 version 17.0.0 and .NET SDK 6.0.100.
17 and uses Visual Studio 2022 versions of tasks where appropriate.MSBuildCopyContentTransitively is now on by default, ensuring consistency in output folders on incremental builds.GetType() can no longer be called in property functions.TargetSkippedEventArgs now has TargetSkipReason and OriginalBuildEventContext (#6402, #6577). Thanks, @KirillOsenkov!TaskStarted events now log line and column (#6399). Thanks, @KirillOsenkov!MSBuildDebugEngine is set, MSBuild will create binary logs for all operations to MSBUILDDEBUGPATH regardless of how it is called (#6639, #6792).ProjectReferences can now negotiate Platform (#6655, #6724, #6889).TaskLoggingHelper.LogsMessagesOfImportance to determine if any attached logger would preserve a log message before constructing it (to save time in the not-being-logged case) (#6381, #6737).ImplicitUsings and Using items (#6755), InternalsVisibleTo (#6778), Windows Forms properties (#6860), DebugType (#6849), and SatelliteResourceLanguages (#6861). Thanks, @pranavkm, @DamianEdwards, @RussKie, and @drewnoakes!TaskLoggingHelper.IsTaskInputLoggingEnabled and avoid redundant logging of inputs (#6803).BuildParameters.DisableInprocNode now applies to more processes (#6400).VCTargetsPath now defaults to v170 (#6550).Building with tools version "Current" (#6627). Thanks, @KirillOsenkov!MSBuildCopyContentTransitively is now on by default, ensuring consistency in output folders on incremental builds (#6622, #6703).$(CoreCrossTargetingTargetsPath) was removed (#6668). Thanks, @Nirmal4G!MSB4213 (#6640).GetType() can no longer be called in property functions (#6769).System.Text.Json 5.0.2 (#6784). Thanks, @JakeRadMSFT!MSBUILDNOINPROCNODE (#6385).BeforeTargets="ValidateSolutionConfiguration" (#6454).Project's DebuggerDisplay (#6650).ResolveAssemblyReferences output paths are now output in normalized form (#6533).MSBUILD_EXE_PATH (#6683, #6746).EvaluateStop ETW events are now automatically correlated with EvaluateStart (#6725).Microsoft.NET.StringTools (#6740).ExecuteSubmission and LoggingService (#6717).CombineTargetFrameworkInfoProperties no longer fails on portable framework names (#6699).GenerateBindingRedirects (#6726).InternableString.ExpensiveConvertToString (#6798).System.* assemblies updated (#6830).BuildManager and LoggingService (#6837).XslTransformation (#6863, #6946). Thanks, @lanfeust69!TargetFramework using new intrinsics (#5799).Microsoft.DotNet.XUnitExtensions package from Arcade instead of our fork (#6638).BannedApiAnalyzers (#6675).dotnet/runtime (#5656). Thanks, @elachlan!This version of MSBuild shipped with Visual Studio 2019 version 16.11.0 and .NET SDK 5.0.400.
amd64\MSBuild.exe executable.MSBuildFileVersion (4-part, matches file version) and MSBuildSemanticVersion (matches package versions) are now available for use (#6534).SignFile task is now available in MSBuild on .NET 5.0 (#6509). Thanks, @Zastai!MSBuildFileVersion (4-part, matches file version) and MSBuildSemanticVersion (matches package versions) are now available for use (#6534).ResolveAssemblyReference now include an approximation of the "size" of the RAR request (#6410).ProjectRootElement.Reload (#6457).BuildManager (#6412).ResolveAssemblyReferences precomputed cache files to be in read-only locations (#6393).al.exe is used when targeting 64-bit architectures (for real this time) (#6484).ProduceOnlyReferenceAssembly no longer expect debug symbols to be produced (#6511). Thanks, @Zastai!MSBuild.exe supports long paths (and other .NET default behaviors) (#6562).This version of MSBuild shipped with Visual Studio 2019 version 16.10.2 and will ship with .NET SDK 5.0.302.
MakeRelative property function that dropped trailing slashes (#6513). Thanks, @dsparkplug and @pmisik!This version of MSBuild shipped with Visual Studio 2019 version 16.10.2 and will ship with .NET SDK 5.0.302.
MakeRelative property function that dropped trailing slashes (#6513). Thanks, @dsparkplug and @pmisik!This version of MSBuild shipped with Visual Studio 2019 version 16.10.1 and .NET SDK 5.0.301.
-t:Project (#6465).This version of MSBuild shipped with Visual Studio 2019 version 16.9.7.
This version of MSBuild shipped with Visual Studio 2019 version 16.10.0 and .NET SDK 5.0.300.
AdditionalTargetFrameworkInfoProperty items to indicate that referencing projects should get those properties exposed as AdditionalPropertiesFromProject metadata on resolved reference items. (#5994).Unzip task now accepts Include and Exclude arguments to filter what is extracted from the zip file (#6018). Thanks, @IvanLieckens!-graph:noBuild command line argument can be used to validate that a graph is buildable without actually building it (#6016).TaskParameterEventArgs allow logging task parameters and values in a compact, structured way (#6155). Thanks, @KirillOsenkov!ResolveAssemblyReferences can now consume information about assemblies distributed as part of the SDK (#6017).ProjectInstance from a ProjectLink (#6262).ProjectEvaluationFinished now has fields for properties and items (#6287). Thanks, @KirillOsenkov!WriteCodeFragment can now write assembly attributes of specified types, and infers some common types (#6285). Thanks, @reduckted!-detailedSummary option now accepts a boolean argument, preventing dumping details to the console logger when building with -bl -ds:false (#6338). Thanks, @KirillOsenkov!EmbedInBinlog as well as MSBuild projects (#6339). Thanks, @KirillOsenkov!FindInvalidProjectReferences task is now available in .NET Core/5.0+ scenarios (#6365).ResolveAssemblyReferences (#5929, #6094).Span<T>-based methods are used on .NET Framework MSBuild as well as .NET 5.0 (#6130).MSB4064 error to include information about the loaded task that didn't have the argument (#5945). Thanks, @BartoszKlonowski!IgnoreInvalidImports, empty imports are also allowed (#6222).Log.HasLoggedError now respects MSBuildWarningsAsErrors (#6174).TargetPath metadata is now respected on items that copy to output directories, and takes precedence over Link (#6237).Restore operation now fails when SDKs are unresolvable (#6312).MSBuild.exe.config now has explicit binding redirects for all assemblies in the MSBuild VSIX (#6334).XamlPreCompile and the CoreCompile C## compiler invocation (#6093). Thanks, @huoyaoyuan!UseUtf8Encoding in ToolTasks (#6188).al.exe is used when targeting 64-bit architectures (#6207).BadImageReferenceException in ResolveAssemblyReferences (#6240, #6270). Thanks, @FiniteReality!Exec’s generated batch files, allowing builds as users with some special characters in their Windows username (#6233).LogProjectStarted (#6437).main.-- is a valid argument prefix (#6205). Thanks, @BartoszKlonowski!⚠ This release should have been versioned 16.9.1 but was erroneously released as 16.9.0.
This version of MSBuild shipped with Visual Studio 2019 version 16.9.3.
This version of MSBuild shipped with Visual Studio 2019 version 16.9.0 and .NET SDK 5.0.200.
MSB3277 warnings now include information about the assembly identities involved, instead of saying to rerun under higher verbosity.EmbeddedResources, for instance to have a resource named a.cs.template.$(BaseOutputPath), with the default value bin.Updates are no longer case-sensitive, fixing a regression in MSBuild 16.6 (#5888).ParentBuildEventContext now includes a parent MSBuild task if relevant, enabling proper nesting in GUI viewers.MSBuild.exe exit code.MSB4006 error has been enhanced to describe the cycle when possible (#5711). Thanks, @haiyuzhu!.MSBUILDDEBUGCOMM (#5759).--argument) as well as single hyphens (-argument) and forward slashes (/argument) (#5786). Thanks, @BartoszKlonowski!$(BaseOutputPath), with the default value bin (#5238). Thanks, @Nirmal4G!Microsoft.Build.Exceptions.CircularDependencyException is now public (#5988). Thanks, @tflynt91!EvaluationId is now preserved in the ProjectStarted event, allowing disambiguating related project start events (#5997). Thanks, @KirillOsenkov!ResolveAssemblyReference task can now optionally emit items describing unresolved assembly conflicts (#5990).ProjectCache API to enable higher-order build systems (#5936).$(NoWarn) (which formerly applied only to targets that opted in like the C## compiler) are now treated as $(MSBuildWarningsAsMessages) (#5671).$(WarningsAsErrors ) (which formerly applied only to targets that opted in like the C## compiler) are now treated as $(MSBuildWarningsAsErrors) (#5774).MSB3277 warnings now include information about the assembly identities involved, instead of saying to rerun under higher verbosity (#5798).MSB5009 errors now indicate the project in the solution that is causing the nesting error (#5835). Thanks, @BartoszKlonowski!EmbeddedResources, for instance to have a resource named a.cs.template (#5824).ProjectInSolution.AbsolutePath returns a normalized full path when possible (#5949).AllowFailureWithoutError now does what it said it would do (#5743).ProjectReferences to .vcxproj projects from multi-targeted .NET projects no longer overbuild (#5838).InternalsVisibleTo to obsolete test assemblies (#5914). Thanks, @SingleAccretion!OS is set (#5916).Updates are no longer case-sensitive, fixing a regression in MSBuild 16.6 (#5888).Exec task will now no longer emit the expanded Command to the log on failure (#5962). Thanks, @tmds!RoslynCodeTaskFactory now no longer rebuild for every use, even with identical inputs (#5988). Thanks, @KirillOsenkov!ParentBuildEventContext now includes a parent MSBuild task if relevant (#5966). Thanks, @KirillOsenkov!MSBuild.exe exit code (#6006).ResolveAssemblyReferences (#5973).using statements (#5761).