Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
4bf3189
Initial plan
Copilot Dec 3, 2025
101bae4
Add comprehensive spec document for threading fixes and task migratio…
Copilot Dec 3, 2025
08bd63a
Update spec with race condition fix details and concurrent collection…
Copilot Dec 3, 2025
645bfec
Implement File I/O task migration to multithreading API
Copilot Dec 5, 2025
40f9447
remove document
JanProvaznik Dec 10, 2025
7f3f946
taskenvironment can't be null
JanProvaznik Dec 10, 2025
efbdd60
Address PR review comments: fix redundant path resolution and comments
JanProvaznik Dec 10, 2025
9cce81f
Use AbsolutePath struct for type safety in file I/O tasks
JanProvaznik Dec 10, 2025
def225d
refactoring
JanProvaznik Dec 10, 2025
140104f
update tests with taskenvironment
JanProvaznik Dec 16, 2025
1a6c0bc
inject taskenv to all tests
JanProvaznik Dec 16, 2025
7114c55
fix makedir for invalid directories
JanProvaznik Dec 16, 2025
5fd56aa
Merge branch 'main' into copilot/outline-threading-fixes-logic-updates
JanProvaznik Dec 17, 2025
7dc368c
makedir fix optimization
JanProvaznik Dec 19, 2025
e2b230b
filestate
JanProvaznik Dec 19, 2025
49a6fd4
Fix unhandled exception in /getItem and /getTargetResult for items wi…
Copilot Jan 5, 2026
9ba8f3e
Log SDK environment variable messages only when values differ (#12918)
Copilot Jan 5, 2026
5fccf5a
Localized file check-in by OneLocBuild Task: Build definition ID 9434…
dotnet-bot Jan 5, 2026
fb77584
Localized file check-in by OneLocBuild Task: Build definition ID 9434…
YuliiaKovalova Jan 5, 2026
2392c79
Fix terminal logger quiet mode to show project context for warnings/e…
Copilot Jan 6, 2026
3d8dd2e
Replace OpenTelemetry with Microsoft.VisualStudio.Telemetry for VS (#…
YuliiaKovalova Jan 7, 2026
b8e744f
Localized file check-in by OneLocBuild Task: Build definition ID 9434…
dotnet-bot Jan 7, 2026
bddfab6
[main] Source code updates from dotnet/dotnet (#12979)
dotnet-maestro[bot] Jan 7, 2026
a4a499d
pr feedback 1 - filestate, delete caching
JanProvaznik Jan 7, 2026
65f0d01
revert wrong change
JanProvaznik Jan 7, 2026
7f61524
fix test
JanProvaznik Jan 7, 2026
a207afe
simplify filestate
JanProvaznik Jan 7, 2026
e58fe21
absolutize logging
JanProvaznik Jan 7, 2026
8b3575a
absolutize logging + fix bug Copy
JanProvaznik Jan 7, 2026
a8434cb
eliminate test data serialization warnings (#12983)
JanProvaznik Jan 7, 2026
0a54973
Add the feature flag that allows users to opt out automatic UTF8 cons…
GangWang01 Jan 7, 2026
dc7f357
Polyfill clean up and source package organization (#12977)
DustinCampbell Jan 7, 2026
b708104
fix compile errors
JanProvaznik Jan 8, 2026
95febbb
original property in AbsolutePath
JanProvaznik Jan 8, 2026
68da521
use consistently abstraction
JanProvaznik Jan 8, 2026
31b18c0
fix test
JanProvaznik Jan 8, 2026
3169478
catch exception during normalization and log them with appropriate codes
JanProvaznik Jan 8, 2026
9da1bd7
Localized file check-in by OneLocBuild Task: Build definition ID 9434…
dotnet-bot Jan 8, 2026
155bc02
nullable value types work this way...
JanProvaznik Jan 8, 2026
9aac1ad
Merge branch 'main' into copilot/outline-threading-fixes-logic-updates
JanProvaznik Jan 8, 2026
09c7666
Add documentation for enabling binlog collection via env var (#12805)
YuliiaKovalova Jan 9, 2026
3f8a08b
Support multiple binary logs from command line arguments (#12706)
Copilot Jan 9, 2026
d3d459b
rename Original to OriginalValue
JanProvaznik Jan 9, 2026
3b83621
Add VcxprojReader.exe to ngenApplications (#12986)
YuliiaKovalova Jan 9, 2026
b8cacb7
Add HostServices support in Out-of-Process Task Host (#12753)
YuliiaKovalova Jan 9, 2026
330dcee
clarify naming in helper class
JanProvaznik Jan 9, 2026
cc674f3
nit: indentation
JanProvaznik Jan 9, 2026
827ea11
restore relative path tracing
JanProvaznik Jan 9, 2026
78ad13e
more copy consistency
JanProvaznik Jan 9, 2026
ede58b9
more consistency
JanProvaznik Jan 9, 2026
f469379
[main] Update dependencies from dotnet/roslyn (#13002)
dotnet-maestro[bot] Jan 12, 2026
7c44a50
[main] Update dependencies from dotnet/arcade (#13000)
dotnet-maestro[bot] Jan 12, 2026
7cf4f24
Localized file check-in by OneLocBuild Task: Build definition ID 9434…
dotnet-bot Jan 12, 2026
6ef3f7b
Add telemetry tracking for task factory names and runtime usage (#12989)
Copilot Jan 12, 2026
712f8ef
[main] Source code updates from dotnet/dotnet (#12987)
dotnet-maestro[bot] Jan 12, 2026
6883d6d
Localized file check-in by OneLocBuild Task: Build definition ID 9434…
dotnet-bot Jan 12, 2026
bd54b25
Snap for VS 18.3 and update branding to VS 18.4 (#13005)
Copilot Jan 12, 2026
21efb94
[main] Source code updates from dotnet/dotnet (#13012)
dotnet-maestro[bot] Jan 13, 2026
39e218c
Add telemetry to categorize build failure reasons (#13007)
Copilot Jan 13, 2026
5284a3f
Update MicrosoftBuildVersion in analyzer template (#13011)
github-actions[bot] Jan 13, 2026
75edd3c
Update OptProf drop metadata configuration (#13020)
YuliiaKovalova Jan 14, 2026
d7c46da
Fix MSB1025 error when using DistributedFileLogger (-dfl flag) (#13036)
Copilot Jan 15, 2026
633ca60
CmdLine parsing was extracted from XMake and the implementation is vi…
MichalPavlik Jan 16, 2026
49c469f
Remove TryGetAbsolutePath
AR-May Jan 16, 2026
5025a99
Make task environment path absolutization not throw. (#13035)
AR-May Jan 16, 2026
58c73e6
Fix flaky test TestTerminalLoggerTogetherWithOtherLoggers (#13044)
Copilot Jan 16, 2026
4618ab5
Enlighten more tasks that require no change (#13045)
AR-May Jan 16, 2026
b703e1a
[main] Update dependencies from dotnet/roslyn (#13050)
dotnet-maestro[bot] Jan 19, 2026
c81b56d
[main] Update dependencies from dotnet/arcade (#13048)
dotnet-maestro[bot] Jan 19, 2026
825180b
Add support for MSBUILD_LOGGING_ARGS (#12993)
YuliiaKovalova Jan 19, 2026
7b45424
[vs18.3] Update dependencies from dotnet/arcade (#13051)
dotnet-maestro[bot] Jan 19, 2026
d6f451b
Fix MSBuildEventSource (#13030)
dfederm Jan 19, 2026
9b9e120
[vs18.3] Fix MSB1025 error when using DistributedFileLogger (-dfl fla…
github-actions[bot] Jan 19, 2026
c1ccadd
Localized file check-in by OneLocBuild Task: Build definition ID 9434…
dotnet-bot Jan 19, 2026
4004cf8
Merge branch 'main' into copilot/outline-threading-fixes-logic-updates
JanProvaznik Jan 19, 2026
446a15b
[main] Source code updates from dotnet/dotnet (#13031)
dotnet-maestro[bot] Jan 19, 2026
66b100c
fix revert
JanProvaznik Jan 19, 2026
9af2b2e
changewave throwing absolutepath creation
JanProvaznik Jan 19, 2026
4ea2ca6
test
JanProvaznik Jan 19, 2026
1038065
Add incrementality tracking support and more detailed analysis of the…
YuliiaKovalova Jan 20, 2026
65d0f1a
[vs18.3] Fix the lifecycle of task host factory (#13022)
ViktorHofer Jan 20, 2026
4928b5d
revert changes needed by exceptions
JanProvaznik Jan 20, 2026
c6699f7
lockcheck bug!
JanProvaznik Jan 20, 2026
8c9b104
minor perf optimization
JanProvaznik Jan 20, 2026
f5be6d7
refactor
JanProvaznik Jan 20, 2026
24de14b
[automated] Merge branch 'vs18.3' => 'main' (#13055)
ViktorHofer Jan 20, 2026
9bdad8f
cleanup of driver behavior
JanProvaznik Jan 20, 2026
0a1e0ff
copy test
JanProvaznik Jan 20, 2026
408a20d
nullability analysis
JanProvaznik Jan 20, 2026
0ca49b1
test normalization
JanProvaznik Jan 20, 2026
38c6c70
Apply suggestions from code review
JanProvaznik Jan 20, 2026
4ee9a7a
fix path separators and normalization validation where that matters
JanProvaznik Jan 20, 2026
fe4193c
Merge branch 'copilot/outline-threading-fixes-logic-updates' of https…
JanProvaznik Jan 20, 2026
956df8d
Enable com support for clr4 in task host (#13033)
YuliiaKovalova Jan 20, 2026
3972042
[vs18.3] Set DotNetFinalVersionKind to release (#13066)
ViktorHofer Jan 20, 2026
574c4e2
Merge branch 'main' into merge/vs18.3-to-main
ViktorHofer Jan 20, 2026
51dab71
Add 'rel/d18.3' to insertion target branch options (#13067)
ViktorHofer Jan 20, 2026
9bca1d6
add OriginalValue property to AbsolutePath (#13077)
JanProvaznik Jan 21, 2026
c6161bc
[automated] Merge branch 'vs18.3' => 'main' (#13074)
ViktorHofer Jan 21, 2026
84ccfa1
Localized file check-in by OneLocBuild Task: Build definition ID 9434…
dotnet-bot Jan 21, 2026
309bd57
Refactor FileUtilities.cs and add methods for absolute paths. (#13079)
AR-May Jan 21, 2026
4f88e63
Merge branch 'main' into copilot/outline-threading-fixes-logic-updates
JanProvaznik Jan 21, 2026
b6e238c
revert
JanProvaznik Jan 21, 2026
89201ec
Limit extended flag usage to NET and CLR4 runtimes (#13080)
YuliiaKovalova Jan 21, 2026
fe494f4
[main] Update dependencies from nuget/nuget.client (#13065)
dotnet-maestro[bot] Jan 21, 2026
18fd718
Localized file check-in by OneLocBuild Task: Build definition ID 9434…
dotnet-bot Jan 21, 2026
efddbfc
Update to 10.0.1 references (#13072)
rainersigwald Jan 21, 2026
b9cd8c6
align with prior behavior
JanProvaznik Jan 22, 2026
0889314
Merge branch 'main' into copilot/outline-threading-fixes-logic-updates
JanProvaznik Jan 22, 2026
852ace8
inheritdoc
JanProvaznik Jan 23, 2026
a5de354
nits
JanProvaznik Jan 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .config/git-merge-flow-config.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
},
// Automate opening PRs to merge msbuild's vs18.0 (SDK 10.0.1xx) into vs18.3 (SDK 10.0.2xx, VS)
"vs18.0": {
"MergeToBranch": "main" // update to flow through vs18.3 after we fork for release
"MergeToBranch": "vs18.3"
},
// MSBuild latest release to main
// Automate opening PRs to merge msbuild's vs18.3 (SDK 10.0.2xx) into main
"vs18.3": {
"MergeToBranch": "main"
}
Expand Down
6 changes: 6 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,12 @@ dotnet_diagnostic.IDE0301.severity = suggestion
dotnet_diagnostic.IDE0305.severity = suggestion
dotnet_diagnostic.IDE0306.severity = suggestion

# Remove unnecessary nullable warning suppression
dotnet_diagnostic.IDE0370.severity = suggestion

# Remove unnecessary 'unsafe' modifier
dotnet_diagnostic.IDE0380.severity = suggestion

# Temporarily disable SA1010 "Opening square brackets should not be preceded by a space" until https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3687 is fixed
dotnet_diagnostic.SA1010.severity = none

Expand Down
82 changes: 82 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,90 @@ New files should use nullable types but don't refactor aggressively existing cod

Generate tests for new codepaths, and add tests for any bugs you fix. Use the existing test framework, which is xUnit with Shouldly assertions. Use Shouldly assertions for all assertions in modified code, even if the file is predominantly using xUnit assertions.

When making changes, check if related documentation exists in the `documentation/` folder (including `documentation/specs/`) and update it to reflect your changes. Keep documentation in sync with code changes, especially for telemetry, APIs, and architectural decisions.

Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.

## Performance Best Practices

MSBuild is performance-critical infrastructure. Follow these patterns:

### Switch Expressions for Dispatch Logic
Use tuple switch expressions for multi-condition dispatch instead of if-else chains:
```csharp
// GOOD: Clean, O(1) dispatch
return (c0, c1) switch
{
('C', 'S') => Category.CSharp,
('F', 'S') => Category.FSharp,
('V', 'B') when value.Length >= 3 && value[2] == 'C' => Category.VB,
_ => Category.Other
};

// AVOID: Verbose if-else chains
if (c0 == 'C' && c1 == 'S') return Category.CSharp;
else if (c0 == 'F' && c1 == 'S') return Category.FSharp;
// ...
```

### Range Pattern Matching
Use range patterns for numeric categorization:
```csharp
// GOOD: Clear and efficient
return errorNumber switch
{
>= 3001 and <= 3999 => Category.Tasks,
>= 4001 and <= 4099 => Category.General,
>= 4100 and <= 4199 => Category.Evaluation,
_ => Category.Other
};
```

### String Comparisons
- Use `StringComparer.OrdinalIgnoreCase` for case-insensitive HashSets/Dictionaries when the source data may vary in casing
- Use `char.ToUpperInvariant()` for single-character comparisons
- Use `ReadOnlySpan<char>` and `Slice()` to avoid string allocations when parsing substrings
- Use `int.TryParse(span, out var result)` on .NET Core+ for allocation-free parsing

### Inlining
Mark small, hot-path methods with `[MethodImpl(MethodImplOptions.AggressiveInlining)]`:
```csharp
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static bool IsCompilerPrefix(string value) => ...
```

### Conditional Compilation for Framework Differences
Use `#if NET` for APIs that differ between .NET Framework and .NET Core:
```csharp
#if NET
return int.TryParse(span, out errorNumber);
#else
return int.TryParse(span.ToString(), out errorNumber);
#endif
```

### Immutable Collections
Choose the right immutable collection type based on usage pattern:

**Build once, read many times** (most common in MSBuild):
- Use `ImmutableArray<T>` instead of `ImmutableList<T>` - significantly faster for read access
- Use `FrozenDictionary<TKey, TValue>` instead of `ImmutableDictionary<TKey, TValue>` - optimized for read-heavy scenarios

**Build incrementally over time** (adding items one by one):
- Use `ImmutableList<T>` and `ImmutableDictionary<TKey, TValue>` - designed for efficient `Add` operations returning new collections

```csharp
// GOOD: Build once from LINQ, then read many times
ImmutableArray<string> items = source.Select(x => x.Name).ToImmutableArray();
FrozenDictionary<string, int> lookup = pairs.ToFrozenDictionary(x => x.Key, x => x.Value);

// AVOID for read-heavy scenarios:
ImmutableList<string> items = source.Select(x => x.Name).ToImmutableList();
ImmutableDictionary<string, int> lookup = pairs.ToImmutableDictionary(x => x.Key, x => x.Value);
```

Note: `ImmutableArray<T>` is a value type. Use `IsDefault` property to check for uninitialized arrays, or use nullable `ImmutableArray<T>?` with `.Value` to unwrap.

## Working Effectively

#### Bootstrap and Build the Repository
Expand Down
8 changes: 8 additions & 0 deletions .vsts-dotnet-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ jobs:
steps:
- powershell: |
$versionsFile = "eng/Versions.props"

[xml]$xml = Get-Content $versionsFile
$finalVersionKind = $xml.Project.PropertyGroup.DotNetFinalVersionKind
if ($finalVersionKind -ne 'release') {
Write-Host "Since it is not released, skip the version bump check.";
return
}

$changedFiles = git diff --name-only HEAD HEAD~1
$changedVersionsFile = $changedFiles | Where-Object { $_ -eq $versionsFile }
$isInitialCommit = $false
Expand Down
7 changes: 3 additions & 4 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,10 @@
<PackageVersion Include="System.Threading.Channels" Version="$(SystemThreadingChannelsVersion)" />
<PackageVersion Include="System.Threading.Tasks.Dataflow" Version="$(SystemThreadingTasksDataflowVersion)" />
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="$(SystemThreadingTasksExtensionsVersion)" />
<PackageVersion Include="System.ValueTuple" Version="$(SystemValueTupleVersion)" />
<PackageVersion Include="xunit.console" Version="$(XUnitVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.OpenTelemetry.Collector" Version="$(MicrosoftVisualStudioOpenTelemetryVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.OpenTelemetry.ClientExtensions" Version="$(MicrosoftVisualStudioOpenTelemetryVersion)" />

<!-- Microsoft.VisualStudio.SolutionPersistence is maintained in eng/dependabot/Directory.Packages.props -->
<PackageVersion Include="Microsoft.VisualStudio.Telemetry" Version="$(MicrosoftVisualStudioTelemetryVersion)" />
<!-- Microsoft.VisualStudio.SolutionPersistence is maintained in eng/dependabot/Packages.props -->
</ItemGroup>

</Project>
12 changes: 8 additions & 4 deletions NuGet.config
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,11 @@
<add key="dotnet9-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9-transport/nuget/v3/index.json" />
<add key="dotnet10" value="https://dnceng.pkgs.visualstudio.com/public/_packaging/dotnet10/nuget/v3/index.json" />
<add key="dotnet10-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-transport/nuget/v3/index.json" />
<add key="dotnet11" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11/nuget/v3/index.json" />
<add key="dotnet11-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11-transport/nuget/v3/index.json" />
<add key="vs-impl" value="https://pkgs.dev.azure.com/azure-public/vside/_packaging/vs-impl/nuget/v3/index.json" />
</packageSources>
<!-- We don't want other than VS OpenTelemetry libraries from vs-impl -->
<packageSourceMapping>
<packageSource key="vs-impl">
<package pattern="Microsoft.VisualStudio.OpenTelemetry*" />
</packageSource>
<packageSource key="arcade">
<package pattern="*" />
</packageSource>
Expand Down Expand Up @@ -53,6 +51,12 @@
<packageSource key="dotnet10-transport">
<package pattern="*" />
</packageSource>
<packageSource key="dotnet11">
<package pattern="*" />
</packageSource>
<packageSource key="dotnet11-transport">
<package pattern="*" />
</packageSource>
</packageSourceMapping>
<disabledPackageSources>
<!--Begin: Package sources managed by Dependency Flow automation. Do not edit the sources below.-->
Expand Down
30 changes: 0 additions & 30 deletions THIRDPARTYNOTICES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,33 +43,3 @@ Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License.

-------------------------------

Notice for OpenTelemetry .NET
-------------------------------
MSBuild.exe is distributed with OpenTelemetry .NET binaries.

Copyright (c) OpenTelemetry Authors
Source: https://github.com/open-telemetry/opentelemetry-dotnet

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License.

-------------------------------

Notice for Microsoft.VisualStudio.OpenTelemetry.*
-------------------------------
MSBuild.exe is distributed with Microsoft.VisualStudio.OpenTelemetry.* binaries.

Project: Microsoft.VisualStudio.OpenTelemetry
Copyright: (c) Microsoft Corporation
License: https://visualstudio.microsoft.com/license-terms/mt736442/
5 changes: 4 additions & 1 deletion azure-pipelines/.vsts-dotnet-build-jobs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ jobs:
- output: artifactsDrop
sourcePath: '$(Build.SourcesDirectory)\artifacts\official\OptProf\$(BuildConfiguration)\Data'
dropServiceURI: 'https://devdiv.artifacts.visualstudio.com'
dropMetadataContainerName: 'ProfilingInputs/DevDiv/$(Build.Repository.Name)/$(Build.SourceBranchName)/$(Build.BuildNumber)'
buildNumber: 'ProfilingInputs/DevDiv/$(Build.Repository.Name)/$(Build.SourceBranchName)/$(Build.BuildNumber)'
toLowerCase: false
usePat: true
dropMetadataContainerName: 'DropMetadata-OptProf'
condition: and(succeeded(), ${{ parameters.enableOptProf }})

# Publish bootstrapper info for OptProf data collection run to consume
Expand Down
2 changes: 2 additions & 0 deletions azure-pipelines/vs-insertion-experimental.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ parameters:
displayName: 'Insertion Target Branch (select for manual insertion)'
values:
- main
- rel/d18.4
- rel/d18.3
- rel/d18.0
- rel/d17.14
- rel/d17.13
Expand Down
5 changes: 4 additions & 1 deletion azure-pipelines/vs-insertion.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ parameters:
values:
- auto
- main
- rel/d18.4
- rel/d18.3
- rel/d18.0
- rel/d17.14
Expand All @@ -67,7 +68,9 @@ parameters:
variables:
# `auto` should work every time and selecting a branch in parameters is likely to fail due to incompatible versions in MSBuild and VS
- name: AutoInsertTargetBranch
${{ if eq(variables['Build.SourceBranchName'], 'vs18.3') }}:
${{ if eq(variables['Build.SourceBranchName'], 'vs18.4') }}:
value: 'rel/d18.4'
${{ elseif eq(variables['Build.SourceBranchName'], 'vs18.3') }}:
value: 'rel/d18.3'
${{ elseif eq(variables['Build.SourceBranchName'], 'vs18.0') }}:
value: 'rel/d18.0'
Expand Down
9 changes: 9 additions & 0 deletions documentation/High-level-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,15 @@ TaskHost can be opted-in via `TaskFactory="TaskHostFactory"` in the [`UsingTask`
- If a task's source code is in the same repository that is being built, and the repository's build needs to use that task during the build process. Using a Task Host makes sure the DLLs are not locked at the end of the build (as MSBuild uses long living worker nodes that survives single build execution)
- As an isolation mechanism - separating the execution from the engine execution process.

When `TaskHostFactory` is specified as the task factory, the task always runs out-of-process and short lived. See the below matrix:

| Does TaskHost match executing MSBuild Runtime? | Is TaskHostFactory requested for the Task? | Expected task execution type |
| :-: | :-: | --- |
| ✅ | :x: | in-process execution |
| ✅ | ✅ | short-lived out-of-proc execution |
| :x: | ✅ | short-lived out-of-proc execution |
| :x: | :x: | long-lived out-of-proc execution |

## Caches
### Project result cache
The project Result Cache refers to the cache used by the scheduler that keeps the build results of already executed project. The result of a target is success, failure, and a list of items that succeeded. Beyond that, the `Returns` and `Outputs` attributes from targets are also serialized with the build result, as to be used by other targets for their execution.
Expand Down
Loading