Skip to content

CsWin32 follow-up: CLR metadata + TypeLib interop migration - #13853

Merged
JeremyKuhne merged 2 commits into
dotnet:mainfrom
JeremyKuhne:cswin32-followup3
May 26, 2026
Merged

JeremyKuhne merged 2 commits into
dotnet:mainfrom
JeremyKuhne:cswin32-followup3

Conversation

@JeremyKuhne

Copy link
Copy Markdown
Member

CsWin32 follow-up: CLR metadata + TypeLib interop migration

Continues the CsWin32 struct-based COM migration from #13705 and #13746,
this time covering the CLR metadata APIs (IMetaDataDispenser /
IMetaDataImport2 / IMetaDataAssemblyImport) consumed by AssemblyInformation
and ManifestUtil.MetadataReader, plus the ICreateTypeLib path used by
RegisterAssembly.

New files

  • src/Tasks/AssemblyDependency/Metadata/
    • Metadata.cs folder header / namespace docs
    • IMetaDataDispenser.cs OpenScope with typed CorOpenFlags
    • IMetaDataImport2.cs GetCustomAttributeByName + GetPEKind
      with canonical inherited 3-72 slot map
    • IMetaDataAssemblyImport.cs GetAssemblyProps / GetAssemblyRefProps /
      GetFileProps / EnumAssemblyRefs / EnumFiles /
      GetAssemblyFromScope / CloseEnum
    • ASSEMBLYMETADATA.cs blittable struct from cor.h
    • OSINFO.cs blittable struct from cor.h
    • CorOpenFlags.cs typed [Flags] enum
    • CorAssemblyFlags.cs typed [Flags] enum
    • CorTokenType.cs 26 mdt* table-type tags
    • Tokens.cs MdToken / MdAssembly / MdAssemblyRef / MdFile
      readonly structs with validating constructors
  • src/Tasks/TypeLib/ICreateTypeLib.cs struct-based wrapper for
    RegisterAssembly
  • src/Tasks.UnitTests/MetadataReader_Tests.cs 12 tests / 24 cross-TFM
    (PEReader on net10, COM on
    net472), verifies identity
    parity for Accessibility.dll

Modifications

  • AssemblyInformation.cs uses MdAssembly / BufferScope / typed
    CorAssemblyFlags; OpenScope asks for
    IMetaDataImport2 directly (skips one QI);
    AllocAsmMeta / FreeAsmMeta eliminated
  • MetadataReader.cs net472 path migrated from [ComImport] to
    struct-based COM via AgileComPointer; failure
    to OpenScope returns null (per-file contract)
  • RegisterAssembly.cs uses the new ICreateTypeLib struct
  • Microsoft.Build.Tasks.csproj wildcard for the
    Fusion / Metadata / TypeLib folders
    (FeatureWindowsInterop-gated)
  • NativeMethods.cs legacy [ComImport] declarations removed;
    only oleaut32 typelib P/Invokes remain;
    System.Runtime.Versioning using gated on
    FEATURE_WINDOWSINTEROP for source-build

Skills

  • .github/skills/cswin32-com/SKILL.md adds 'Strongly-typed handle /
    token wrappers' with CLR
    validation table; pair-pointer
    to cswin32-interop; error-
    handling-parity guidance;
    IComIID polyfill heading rename
  • .github/skills/cswin32-interop/SKILL.md reorganized: Rules / Blittable
    signatures / Infrastructure /
    BufferScope / Gotchas;
    source-build verification note

Verified

  • Normal build: 0 warnings, 0 errors (net472 + net10.0)
  • Source build: 0 warnings, 0 errors
    (DotNetBuildSourceOnly=true DotNetBuild=true)
  • Tests: 24/24 pass on both TFMs

Continues the CsWin32 struct-based COM migration from dotnet#13705 and dotnet#13746,
this time covering the CLR metadata APIs (IMetaDataDispenser /
IMetaDataImport2 / IMetaDataAssemblyImport) consumed by AssemblyInformation
and ManifestUtil.MetadataReader, plus the ICreateTypeLib path used by
RegisterAssembly.

New files
- src/Tasks/AssemblyDependency/Metadata/
  - Metadata.cs                folder header / namespace docs
  - IMetaDataDispenser.cs      OpenScope with typed CorOpenFlags
  - IMetaDataImport2.cs        GetCustomAttributeByName + GetPEKind
                               with canonical inherited 3-72 slot map
  - IMetaDataAssemblyImport.cs GetAssemblyProps / GetAssemblyRefProps /
                               GetFileProps / EnumAssemblyRefs / EnumFiles /
                               GetAssemblyFromScope / CloseEnum
  - ASSEMBLYMETADATA.cs        blittable struct from cor.h
  - OSINFO.cs                  blittable struct from cor.h
  - CorOpenFlags.cs            typed [Flags] enum
  - CorAssemblyFlags.cs        typed [Flags] enum
  - CorTokenType.cs            26 mdt* table-type tags
  - Tokens.cs                  MdToken / MdAssembly / MdAssemblyRef / MdFile
                               readonly structs with validating constructors
- src/Tasks/TypeLib/ICreateTypeLib.cs    struct-based wrapper for
                                         RegisterAssembly
- src/Tasks.UnitTests/MetadataReader_Tests.cs  12 tests / 24 cross-TFM
                                               (PEReader on net10, COM on
                                               net472), verifies identity
                                               parity for Accessibility.dll

Modifications
- AssemblyInformation.cs   uses MdAssembly / BufferScope<char> / typed
                           CorAssemblyFlags; OpenScope asks for
                           IMetaDataImport2 directly (skips one QI);
                           AllocAsmMeta / FreeAsmMeta eliminated
- MetadataReader.cs        net472 path migrated from [ComImport] to
                           struct-based COM via AgileComPointer; failure
                           to OpenScope returns null (per-file contract)
- RegisterAssembly.cs      uses the new ICreateTypeLib struct
- Microsoft.Build.Tasks.csproj  wildcard <Compile Include> for the
                                Fusion / Metadata / TypeLib folders
                                (FeatureWindowsInterop-gated)
- NativeMethods.cs         legacy [ComImport] declarations removed;
                           only oleaut32 typelib P/Invokes remain;
                           System.Runtime.Versioning using gated on
                           FEATURE_WINDOWSINTEROP for source-build

Skills
- .github/skills/cswin32-com/SKILL.md      adds 'Strongly-typed handle /
                                           token wrappers' with CLR
                                           validation table; pair-pointer
                                           to cswin32-interop; error-
                                           handling-parity guidance;
                                           IComIID polyfill heading rename
- .github/skills/cswin32-interop/SKILL.md  reorganized: Rules / Blittable
                                           signatures / Infrastructure /
                                           BufferScope<T> / Gotchas;
                                           source-build verification note

Verified
- Normal build:  0 warnings, 0 errors (net472 + net10.0)
- Source build:  0 warnings, 0 errors
  (DotNetBuildSourceOnly=true DotNetBuild=true)
- Tests:         24/24 pass on both TFMs
@JeremyKuhne
JeremyKuhne requested a review from a team as a code owner May 22, 2026 18:32
Copilot AI review requested due to automatic review settings May 22, 2026 18:32
@JeremyKuhne
JeremyKuhne requested a review from a team as a code owner May 22, 2026 18:32
@github-actions

github-actions Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

🔍 Skill Validator Results

⚠️ Warnings or advisories found

Scope Checked
Skills 2
Agents 0
Total 2
Severity Count
--- ---:
❌ Errors 0
⚠️ Warnings 2
ℹ️ Advisories 0

Summary

Level Finding
ℹ️ Found 2 skill(s)
ℹ️ [cswin32-interop] 📊 cswin32-interop: 3,402 BPE tokens [chars/4: 3,195] (standard ~), 14 sections, 3 code blocks
ℹ️ [cswin32-interop] ⚠ Skill is 3,402 BPE tokens (chars/4 estimate: 3,195) — approaching "comprehensive" range where gains diminish.
ℹ️ [cswin32-com] 📊 cswin32-com: 4,200 BPE tokens [chars/4: 4,075] (standard ~), 13 sections, 6 code blocks
ℹ️ [cswin32-com] ⚠ Skill is 4,200 BPE tokens (chars/4 estimate: 4,075) — approaching "comprehensive" range where gains diminish.
ℹ️ ✅ All checks passed (2 skill(s))
Full validator output ```text Found 2 skill(s) [cswin32-interop] 📊 cswin32-interop: 3,402 BPE tokens [chars/4: 3,195] (standard ~), 14 sections, 3 code blocks [cswin32-interop] ⚠ Skill is 3,402 BPE tokens (chars/4 estimate: 3,195) — approaching "comprehensive" range where gains diminish. [cswin32-com] 📊 cswin32-com: 4,200 BPE tokens [chars/4: 4,075] (standard ~), 13 sections, 6 code blocks [cswin32-com] ⚠ Skill is 4,200 BPE tokens (chars/4 estimate: 4,075) — approaching "comprehensive" range where gains diminish. ✅ All checks passed (2 skill(s)) ```

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates CLR metadata (IMetaData*) and typelib authoring (ICreateTypeLib) interop from [ComImport]/RCW-based calls to CsWin32-style struct-based COM, improving blittability and aligning Tasks/ManifestUtil with the newer ComScope<T> / AgileComPointer<T> infrastructure.

Changes:

  • Adds new struct-based COM definitions for CLR metadata APIs and strongly-typed metadata token wrappers (MdAssembly, MdAssemblyRef, etc.).
  • Updates AssemblyInformation and ManifestUtil.MetadataReader to use CoCreateInstance, ComScope<T>, and AgileComPointer<T> instead of [ComImport] interfaces and manual marshalling.
  • Migrates RegisterAssembly’s ICreateTypeLib.SaveAllChanges usage to a struct-based COM call and removes legacy declarations from NativeMethods.cs; adds unit tests for MetadataReader parity.

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/Tasks/TypeLib/ICreateTypeLib.cs New struct-based COM wrapper for ICreateTypeLib (typelib persistence).
src/Tasks/RegisterAssembly.cs Uses QI + struct-based ICreateTypeLib to call SaveAllChanges().
src/Tasks/NativeMethods.cs Removes legacy [ComImport] declarations for metadata + typelib interop.
src/Tasks/Microsoft.Build.Tasks.csproj Switches to wildcard Compile includes for Fusion/Metadata/TypeLib interop folders under FeatureWindowsInterop.
src/Tasks/ManifestUtil/MetadataReader.cs Replaces net472 COM RCW usage with CoCreateInstance + ComScope<T> + AgileComPointer<T>.
src/Tasks/AssemblyDependency/Metadata/Tokens.cs Adds strongly-typed CLR metadata token wrappers and conversions.
src/Tasks/AssemblyDependency/Metadata/OSINFO.cs Adds blittable OSINFO struct for CLR metadata APIs.
src/Tasks/AssemblyDependency/Metadata/Metadata.cs Adds CorMetadata helper (CLSID constants) for activation.
src/Tasks/AssemblyDependency/Metadata/IMetaDataImport2.cs Adds struct-based COM for IMetaDataImport2 with vtable slot mapping.
src/Tasks/AssemblyDependency/Metadata/IMetaDataDispenser.cs Adds struct-based COM for IMetaDataDispenser::OpenScope.
src/Tasks/AssemblyDependency/Metadata/IMetaDataAssemblyImport.cs Adds struct-based COM for IMetaDataAssemblyImport methods used by RAR/ManifestUtil.
src/Tasks/AssemblyDependency/Metadata/CorTokenType.cs Adds typed CorTokenType table-tag enum for token decoding/validation.
src/Tasks/AssemblyDependency/Metadata/CorOpenFlags.cs Adds typed CorOpenFlags for OpenScope options.
src/Tasks/AssemblyDependency/Metadata/CorAssemblyFlags.cs Adds typed CorAssemblyFlags for assembly/ref flags.
src/Tasks/AssemblyDependency/Metadata/ASSEMBLYMETADATA.cs Adds blittable ASSEMBLYMETADATA struct and allocation contract docs.
src/Tasks/AssemblyDependency/AssemblyInformation.cs Uses new metadata COM structs + AgileComPointer<T>; removes AllocAsmMeta/FreeAsmMeta.
src/Tasks.UnitTests/MetadataReader_Tests.cs New parity/regression tests for MetadataReader across TFMs.
.github/skills/cswin32-interop/SKILL.md Documentation updates for interop rules and parity guidance.
.github/skills/cswin32-com/SKILL.md Documentation updates for COM patterns, token wrappers, and error-handling parity.

Comment thread src/Tasks/ManifestUtil/MetadataReader.cs Outdated

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary: COM Interop Migration to CsWin32 Struct-Based Patterns

This is a well-executed migration from legacy [ComImport] / Marshal.GetComInterfaceForObject() patterns to CsWin32 struct-based COM vtable patterns. The change is mechanically sound and follows the same patterns established in the WMI and Fusion interop code in this repo.

✅ Verified Correct

  • Vtable indices: All slot numbers verified against the removed [ComImport] declarations (IMetaDataAssemblyImport slots 3-15, IMetaDataImport2 slots 60/70, ICreateTypeLib slot 12).
  • ComScope / AgileComPointer lifecycle: The takeOwnership: false semantics are correctly used — GIT AddRefs, ComScope's using releases the transient ref, leaving GIT as the sole owner.
  • DisposeManagedResources vs DisposeUnmanagedResources: Correct switch since AgileComPointer<T> is a managed class with its own finalizer.
  • Memory safety in RegisterAssembly: The bridge between RCW (ITypeLib) and struct-based COM (ICreateTypeLib) is properly structured with nested try/finally.
  • HRESULT checking: Every COM call checks the return via .ThrowOnFailure() — an improvement over the old pattern where some calls silently swallowed errors.
  • Test coverage: The new MetadataReader_Tests.cs provides good coverage including threading, idempotent disposal, negative paths, and cross-assembly validation.
  • Token types: The strongly-typed MdAssembly/MdAssemblyRef/MdFile wrappers with documented bypass semantics for native out-params are well-designed.

⚠️ One Performance Suggestion (Non-Blocking)

GetStringCustomAttribute acquires its own ComScope<IMetaDataImport2> via a GIT round-trip on every call, even when the caller (GetAssemblyMetadata) already holds one. This introduces ~4 unnecessary GIT lookups per GetAssemblyMetadata() invocation. The old code passed IMetaDataImport2 as a parameter. Consider accepting a pointer parameter in a follow-up to eliminate this overhead for the RAR hot path.

Assessment

No blocking issues. The vtable layouts, memory management, disposal patterns, and behavioral contracts are all correct. The one actionable suggestion (GIT round-trip reduction) is a minor performance optimization, not a correctness concern. This PR is ready to merge from a technical review perspective.

Note

🔒 Integrity filter blocked 1 item

The following item were blocked because they don't meet the GitHub integrity level.

  • #13853 pull_request_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
  github:
    min-integrity: approved  # merged | approved | unapproved | none

Generated by Expert Code Review (on open) for issue #13853 · ● 14M

Comment thread src/Tasks/AssemblyDependency/AssemblyInformation.cs Outdated
Comment thread src/Tasks/AssemblyDependency/Metadata/IMetaDataImport2.cs
Comment thread src/Tasks/TypeLib/ICreateTypeLib.cs
Comment thread src/Tasks/AssemblyDependency/AssemblyInformation.cs
Comment thread src/Tasks/AssemblyDependency/AssemblyInformation.cs
Comment thread src/Tasks/AssemblyDependency/Metadata/IMetaDataAssemblyImport.cs
Comment thread src/Tasks/ManifestUtil/MetadataReader.cs
Comment thread src/Tasks/AssemblyDependency/Metadata/Tokens.cs
Comment thread src/Tasks/RegisterAssembly.cs
HasAssemblyAttribute (MetadataReader.cs)
- Initialize valuePtr/valueLen and treat hr != S_OK as 'not present'.
  The old [ComImport] signature gave us out params that the marshaller
  zeroed on failure; with raw pointers an error HRESULT that does not
  write pcbData could leave valueLen indeterminate. Now S_FALSE and
  error HRESULTs both deterministically return false.
- Drop the CA1806 suppression / now-unused System.Diagnostics.CodeAnalysis
  using since the HRESULT is checked.

GetStringCustomAttribute (AssemblyInformation.cs)
- Accept a borrowed IMetaDataImport2* parameter instead of opening a new
  ComScope (which round-trips through the GIT) per call. GetAssemblyMetadata
  reuses its existing import2 scope across 4-5 attribute lookups; GetFrameworkName
  opens one scope of its own.

Both addressed Copilot reviewer / expert-reviewer feedback on PR dotnet#13853.
Comment thread src/Tasks/AssemblyDependency/Metadata/IMetaDataAssemblyImport.cs

@DustinCampbell DustinCampbell left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

@ViktorHofer ViktorHofer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JeremyKuhne this looks good. I reviewed the changes manually and all looks good. I only had one observation on the testing front. AssemblyInformation.cs would benefit of some additional testing. Here's me asking LLM to find what to actually test:

● Yes — I’d add one or two targeted AssemblyInformation tests, mainly because the PR’s new tests cover ManifestUtil.MetadataReader, but the largest risky migration is actually AssemblyInformation.cs.

  Best additions:

   1. net472-only real GetAssemblyMetadata() parity test
    - Construct new AssemblyInformation(typeof(SomeTestType).Assembly.Location).
    - Call internal GetAssemblyMetadata().
    - Verify key fields against AssemblyName.GetAssemblyName(path) / assembly attributes:
    AssemblyName, version parts, DefaultAlias, PublicHexKey, TargetFrameworkMoniker, PeKind != 0.
    - This directly exercises CoCreateInstance, OpenScope, QueryInterface, GetAssemblyProps, ASSEMBLYMETADATA, GetCustomAttributeByName, and GetPEKind.
   2. net472-only GetTargetFrameworkAttribute() real-file test
    - Compare AssemblyInformation.GetTargetFrameworkAttribute(path) with the assembly’s actual TargetFrameworkAttribute.FrameworkName.
    - This covers the borrowed IMetaDataImport2* path outside GetAssemblyMetadata().

  Existing coverage already has RealGetAssemblyNameIncludesCulture() for Dependencies, so I wouldn’t add much there unless you want extra confidence around EnumAssemblyRefs/locale handling. I also wouldn’t bother testing Files unless the repo already has an easy multi-module assembly fixture; manufacturing one is probably not worth it for this PR

Comment thread src/Tasks/ManifestUtil/MetadataReader.cs
@JeremyKuhne
JeremyKuhne merged commit 5682672 into dotnet:main May 26, 2026
11 checks passed
@JeremyKuhne
JeremyKuhne deleted the cswin32-followup3 branch May 26, 2026 17:28
JeremyKuhne added a commit to JeremyKuhne/msbuild that referenced this pull request May 29, 2026
Commit 5682672 (dotnet#13853) migrated AssemblyInformation / MetadataReader
from RCW-based COM to struct-based COM through CsWin32 and AgileComPointer.
The new code activates CLSID_CorMetaDataDispenser via raw CoCreateInstance.
That loads mscoree.dll (the .NET Framework shim), which in turn calls
LoadLibraryShim to bind a runtime before delegating to MetaDataDllGetClassObject.

In hosts that did not enter the CLR via mscoree (notably the VC cppxplatdev
test harness, which embeds MSBuild in-process via BuildManager) the shim's
bound-runtime state is uninitialized and LoadLibraryShim returns
CLR_E_SHIM_RUNTIMELOAD (0x80131700) "Failed to load the runtime". RAR catches
that as a DependencyResolutionException and silently drops every transitive
dependency for the failing reference, manifesting as VC's P2PReferences.08
regression (Referenced_C_IJW.dll missing from Referencing_A_IJW\Debug).

The fix activates the dispenser by calling clr.dll's exported
DllGetClassObjectInternal directly via a new
ComClassFactory.TryCreateFromModule overload, bypassing the shim entirely.
This is what the CLR's own managed-COM activation does internally for CLSIDs
in IsClrHostedLegacyComObject. The approach is also AOT-friendly (no
Type.GetTypeFromCLSID, no Activator, no RCW), so .NET 10+ source-generated
COM can use it unchanged.

* ComClassFactory: add two public TryCreateFromModule overloads (standard
  DllGetClassObject and caller-specified export name) plus
  ClrDllGetClassObjectInternalExportName constant. Single Stdcall function-
  pointer path serves both TFMs.
* AssemblyInformation, MetadataReader: switch dispenser activation to
  TryCreateFromModule("clr.dll", ..., ClrDllGetClassObjectInternalExportName).
  Tolerate GetAssemblyFromScope / GetPEKind failures (preserve [PreserveSig]
  semantics from the previous RCW path).
* NativeMethods.txt: add GetModuleHandle (kept for completeness; LoadLibrary,
  FreeLibrary, GetProcAddress were already present).
* AssemblyInformation_Tests: new net472-only tests covering both file-mapping
  lifetime (delete/overwrite after Dispose) and dispenser activation.
rainersigwald pushed a commit that referenced this pull request May 29, 2026
…3899)

## Context

Fixes a regression in RAR introduced by #13853 (CsWin32 CLR metadata +
TypeLib interop migration), reported by the VC team as
`VC.Tests.MsBuild.VC.MsBuild.P2PReferences.08` (CLR+CLR+CLR P2P chain):
`Referenced_C_IJW.dll` is missing from `Referencing_A_IJW\Debug\` after
build.

## Root cause

The migration switched `AssemblyInformation` / `MetadataReader` from
RCW-based COM to struct-based COM through CsWin32 and `AgileComPointer`,
and along the way activates `CLSID_CorMetaDataDispenser` via raw
`CoCreateInstance`.

`CLSID_CorMetaDataDispenser` is registered with `mscoree.dll` (the .NET
Framework shim) as its `InprocServer32`. `CoCreateInstance` therefore
loads the shim, which then has to call `LoadLibraryShim` to bind a
runtime before it can delegate to `MetaDataDllGetClassObject`.

In hosts that did not enter the CLR via mscoree's startup path — notably
the VC `cppxplatdev` test harness, which embeds MSBuild in-process via
`BuildManager` from a non-mscoree-rooted process — the shim's
bound-runtime state is uninitialized and `LoadLibraryShim` fails with
`CLR_E_SHIM_RUNTIMELOAD` (`0x80131700`, "Failed to load the runtime").
RAR catches that as a `DependencyResolutionException` and silently drops
every transitive dependency for the failing reference. End-to-end
symptom is the missing `Referenced_C_IJW.dll` copy.

Standalone `msbuild.exe` cannot reproduce because the msbuild.exe
process enters the CLR via the standard mscoree startup path, so the
shim is bound.

## Fix

Activate the dispenser by calling `clr.dll`'s exported
`DllGetClassObjectInternal` directly via a new
`ComClassFactory.TryCreateFromModule` overload, bypassing the shim
entirely. This is exactly what the CLR's own managed-COM activation does
internally for CLSIDs on its `IsClrHostedLegacyComObject` list. The
approach is AOT-friendly (no `Type.GetTypeFromCLSID`, no `Activator`, no
RCW), so .NET 10+ source-generated COM can use it unchanged.

### `ComClassFactory`
- Two public `TryCreateFromModule` overloads (standard
`DllGetClassObject` and caller-specified export name).
- Public `ClrDllGetClassObjectInternalExportName` constant with
documentation of the shim mechanism.
- Single `delegate* unmanaged[Stdcall]<...>` function-pointer path
serves both net472 and .NET Core.

### Callers
- `AssemblyInformation` and `MetadataReader` now use
`TryCreateFromModule("clr.dll", CLSID,
ClrDllGetClassObjectInternalExportName, ...)`.
- Both retain the previous `[PreserveSig]` tolerance for
`GetAssemblyFromScope` and `GetPEKind` failures (the legacy RCW code
silently ignored those HRs).
- Pointer release moved to `DisposeUnmanagedResources` so the finalizer
path still revokes GIT cookies if the user forgets to dispose.

### Other
- `NativeMethods.txt`: add `GetModuleHandle` (kept for completeness —
`LoadLibrary`, `FreeLibrary`, `GetProcAddress` were already present).
- New net472-only `AssemblyInformation_Tests` covering both file-mapping
lifetime (delete/overwrite after Dispose, including a repeated
open-close stress loop) and dispenser activation.

## Validation

- Local unit tests: 8/8 new + 12/12 existing `MetadataReader_Tests` pass
on net472 x86.
- End-to-end: built `Microsoft.Build.Framework.dll` +
`Microsoft.Build.Tasks.Core.dll` deployed into a local VS18 install, ran
the failing `Project.vcxproj` directly with `msbuild.exe` against the
actual VC P2PReferences asset — both `Referenced_B_IJW.dll` and
`Referenced_C_IJW.dll` now land in `Referencing_A_IJW\Debug\`.
- Build clean, 0 warnings/0 errors.
JeremyKuhne added a commit to JeremyKuhne/msbuild that referenced this pull request Jun 1, 2026
… hand-rolled interop

Continues the CsWin32 struct-based interop migration from dotnet#13746 and dotnet#13853.
Removes the legacy Microsoft.VisualStudio.Setup.Configuration.Interop RCW
package outright and migrates the directory-enumeration / FileTracker / VS
locator / test-fixture call sites to PInvoke + ComScope<T>.

New manual COM struct definitions
  src/Framework/Shared/VisualStudio/
    SetupConfiguration.cs      CLSID + GetSetupConfiguration fallback DllImport
    ISetupConfiguration.cs     v1 (IUnknown surface only, for QI)
    ISetupConfiguration2.cs    EnumAllInstances (vtable slot 6)
    IEnumSetupInstances.cs     Next (slot 3)
    ISetupInstance.cs          GetInstallationPath/Version/DisplayName (slots 6/7/8)
    ISetupInstance2.cs         GetState (slot 11)
    InstanceState.cs           [Flags] enum InstanceState : uint, Complete = MAXUINT

Rewrites
  src/Framework/VisualStudioLocationHelper.cs
    Replaces the RCW-based GetInstances() with PInvoke.CoCreateInstance +
    REGDB_E_CLASSNOTREG fallback to GetSetupConfiguration P/Invoke + QI.
    Pointer lifetimes managed entirely via ComScope<T>; BSTR out-params via
    `using BSTR x = default;`. Helper returns `default` ComScope on COM
    failure rather than throwing a COMException the caller would discard.

  src/Framework/FileSystem/WindowsNative.cs
  src/Framework/FileSystem/SafeFileHandle.cs
    FindFirstFileW / FindNextFileW / FindClose / PathMatchSpecExW migrated
    to PInvoke.FindFirstFile / FindNextFile / FindClose / PathMatchSpecEx
    (added to NativeMethods.txt). The legacy hand-shaped Win32FindData
    (with [MarshalAs(UnmanagedType.ByValTStr)] string fields) is preserved
    as a caller-facing adapter built from the blittable WIN32_FIND_DATAW.
    SafeFindFileHandle now wraps a manually-constructed HANDLE and its
    ReleaseHandle calls PInvoke.FindClose.

  src/Shared/InprocTrackingNativeMethods.cs
    FileTracker.dll loader rewritten to use PInvoke.LoadLibrary +
    PInvoke.GetProcAddress with typed delegate* unmanaged[Stdcall]<...>
    function pointers matching the actual export signatures from
    FileTracker.h / FileTracker.def (StartTrackingContext @2 ...
    SetThreadCount @10). The SafeLibraryHandle subclass and all
    [UnmanagedFunctionPointer] managed delegate types are deleted; the
    public API surface gets full XML doc comments. The HMODULE is
    intentionally never freed (FileTracker detours ExitProcess; unloading
    mid-shutdown would corrupt the CLR). ANSI export-name encoding uses
    Encoding.Default + a pooled byte[] (correct for DBCS code pages).

Test fixtures migrated to CsWin32
  src/UnitTests.Shared/DriveMapping.cs
    DefineDosDevice / QueryDosDevice -> PInvoke.* with DEFINE_DOS_DEVICE_FLAGS.

  src/Tasks.UnitTests/AddToWin32Manifest_Tests.cs
    LoadLibrary / FindResource / LoadResource / LockResource /
    SizeofResource -> PInvoke.LoadLibraryEx / FindResource / LoadResource /
    LockResource / SizeofResource consuming HMODULE / HRSRC / HGLOBAL.

  src/Build.UnitTests/BackEnd/TargetUpToDateChecker_Tests.cs
    Hand-rolled CreateSymbolicLink / CreateFileForSymlink / SetFileTime
    replaced with wrappers over PInvoke.* (CreateSymbolicLink already in
    NativeMethods.txt; SetFileTime added).

Deletion
  src/Build/BackEnd/Node/NativeMethods.cs (~230 lines)
    The CreateProcess + STARTUP_INFO + PROCESS_INFORMATION +
    SECURITY_ATTRIBUTES wrapper was consumed by exactly one place --
    FileTrackerTests' [Fact(Skip=...)] helper methods. That helper now
    defines a small private BackEndNativeMethods static class inline,
    forwarding to PInvoke.CreateProcess and bridging the test-facing
    struct shapes to Win32 STARTUPINFOW / PROCESS_INFORMATION /
    SECURITY_ATTRIBUTES at the call.

Package reference removed (now unused everywhere)
  - src/Framework/Microsoft.Build.Framework.csproj
  - src/Build/Microsoft.Build.csproj
  - src/Utilities/Microsoft.Build.Utilities.csproj
  - src/Tasks/Microsoft.Build.Tasks.csproj
  - src/Framework.UnitTests/Microsoft.Build.Framework.UnitTests.csproj

PR dotnet#13853 review feedback (carried in)
  src/Tasks/ManifestUtil/MetadataReader.cs
  src/Tasks/ManifestUtil/ApplicationManifest.cs
    Adds MetadataReader.HasAssemblyAttributes(string[], bool[]) batch
    overload on both .NETCore and net472 paths; the net472 path acquires
    IMetaDataAssemblyImport / IMetaDataImport2 from the GIT once and
    reuses the same GetAssemblyFromScope across all probes.
    AssemblyAttributeFlags in ApplicationManifest.cs now does one GIT
    round-trip for all four attribute checks instead of eight (Jan's
    review comment).

  src/Tasks.UnitTests/AssemblyInformation_Tests.cs (new)
    Two real-file tests exercising the full CLR-metadata COM call chain
    end-to-end on net472 (CoCreateInstance -> OpenScope -> QI ->
    GetAssemblyProps -> GetCustomAttributeByName x4 -> GetPEKind), with
    parity assertions against AssemblyName.GetAssemblyName /
    TargetFrameworkAttribute (Viktor's review comment).

Other new tests
  src/Tasks.UnitTests/MetadataReader_Tests.cs
    HasAssemblyAttributes_Batch_AgreesWithSingular: cross-validates the
    new batch overload against the singular overload for both known-true
    and known-false attributes.

  src/Framework.UnitTests/FileSystem/WindowsNative_Tests.cs (new)
    Six tests directly covering the FindFirstFile / FindNextFile /
    PathMatchSpecEx migration + the Win32FindData adapter +
    SafeFindFileHandle idempotent-dispose, with WindowsOnlyFact gating.

  src/Framework.UnitTests/VisualStudioLocationHelper_Tests.cs (new)
    Six baseline tests asserting the contract that GetInstances() never
    throws, never returns null, that each returned VisualStudioInstance
    has valid Name/Path/Version (Major >= 15) shape, paths are unique,
    and existing paths are absolute directories. Establishes the
    regression net before the RCW -> struct-based COM migration.

NativeMethods.txt additions
  DefineDosDevice, QueryDosDevice, FindClose, FindFirstFile, FindNextFile,
  FindResource, LoadResource, LockResource, SizeofResource, LoadLibraryEx,
  LOAD_LIBRARY_FLAGS, PathMatchSpecEx, SetFileTime, PCSTR.

Skill updates
  .github/skills/cswin32-com/SKILL.md
    Compressed from ~5,400 -> ~3,520 estimated tokens (-35%).
    Adds:
      - "Lifetime: using ComScope<T>" promoted to workflow step 2; raw
        try/finally Release pattern explicitly banned.
      - Helper "ownership-transfer" pattern (return ComScope<T> from a
        helper) with the AcquireSetupConfiguration2 worked example.
      - BSTR scoping bullet -- `using BSTR x = default;` replaces manual
        try/finally + SysFreeString.
      - "Don't throw when the caller swallows it" subsection under
        Error-Handling Parity, citing AcquireSetupConfiguration2.

Verified
  - Full build: dotnet build MSBuild.Dev.slnf -> 0 warnings, 0 errors.
  - Tests:
      Framework.UnitTests        750/750 net472, 721/721 net10.0
      Tasks.UnitTests             new MetadataReader/AssemblyInformation
                                  + AddToWin32Manifest tests pass on
                                  both TFMs.
  - Source build (DotNetBuildSourceOnly=true) unchanged: every new
    interop file is gated #if FEATURE_WINDOWSINTEROP (and
    && FEATURE_VISUALSTUDIOSETUP for the VS Setup interfaces).
JeremyKuhne added a commit to JeremyKuhne/msbuild that referenced this pull request Jun 1, 2026
… hand-rolled interop

Continues the CsWin32 struct-based interop migration from dotnet#13746 and dotnet#13853.
Removes the legacy Microsoft.VisualStudio.Setup.Configuration.Interop RCW
package outright and migrates the directory-enumeration / FileTracker / VS
locator / test-fixture call sites to PInvoke + ComScope<T>.

New manual COM struct definitions
  src/Framework/Shared/VisualStudio/
    SetupConfiguration.cs      CLSID + GetSetupConfiguration fallback DllImport
    ISetupConfiguration.cs     v1 (IUnknown surface only, for QI)
    ISetupConfiguration2.cs    EnumAllInstances (vtable slot 6)
    IEnumSetupInstances.cs     Next (slot 3)
    ISetupInstance.cs          GetInstallationPath/Version/DisplayName (slots 6/7/8)
    ISetupInstance2.cs         GetState (slot 11)
    InstanceState.cs           [Flags] enum InstanceState : uint, Complete = MAXUINT

Rewrites
  src/Framework/VisualStudioLocationHelper.cs
    Replaces the RCW-based GetInstances() with PInvoke.CoCreateInstance +
    REGDB_E_CLASSNOTREG fallback to GetSetupConfiguration P/Invoke + QI.
    Pointer lifetimes managed entirely via ComScope<T>; BSTR out-params via
    `using BSTR x = default;`. Helper returns `default` ComScope on COM
    failure rather than throwing a COMException the caller would discard.

  src/Framework/FileSystem/WindowsNative.cs
  src/Framework/FileSystem/SafeFileHandle.cs
    FindFirstFileW / FindNextFileW / FindClose / PathMatchSpecExW migrated
    to PInvoke.FindFirstFile / FindNextFile / FindClose / PathMatchSpecEx
    (added to NativeMethods.txt). The legacy hand-shaped Win32FindData
    (with [MarshalAs(UnmanagedType.ByValTStr)] string fields) is preserved
    as a caller-facing adapter built from the blittable WIN32_FIND_DATAW.
    SafeFindFileHandle now wraps a manually-constructed HANDLE and its
    ReleaseHandle calls PInvoke.FindClose.

  src/Shared/InprocTrackingNativeMethods.cs
    FileTracker.dll loader rewritten to use PInvoke.LoadLibrary +
    PInvoke.GetProcAddress with typed delegate* unmanaged[Stdcall]<...>
    function pointers matching the actual export signatures from
    FileTracker.h / FileTracker.def (StartTrackingContext @2 ...
    SetThreadCount @10). The SafeLibraryHandle subclass and all
    [UnmanagedFunctionPointer] managed delegate types are deleted; the
    public API surface gets full XML doc comments. The HMODULE is
    intentionally never freed (FileTracker detours ExitProcess; unloading
    mid-shutdown would corrupt the CLR). ANSI export-name encoding uses
    Encoding.Default + a pooled byte[] (correct for DBCS code pages).

Test fixtures migrated to CsWin32
  src/UnitTests.Shared/DriveMapping.cs
    DefineDosDevice / QueryDosDevice -> PInvoke.* with DEFINE_DOS_DEVICE_FLAGS.

  src/Tasks.UnitTests/AddToWin32Manifest_Tests.cs
    LoadLibrary / FindResource / LoadResource / LockResource /
    SizeofResource -> PInvoke.LoadLibraryEx / FindResource / LoadResource /
    LockResource / SizeofResource consuming HMODULE / HRSRC / HGLOBAL.

  src/Build.UnitTests/BackEnd/TargetUpToDateChecker_Tests.cs
    Hand-rolled CreateSymbolicLink / CreateFileForSymlink / SetFileTime
    replaced with wrappers over PInvoke.* (CreateSymbolicLink already in
    NativeMethods.txt; SetFileTime added).

Deletion
  src/Build/BackEnd/Node/NativeMethods.cs (~230 lines)
    The CreateProcess + STARTUP_INFO + PROCESS_INFORMATION +
    SECURITY_ATTRIBUTES wrapper was consumed by exactly one place --
    FileTrackerTests' [Fact(Skip=...)] helper methods. That helper now
    defines a small private BackEndNativeMethods static class inline,
    forwarding to PInvoke.CreateProcess and bridging the test-facing
    struct shapes to Win32 STARTUPINFOW / PROCESS_INFORMATION /
    SECURITY_ATTRIBUTES at the call.

Package reference removed (now unused everywhere)
  - src/Framework/Microsoft.Build.Framework.csproj
  - src/Build/Microsoft.Build.csproj
  - src/Utilities/Microsoft.Build.Utilities.csproj
  - src/Tasks/Microsoft.Build.Tasks.csproj
  - src/Framework.UnitTests/Microsoft.Build.Framework.UnitTests.csproj

PR dotnet#13853 review feedback (carried in)
  src/Tasks/ManifestUtil/MetadataReader.cs
  src/Tasks/ManifestUtil/ApplicationManifest.cs
    Adds MetadataReader.HasAssemblyAttributes(string[], bool[]) batch
    overload on both .NETCore and net472 paths; the net472 path acquires
    IMetaDataAssemblyImport / IMetaDataImport2 from the GIT once and
    reuses the same GetAssemblyFromScope across all probes.
    AssemblyAttributeFlags in ApplicationManifest.cs now does one GIT
    round-trip for all four attribute checks instead of eight (Jan's
    review comment).

  src/Tasks.UnitTests/AssemblyInformation_Tests.cs (new)
    Two real-file tests exercising the full CLR-metadata COM call chain
    end-to-end on net472 (CoCreateInstance -> OpenScope -> QI ->
    GetAssemblyProps -> GetCustomAttributeByName x4 -> GetPEKind), with
    parity assertions against AssemblyName.GetAssemblyName /
    TargetFrameworkAttribute (Viktor's review comment).

Other new tests
  src/Tasks.UnitTests/MetadataReader_Tests.cs
    HasAssemblyAttributes_Batch_AgreesWithSingular: cross-validates the
    new batch overload against the singular overload for both known-true
    and known-false attributes.

  src/Framework.UnitTests/FileSystem/WindowsNative_Tests.cs (new)
    Six tests directly covering the FindFirstFile / FindNextFile /
    PathMatchSpecEx migration + the Win32FindData adapter +
    SafeFindFileHandle idempotent-dispose, with WindowsOnlyFact gating.

  src/Framework.UnitTests/VisualStudioLocationHelper_Tests.cs (new)
    Six baseline tests asserting the contract that GetInstances() never
    throws, never returns null, that each returned VisualStudioInstance
    has valid Name/Path/Version (Major >= 15) shape, paths are unique,
    and existing paths are absolute directories. Establishes the
    regression net before the RCW -> struct-based COM migration.

NativeMethods.txt additions
  DefineDosDevice, QueryDosDevice, FindClose, FindFirstFile, FindNextFile,
  FindResource, LoadResource, LockResource, SizeofResource, LoadLibraryEx,
  LOAD_LIBRARY_FLAGS, PathMatchSpecEx, SetFileTime, PCSTR.

Skill updates
  .github/skills/cswin32-com/SKILL.md
    Compressed from ~5,400 -> ~3,520 estimated tokens (-35%).
    Adds:
      - "Lifetime: using ComScope<T>" promoted to workflow step 2; raw
        try/finally Release pattern explicitly banned.
      - Helper "ownership-transfer" pattern (return ComScope<T> from a
        helper) with the AcquireSetupConfiguration2 worked example.
      - BSTR scoping bullet -- `using BSTR x = default;` replaces manual
        try/finally + SysFreeString.
      - "Don't throw when the caller swallows it" subsection under
        Error-Handling Parity, citing AcquireSetupConfiguration2.

Verified
  - Full build: dotnet build MSBuild.Dev.slnf -> 0 warnings, 0 errors.
  - Tests:
      Framework.UnitTests        750/750 net472, 721/721 net10.0
      Tasks.UnitTests             new MetadataReader/AssemblyInformation
                                  + AddToWin32Manifest tests pass on
                                  both TFMs.
  - Source build (DotNetBuildSourceOnly=true) unchanged: every new
    interop file is gated #if FEATURE_WINDOWSINTEROP (and
    && FEATURE_VISUALSTUDIOSETUP for the VS Setup interfaces).
JeremyKuhne added a commit that referenced this pull request Jun 5, 2026
… hand-rolled interop (#13872)

Continues the CsWin32 struct-based interop migration from #13746 and
#13853. Removes the legacy
`Microsoft.VisualStudio.Setup.Configuration.Interop` RCW package
outright and migrates the directory-enumeration / FileTracker / VS
locator / test-fixture call sites to `PInvoke` + `ComScope<T>`.

## New manual COM struct definitions

Under `src/Framework/Shared/VisualStudio/`:

| File | Contents |
| --- | --- |
| `SetupConfiguration.cs` | `CLSID_SetupConfiguration` +
`GetSetupConfiguration` fallback `[DllImport]` |
| `ISetupConfiguration.cs` | v1 — `IUnknown` surface only, for QI |
| `ISetupConfiguration2.cs` | `EnumAllInstances` (vtable slot 6) |
| `IEnumSetupInstances.cs` | `Next` (slot 3) |
| `ISetupInstance.cs` | `GetInstallationPath` / `GetInstallationVersion`
/ `GetDisplayName` (slots 6/7/8) |
| `ISetupInstance2.cs` | `GetState` (slot 11) |
| `InstanceState.cs` | `[Flags] enum InstanceState : uint`, `Complete =
MAXUINT` |

## Rewrites

### `src/Framework/VisualStudioLocationHelper.cs`

Replaces the RCW-based `GetInstances()` with `PInvoke.CoCreateInstance`
+ `REGDB_E_CLASSNOTREG` fallback to the `GetSetupConfiguration` P/Invoke
+ QI. Pointer lifetimes managed entirely via `ComScope<T>`; `BSTR`
out-params via `using BSTR x = default;`. The helper returns a `default`
`ComScope` on COM failure rather than throwing a `COMException` the
caller would immediately discard.

### `src/Framework/FileSystem/WindowsNative.cs`,
`src/Framework/FileSystem/SafeFileHandle.cs`

`FindFirstFileW` / `FindNextFileW` / `FindClose` / `PathMatchSpecExW`
migrated to `PInvoke.FindFirstFile` / `FindNextFile` / `FindClose` /
`PathMatchSpecEx` (added to `NativeMethods.txt`). The legacy hand-shaped
`Win32FindData` (with `[MarshalAs(UnmanagedType.ByValTStr)]` string
fields) is preserved as a caller-facing adapter built from the blittable
`WIN32_FIND_DATAW`. `SafeFindFileHandle` now wraps a
manually-constructed `HANDLE` and its `ReleaseHandle` calls
`PInvoke.FindClose`.

### `src/Shared/InprocTrackingNativeMethods.cs`

FileTracker.dll loader rewritten to use `PInvoke.LoadLibrary` +
`PInvoke.GetProcAddress` with typed `delegate* unmanaged[Stdcall]<…>`
function pointers matching the actual export signatures from
`FileTracker.h` / `FileTracker.def` (`StartTrackingContext` `@2` through
`SetThreadCount` `@10`). The `SafeLibraryHandle` subclass and all
`[UnmanagedFunctionPointer]` managed delegate types are deleted; the
public API surface gets full XML doc comments. The `HMODULE` is
intentionally never freed — FileTracker detours `ExitProcess`, so
unloading mid-shutdown would corrupt the CLR. ANSI export-name encoding
uses `Encoding.Default` + a pooled `byte[]` (correct for DBCS code
pages).

## Test fixtures migrated to CsWin32

- `src/UnitTests.Shared/DriveMapping.cs` — `DefineDosDevice` /
`QueryDosDevice` → `PInvoke.*` with `DEFINE_DOS_DEVICE_FLAGS`.
- `src/Tasks.UnitTests/AddToWin32Manifest_Tests.cs` — `LoadLibrary` /
`FindResource` / `LoadResource` / `LockResource` / `SizeofResource` →
`PInvoke.LoadLibraryEx` / `FindResource` / `LoadResource` /
`LockResource` / `SizeofResource` consuming `HMODULE` / `HRSRC` /
`HGLOBAL`.
- `src/Build.UnitTests/BackEnd/TargetUpToDateChecker_Tests.cs` —
hand-rolled `CreateSymbolicLink` / `CreateFileForSymlink` /
`SetFileTime` replaced with wrappers over `PInvoke.*`
(`CreateSymbolicLink` already in `NativeMethods.txt`; `SetFileTime`
added).

## Deletion

- `src/Build/BackEnd/Node/NativeMethods.cs` (~230 lines) — the
`CreateProcess` + `STARTUP_INFO` + `PROCESS_INFORMATION` +
`SECURITY_ATTRIBUTES` wrapper was consumed by exactly one place:
`FileTrackerTests`' `[Fact(Skip=...)]` helper methods. That helper now
defines a small private `BackEndNativeMethods` static class inline,
forwarding to `PInvoke.CreateProcess` and bridging the test-facing
struct shapes to Win32 `STARTUPINFOW` / `PROCESS_INFORMATION` /
`SECURITY_ATTRIBUTES` at the call.

## Package reference removed (now unused everywhere)

- `src/Framework/Microsoft.Build.Framework.csproj`
- `src/Build/Microsoft.Build.csproj`
- `src/Utilities/Microsoft.Build.Utilities.csproj`
- `src/Tasks/Microsoft.Build.Tasks.csproj`
- `src/Framework.UnitTests/Microsoft.Build.Framework.UnitTests.csproj`

## PR #13853 review feedback (carried in)

### `src/Tasks/ManifestUtil/MetadataReader.cs`,
`src/Tasks/ManifestUtil/ApplicationManifest.cs`

Adds `MetadataReader.HasAssemblyAttributes(string[], bool[])` batch
overload on both .NETCore and net472 paths; the net472 path acquires
`IMetaDataAssemblyImport` / `IMetaDataImport2` from the GIT once and
reuses the same `GetAssemblyFromScope` across all probes.
`AssemblyAttributeFlags` in `ApplicationManifest.cs` now does one GIT
round-trip for all four attribute checks instead of eight
(@JanProvaznik's review comment).

### `src/Tasks.UnitTests/AssemblyInformation_Tests.cs` (new)

Two real-file tests exercising the full CLR-metadata COM call chain
end-to-end on net472 (`CoCreateInstance` → `OpenScope` → QI →
`GetAssemblyProps` → `GetCustomAttributeByName` ×4 → `GetPEKind`), with
parity assertions against `AssemblyName.GetAssemblyName` /
`TargetFrameworkAttribute` (@ViktorHofer's review comment).

## Other new tests

- `src/Tasks.UnitTests/MetadataReader_Tests.cs` —
`HasAssemblyAttributes_Batch_AgreesWithSingular`: cross-validates the
new batch overload against the singular overload for both known-true and
known-false attributes.
- `src/Framework.UnitTests/FileSystem/WindowsNative_Tests.cs` (new) —
six tests directly covering the `FindFirstFile` / `FindNextFile` /
`PathMatchSpecEx` migration + the `Win32FindData` adapter +
`SafeFindFileHandle` idempotent-dispose, with `WindowsOnlyFact` gating.
- `src/Framework.UnitTests/VisualStudioLocationHelper_Tests.cs` (new) —
six baseline tests asserting the contract that `GetInstances()` never
throws, never returns null, that each returned `VisualStudioInstance`
has valid `Name`/`Path`/`Version` (Major ≥ 15) shape, paths are unique,
and existing paths are absolute directories. Establishes the regression
net before the RCW → struct-based COM migration.

## `NativeMethods.txt` additions

`DefineDosDevice`, `QueryDosDevice`, `FindClose`, `FindFirstFile`,
`FindNextFile`, `FindResource`, `LoadResource`, `LockResource`,
`SizeofResource`, `LoadLibraryEx`, `LOAD_LIBRARY_FLAGS`,
`PathMatchSpecEx`, `SetFileTime`, `PCSTR`.

## Skill updates

`.github/skills/cswin32-com/SKILL.md` compressed from ~5,400 → ~3,520
estimated tokens (−35%). Adds:

- "Lifetime: `using ComScope<T>`" promoted to workflow step 2; raw
`try`/`finally` `Release` pattern explicitly banned.
- Helper "ownership-transfer" pattern (return `ComScope<T>` from a
helper) with the `AcquireSetupConfiguration2` worked example.
- `BSTR` scoping bullet — `using BSTR x = default;` replaces manual
`try`/`finally` + `SysFreeString`.
- "Don't throw when the caller swallows it" subsection under
Error-Handling Parity, citing `AcquireSetupConfiguration2`.

## Verified

- **Full build**: `dotnet build MSBuild.Dev.slnf` → 0 warnings, 0
errors.
- **Tests**:
  - `Framework.UnitTests` — 750/750 net472, 721/721 net10.0.
- `Tasks.UnitTests` — new `MetadataReader` / `AssemblyInformation` +
`AddToWin32Manifest` tests pass on both TFMs.
- **Source build** (`DotNetBuildSourceOnly=true`) unchanged: every new
interop file is gated `#if FEATURE_WINDOWSINTEROP` (and `&&
FEATURE_VISUALSTUDIOSETUP` for the VS Setup interfaces).
This was referenced Sep 10, 2026
microsoft-github-policy-service Bot pushed a commit to Azure/bicep that referenced this pull request Sep 15, 2026
Updated [Azure.Bicep.Types.Az](https://github.com/Azure/bicep-types-az)
from 0.2.911 to 0.2.923.

<details>
<summary>Release notes</summary>

_Sourced from [Azure.Bicep.Types.Az's
releases](https://github.com/Azure/bicep-types-az/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/Azure/bicep-types-az/commits).
</details>

Updated
[Azure.Deployments.Templates](https://msazure.visualstudio.com/One/_git/AzureUX-Deployments)
from 1.683.0 to 1.765.0.

<details>
<summary>Release notes</summary>

_Sourced from [Azure.Deployments.Templates's
releases](https://msazure.visualstudio.com/One/_git/AzureUX-Deployments/tags)._

No release notes found for this version range.

Commits viewable in [compare
view](https://msazure.visualstudio.com/One/_git/AzureUX-Deployments/commits).
</details>

Updated [Google.Protobuf](https://github.com/protocolbuffers/protobuf)
from 3.35.1 to 3.36.1.

<details>
<summary>Release notes</summary>

_Sourced from [Google.Protobuf's
releases](https://github.com/protocolbuffers/protobuf/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/protocolbuffers/protobuf/commits).
</details>

Updated
[Grpc.AspNetCore.Server.Reflection](https://github.com/grpc/grpc-dotnet)
from 2.80.0 to 2.83.0.

<details>
<summary>Release notes</summary>

_Sourced from [Grpc.AspNetCore.Server.Reflection's
releases](https://github.com/grpc/grpc-dotnet/releases)._

## 2.83.0

## What's Changed
* [Release v2.80.x] Fix the version number - Step 3 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2709
* Revert "[Release v2.80.x] Fix the version number - Step 3" by
@​asheshvidyut in https://github.com/grpc/grpc-dotnet/pull/2710
* Bump lodash from 4.17.23 to 4.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2712
* Bump basic-ftp from 5.2.0 to 5.2.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2713
* Fix typo in UnaryServerHandler method description by @​HamzaWahed in
https://github.com/grpc/grpc-dotnet/pull/2714
* Bump axios from 1.13.6 to 1.15.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2715
* Bump basic-ftp from 5.2.1 to 5.2.2 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2716
* Bump follow-redirects from 1.15.11 to 1.16.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2717
* Resolver: fix 'retreive'/'retreiveing' typos in XML doc comments by
@​SAY-5 in https://github.com/grpc/grpc-dotnet/pull/2718
* Bump basic-ftp from 5.2.2 to 5.3.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2719
* Bump protobufjs from 7.5.3 to 7.5.5 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2721
* Fix flaky DuplexStream_SendToUnimplementedMethod_ThrowError test by
@​JamesNK in https://github.com/grpc/grpc-dotnet/pull/2720
* Add SECURITY.md by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2722
* Update OpenTelemetry packages to latest stable by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2729
* Bump fast-uri from 3.1.0 to 3.1.2 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2730
* Bump basic-ftp from 5.3.0 to 5.3.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2727
* Bump axios from 1.15.0 to 1.16.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2728
* Fix XML documentation typo by @​martincostello in
https://github.com/grpc/grpc-dotnet/pull/2724
* Bump @​protobufjs/utf8 from 1.1.0 to 1.1.1 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2733
* Bump protobufjs from 7.5.5 to 7.5.8 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2735
* Fix typo in comment about socket ping scheduling by @​yasoob in
https://github.com/grpc/grpc-dotnet/pull/2671
* Bump ip-address and socks in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2726
* Fix subchannel permanently stuck in TransientFailure after
ConnectTimeout by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2736
* Bump ws from 8.18.3 to 8.20.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2737
* _moveNextTask may be overwritten, after we release the lock, but befo…
by @​osexpert in https://github.com/grpc/grpc-dotnet/pull/2738
* Bump form-data from 4.0.5 to 4.0.6 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2743
* Bump joi from 17.13.3 to 17.13.4 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2741
* Bump ws from 8.20.1 to 8.21.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2742
* Using Grpc.Tools 2.83.0-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2746
* Update version for v2.83.x by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2747
* Update versions for stable release 2.83.x by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2750

## New Contributors
* @​HamzaWahed made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2714
* @​SAY-5 made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2718
* @​martincostello made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2724
* @​yasoob made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2671
* @​osexpert made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2738

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.80.0...v2.83.0

## 2.83.0-pre1

## What's Changed
* [Release v2.80.x] Fix the version number - Step 3 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2709
* Revert "[Release v2.80.x] Fix the version number - Step 3" by
@​asheshvidyut in https://github.com/grpc/grpc-dotnet/pull/2710
* Bump lodash from 4.17.23 to 4.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2712
* Bump basic-ftp from 5.2.0 to 5.2.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2713
* Fix typo in UnaryServerHandler method description by @​HamzaWahed in
https://github.com/grpc/grpc-dotnet/pull/2714
* Bump axios from 1.13.6 to 1.15.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2715
* Bump basic-ftp from 5.2.1 to 5.2.2 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2716
* Bump follow-redirects from 1.15.11 to 1.16.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2717
* Resolver: fix 'retreive'/'retreiveing' typos in XML doc comments by
@​SAY-5 in https://github.com/grpc/grpc-dotnet/pull/2718
* Bump basic-ftp from 5.2.2 to 5.3.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2719
* Bump protobufjs from 7.5.3 to 7.5.5 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2721
* Fix flaky DuplexStream_SendToUnimplementedMethod_ThrowError test by
@​JamesNK in https://github.com/grpc/grpc-dotnet/pull/2720
* Add SECURITY.md by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2722
* Update OpenTelemetry packages to latest stable by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2729
* Bump fast-uri from 3.1.0 to 3.1.2 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2730
* Bump basic-ftp from 5.3.0 to 5.3.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2727
* Bump axios from 1.15.0 to 1.16.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2728
* Fix XML documentation typo by @​martincostello in
https://github.com/grpc/grpc-dotnet/pull/2724
* Bump @​protobufjs/utf8 from 1.1.0 to 1.1.1 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2733
* Bump protobufjs from 7.5.5 to 7.5.8 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2735
* Fix typo in comment about socket ping scheduling by @​yasoob in
https://github.com/grpc/grpc-dotnet/pull/2671
* Bump ip-address and socks in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2726
* Fix subchannel permanently stuck in TransientFailure after
ConnectTimeout by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2736
* Bump ws from 8.18.3 to 8.20.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2737
* _moveNextTask may be overwritten, after we release the lock, but befo…
by @​osexpert in https://github.com/grpc/grpc-dotnet/pull/2738
* Bump form-data from 4.0.5 to 4.0.6 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2743
* Bump joi from 17.13.3 to 17.13.4 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2741
* Bump ws from 8.20.1 to 8.21.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2742
* Using Grpc.Tools 2.83.0-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2746
* Update version for v2.83.x by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2747

## New Contributors
* @​HamzaWahed made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2714
* @​SAY-5 made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2718
* @​martincostello made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2724
* @​yasoob made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2671
* @​osexpert made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2738

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.80.0...v2.83.0-pre1

Commits viewable in [compare
view](https://github.com/grpc/grpc-dotnet/compare/v2.80.0...v2.83.0).
</details>

Updated [Grpc.Net.Client](https://github.com/grpc/grpc-dotnet) from
2.76.0 to 2.83.0.

<details>
<summary>Release notes</summary>

_Sourced from [Grpc.Net.Client's
releases](https://github.com/grpc/grpc-dotnet/releases)._

## 2.83.0

## What's Changed
* [Release v2.80.x] Fix the version number - Step 3 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2709
* Revert "[Release v2.80.x] Fix the version number - Step 3" by
@​asheshvidyut in https://github.com/grpc/grpc-dotnet/pull/2710
* Bump lodash from 4.17.23 to 4.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2712
* Bump basic-ftp from 5.2.0 to 5.2.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2713
* Fix typo in UnaryServerHandler method description by @​HamzaWahed in
https://github.com/grpc/grpc-dotnet/pull/2714
* Bump axios from 1.13.6 to 1.15.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2715
* Bump basic-ftp from 5.2.1 to 5.2.2 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2716
* Bump follow-redirects from 1.15.11 to 1.16.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2717
* Resolver: fix 'retreive'/'retreiveing' typos in XML doc comments by
@​SAY-5 in https://github.com/grpc/grpc-dotnet/pull/2718
* Bump basic-ftp from 5.2.2 to 5.3.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2719
* Bump protobufjs from 7.5.3 to 7.5.5 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2721
* Fix flaky DuplexStream_SendToUnimplementedMethod_ThrowError test by
@​JamesNK in https://github.com/grpc/grpc-dotnet/pull/2720
* Add SECURITY.md by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2722
* Update OpenTelemetry packages to latest stable by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2729
* Bump fast-uri from 3.1.0 to 3.1.2 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2730
* Bump basic-ftp from 5.3.0 to 5.3.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2727
* Bump axios from 1.15.0 to 1.16.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2728
* Fix XML documentation typo by @​martincostello in
https://github.com/grpc/grpc-dotnet/pull/2724
* Bump @​protobufjs/utf8 from 1.1.0 to 1.1.1 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2733
* Bump protobufjs from 7.5.5 to 7.5.8 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2735
* Fix typo in comment about socket ping scheduling by @​yasoob in
https://github.com/grpc/grpc-dotnet/pull/2671
* Bump ip-address and socks in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2726
* Fix subchannel permanently stuck in TransientFailure after
ConnectTimeout by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2736
* Bump ws from 8.18.3 to 8.20.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2737
* _moveNextTask may be overwritten, after we release the lock, but befo…
by @​osexpert in https://github.com/grpc/grpc-dotnet/pull/2738
* Bump form-data from 4.0.5 to 4.0.6 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2743
* Bump joi from 17.13.3 to 17.13.4 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2741
* Bump ws from 8.20.1 to 8.21.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2742
* Using Grpc.Tools 2.83.0-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2746
* Update version for v2.83.x by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2747
* Update versions for stable release 2.83.x by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2750

## New Contributors
* @​HamzaWahed made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2714
* @​SAY-5 made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2718
* @​martincostello made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2724
* @​yasoob made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2671
* @​osexpert made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2738

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.80.0...v2.83.0

## 2.83.0-pre1

## What's Changed
* [Release v2.80.x] Fix the version number - Step 3 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2709
* Revert "[Release v2.80.x] Fix the version number - Step 3" by
@​asheshvidyut in https://github.com/grpc/grpc-dotnet/pull/2710
* Bump lodash from 4.17.23 to 4.18.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2712
* Bump basic-ftp from 5.2.0 to 5.2.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2713
* Fix typo in UnaryServerHandler method description by @​HamzaWahed in
https://github.com/grpc/grpc-dotnet/pull/2714
* Bump axios from 1.13.6 to 1.15.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2715
* Bump basic-ftp from 5.2.1 to 5.2.2 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2716
* Bump follow-redirects from 1.15.11 to 1.16.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2717
* Resolver: fix 'retreive'/'retreiveing' typos in XML doc comments by
@​SAY-5 in https://github.com/grpc/grpc-dotnet/pull/2718
* Bump basic-ftp from 5.2.2 to 5.3.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2719
* Bump protobufjs from 7.5.3 to 7.5.5 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2721
* Fix flaky DuplexStream_SendToUnimplementedMethod_ThrowError test by
@​JamesNK in https://github.com/grpc/grpc-dotnet/pull/2720
* Add SECURITY.md by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2722
* Update OpenTelemetry packages to latest stable by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2729
* Bump fast-uri from 3.1.0 to 3.1.2 in /examples/Browser/Server/wwwroot
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2730
* Bump basic-ftp from 5.3.0 to 5.3.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2727
* Bump axios from 1.15.0 to 1.16.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2728
* Fix XML documentation typo by @​martincostello in
https://github.com/grpc/grpc-dotnet/pull/2724
* Bump @​protobufjs/utf8 from 1.1.0 to 1.1.1 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2733
* Bump protobufjs from 7.5.5 to 7.5.8 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2735
* Fix typo in comment about socket ping scheduling by @​yasoob in
https://github.com/grpc/grpc-dotnet/pull/2671
* Bump ip-address and socks in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2726
* Fix subchannel permanently stuck in TransientFailure after
ConnectTimeout by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2736
* Bump ws from 8.18.3 to 8.20.1 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2737
* _moveNextTask may be overwritten, after we release the lock, but befo…
by @​osexpert in https://github.com/grpc/grpc-dotnet/pull/2738
* Bump form-data from 4.0.5 to 4.0.6 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2743
* Bump joi from 17.13.3 to 17.13.4 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2741
* Bump ws from 8.20.1 to 8.21.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2742
* Using Grpc.Tools 2.83.0-pre1 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2746
* Update version for v2.83.x by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2747

## New Contributors
* @​HamzaWahed made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2714
* @​SAY-5 made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2718
* @​martincostello made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2724
* @​yasoob made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2671
* @​osexpert made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2738

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.80.0...v2.83.0-pre1

## 2.80.0

## What's Changed
* Update .NET 10, System.CommandLine 2.0.0, fix warnings by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2677
* Fix System.CommandLine 2.0.0 Uri parsing in GrpcClient benchmark app
by @​ilonatommy in https://github.com/grpc/grpc-dotnet/pull/2695
* Implement GrpcServiceEndpointConventionBuilder.Finally by @​halter73
in https://github.com/grpc/grpc-dotnet/pull/2693
* Bump axios from 1.11.0 to 1.12.2 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2669
* Bump webpack from 5.101.0 to 5.105.0 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2689
* Bump lodash from 4.17.21 to 4.17.23 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2687
* Bump glob from 10.4.5 to 10.5.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2679
* Bump basic-ftp from 5.0.5 to 5.2.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2698
* Bump serialize-javascript and terser-webpack-plugin in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2699
* Bump minimatch in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2700
* Bump axios from 1.12.2 to 1.13.6 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2701
* Bump js-yaml in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2702
* Handle Trailers-Only OK responses in streaming calls without exception
handling by @​michaelmccord in
https://github.com/grpc/grpc-dotnet/pull/2697
* Bump picomatch in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2703
* Implement v1 reflection service and clean up integration by @​JamesNK
in https://github.com/grpc/grpc-dotnet/pull/2704
* Bump brace-expansion in /testassets/InteropTestsGrpcWebWebsite/Tests
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2706
* Fix flaky
PickAsync_UpdateAddressesWhileRequestingConnection_DoesNotDeadlock test
by @​JamesNK in https://github.com/grpc/grpc-dotnet/pull/2705
* Bump Tools Version prep for release v2.80.0 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2707
* [Release v2.80.x] Fix the version number - Step 3 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2711
* Rel (v1.80.0) Prep for stable release by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2723

## New Contributors
* @​ilonatommy made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2695
* @​halter73 made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2693
* @​michaelmccord made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2697

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.76.0...v2.80.0

## 2.80.0-pre1

## What's Changed
* Update .NET 10, System.CommandLine 2.0.0, fix warnings by @​JamesNK in
https://github.com/grpc/grpc-dotnet/pull/2677
* Fix System.CommandLine 2.0.0 Uri parsing in GrpcClient benchmark app
by @​ilonatommy in https://github.com/grpc/grpc-dotnet/pull/2695
* Implement GrpcServiceEndpointConventionBuilder.Finally by @​halter73
in https://github.com/grpc/grpc-dotnet/pull/2693
* Bump axios from 1.11.0 to 1.12.2 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2669
* Bump webpack from 5.101.0 to 5.105.0 in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2689
* Bump lodash from 4.17.21 to 4.17.23 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2687
* Bump glob from 10.4.5 to 10.5.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2679
* Bump basic-ftp from 5.0.5 to 5.2.0 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2698
* Bump serialize-javascript and terser-webpack-plugin in
/examples/Browser/Server/wwwroot by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2699
* Bump minimatch in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2700
* Bump axios from 1.12.2 to 1.13.6 in
/testassets/InteropTestsGrpcWebWebsite/Tests by @​dependabot[bot] in
https://github.com/grpc/grpc-dotnet/pull/2701
* Bump js-yaml in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2702
* Handle Trailers-Only OK responses in streaming calls without exception
handling by @​michaelmccord in
https://github.com/grpc/grpc-dotnet/pull/2697
* Bump picomatch in /testassets/InteropTestsGrpcWebWebsite/Tests by
@​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2703
* Implement v1 reflection service and clean up integration by @​JamesNK
in https://github.com/grpc/grpc-dotnet/pull/2704
* Bump brace-expansion in /testassets/InteropTestsGrpcWebWebsite/Tests
by @​dependabot[bot] in https://github.com/grpc/grpc-dotnet/pull/2706
* Fix flaky
PickAsync_UpdateAddressesWhileRequestingConnection_DoesNotDeadlock test
by @​JamesNK in https://github.com/grpc/grpc-dotnet/pull/2705
* Bump Tools Version prep for release v2.80.0 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2707
* [Release v2.80.x] Fix the version number - Step 3 by @​asheshvidyut in
https://github.com/grpc/grpc-dotnet/pull/2711

## New Contributors
* @​ilonatommy made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2695
* @​halter73 made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2693
* @​michaelmccord made their first contribution in
https://github.com/grpc/grpc-dotnet/pull/2697

**Full Changelog**:
https://github.com/grpc/grpc-dotnet/compare/v2.76.0...v2.80.0-pre1

Commits viewable in [compare
view](https://github.com/grpc/grpc-dotnet/compare/v2.76.0...v2.83.0).
</details>

Updated [JsonDiffPatch.Net](https://github.com/wbish/jsondiffpatch.net)
from 2.3.0 to 2.5.0.

<details>
<summary>Release notes</summary>

_Sourced from [JsonDiffPatch.Net's
releases](https://github.com/wbish/jsondiffpatch.net/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/wbish/jsondiffpatch.net/commits).
</details>

Updated [Microsoft.Build.Framework](https://github.com/dotnet/msbuild)
from 18.8.2 to 18.10.1.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Build.Framework's
releases](https://github.com/dotnet/msbuild/releases)._

## 18.10.1

## What's Changed
* [vs16.11] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13103
* [vs17.12] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13796
* [vs17.8] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13902
* [vs17.11] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13903
* [vs17.12] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13909
* [vs17.12] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13986
* Add vs18.9 to merge-flow config; retire vs18.3 by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14214
* Bump labeler-cache-retention to use issue-labeler v2.1.0 by
@​jeffhandley in https://github.com/dotnet/msbuild/pull/14171
* Bump main to 18.10.0 after vs18.9 snap by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14216
* Improve release skill: Phase 2 DARC rules, VMR backflow, deterministic
baseline by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14220
* Determinize release: hardcode OptProf baseline + Phase 3.2 baseline
resolver by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14222
* Serialize BuildRequestConfiguration.RequestedTargets to fix solution
metaproject MSB4057 in parallel builds by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/14223
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14203
* Core support for AbsolutePath/FileInfo/DirectoryInfo and ITaskItem<T>
as task parameters by @​baronfel in
https://github.com/dotnet/msbuild/pull/13971
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14206
* Fix existence cache kind poisoning by @​AlesProkop in
https://github.com/dotnet/msbuild/pull/14249
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14226
* Don't disable the MSBuild server for /mt builds when node reuse is off
by @​AR-May in https://github.com/dotnet/msbuild/pull/14248
* Enhance expert reviewer guidelines with additional checks. by @​AR-May
in https://github.com/dotnet/msbuild/pull/14255
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14253
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14268
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14267
* Bump github/gh-aw-actions/setup from 0.81.6 to 0.82.2 by
@​dependabot[bot] in https://github.com/dotnet/msbuild/pull/14266
* Avoid boxing the struct enumerator in
PropertyDictionary<T>.GetEnumerator() by @​nareshjo in
https://github.com/dotnet/msbuild/pull/14272
* Refresh copy marker when implementation output changes by @​AlesProkop
in https://github.com/dotnet/msbuild/pull/14231
* Send task-host build process environment as delta by @​OvesN in
https://github.com/dotnet/msbuild/pull/14126
* Add regression coverage for metadata newline preservation by
@​VolPlita in https://github.com/dotnet/msbuild/pull/14261
* Fix EmbedInBinlog items with relative paths from child projects by
@​huulinhnguyen-dev in https://github.com/dotnet/msbuild/pull/13990
* Stop requiring VersionPrefix updates in servicing - insert prerelease
versions to VS by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/14277
* Fix WriteLinesToFile rewriting unchanged file when custom encoding is
used by @​huulinhnguyen-dev in
https://github.com/dotnet/msbuild/pull/14146
* Enable trim/AOT analyzers for Microsoft.Build and clean up annotations
by @​JeremyKuhne in https://github.com/dotnet/msbuild/pull/14064
* [automated] Merge branch 'vs18.9' => 'main' by @​github-actions[bot]
in https://github.com/dotnet/msbuild/pull/14291
* Fix MicroBuild plugin feed URL to use allowed pkgs.dev.azure.com
format by @​AlesProkop in https://github.com/dotnet/msbuild/pull/14295
* Pass ExcludeRestorePackageImports during restore to avoid redundant
evaluations by @​ViktorHofer with @​Copilot in
https://github.com/dotnet/msbuild/pull/14274
* [vs18.7] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13988
* Adopt Clever Test Selection (CTS) as parallel, non-blocking PR
pipeline by @​jankratochvilcz in
https://github.com/dotnet/msbuild/pull/14212
* Harden exceptions when connecting to server by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14292
* Update MicrosoftBuildVersion in analyzer template by
@​github-actions[bot] in https://github.com/dotnet/msbuild/pull/13886
* Fix MSBuild Server client dropping build result under WaitAny race
(#​14172) by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14251
* Partially revert #​13660: remove NuGet RestoreTask transient TaskHost
workaround by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14297
* Disable daily AI credits guardrail for Expert Code Review workflow by
@​JanProvaznik with @​Copilot in
https://github.com/dotnet/msbuild/pull/14314
* Localized file check-in by OneLocBuild Task: Build definition ID 9434:
Build ID 14614733 by @​dotnet-bot in
https://github.com/dotnet/msbuild/pull/14246
* Add opt-in partial (stop-after-pass) project evaluation by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/14290
* Use partial evaluation for -getProperty/-getItem without a target by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/14296
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14324
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14333
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14330
* Bump github/gh-aw-actions/setup from 0.82.2 to 0.82.8 by
@​dependabot[bot] in https://github.com/dotnet/msbuild/pull/14328
* Restrict partial evaluation to ProjectInstance by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/14340
 ... (truncated)

## 18.9.6

## What's Changed
* [vs18.6] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13793
* [vs18.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13859
* [vs18.6] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13858
* [vs18.7] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13863
* CsWin32 follow-up: CLR metadata + TypeLib interop migration by
@​JeremyKuhne in https://github.com/dotnet/msbuild/pull/13853
* Update vmr-sb-validation.yml for Azure Pipelines by @​meghnave in
https://github.com/dotnet/msbuild/pull/13871
* Test: keep shell alive 15s in ToolTaskCanChangeCanonicalErrorFormat
(#​13734) by @​jankratochvilcz in
https://github.com/dotnet/msbuild/pull/13878
* Add vs18.8 to merge-flow config by @​OvesN in
https://github.com/dotnet/msbuild/pull/13877
* Stable branding for 18.8 release by @​OvesN in
https://github.com/dotnet/msbuild/pull/13883
* Bump main to 18.9.0 after vs18.8 snap by @​OvesN in
https://github.com/dotnet/msbuild/pull/13880
* Avoid checkout in insertion pipeline by @​rainersigwald in
https://github.com/dotnet/msbuild/pull/13887
* Report actual launch path in MSB4216 for Runtime="NET" task host by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/13889
* Migrate Tlblmp and AxImp to Multithreaded Execution by @​AlesProkop in
https://github.com/dotnet/msbuild/pull/13708
* Replace ErrorUtilities assertion methods with Assumed API and BCL
throw helpers by @​DustinCampbell in
https://github.com/dotnet/msbuild/pull/13790
* Fix CLR_E_SHIM_RUNTIMELOAD in RAR's IMetaDataDispenser activation by
@​JeremyKuhne in https://github.com/dotnet/msbuild/pull/13899
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13905
* [main] Update dependencies from dotnet/arcade by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/13907
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/13910
* [vs17.14] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13908
* [vs18.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13906
* Fix ToolTask output loss: increase EOF pipe timeout from 2s to 30s by
@​huulinhnguyen-dev in https://github.com/dotnet/msbuild/pull/13767
* Improve symlink cycle condition by @​GangWang01 in
https://github.com/dotnet/msbuild/pull/13901
* [vs18.6] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13904
* Add flaky-test detection and auto-fix agentic workflows by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/13915
* Quote --ignore-exit-code values so the quarantine pipeline does not
shell-split on Unix by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13918
* Fix flaky-test detector PR-evidence loss and raise scan limits by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/13919
* Tighten the pr review agent by @​JanKrivanek in
https://github.com/dotnet/msbuild/pull/13921
* Add environment variables for governance detection by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13920
* Change IsPackable to true and add IsShipping flag by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13924
* [vs18.7] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13911
* Make flaky detector verify recurrence postdates the fix before
commenting by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13930
* Fix AbsolutePath.GetCanonicalForm process state leak on Windows by
@​OvesN in https://github.com/dotnet/msbuild/pull/13788
* Fix flaky detector: unblock dnceng feed, fail fast, and defer
quarantine to a second run by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13936
* Update documentation for ImplicitUsings element by @​drewnoakes in
https://github.com/dotnet/msbuild/pull/13900
* [vs18.6] Point OptProf bootstrapper at rel/stable instead of int.main
by @​AlesProkop in https://github.com/dotnet/msbuild/pull/13923
* Add CS8618 suppressor for required MSBuild task properties by
@​AArnott in https://github.com/dotnet/msbuild/pull/13926
* Tighten NodeLaunchData.EnvironmentOverrides nullability to
IDictionary<string, string?>? by @​OvesN with @​Copilot in
https://github.com/dotnet/msbuild/pull/13815
* Fix ToolTask EOF wait to be STA-safe via CountdownEvent (MSB4018 in
AspNetCompiler) by @​YuliiaKovalova in
https://github.com/dotnet/msbuild/pull/13917
* [automated] Merge branch 'vs18.6' => 'vs18.7' by @​github-actions[bot]
in https://github.com/dotnet/msbuild/pull/13941
* Localized file check-in by OneLocBuild Task: Build definition ID 9434:
Build ID 14192258 by @​dotnet-bot in
https://github.com/dotnet/msbuild/pull/13849
* Bumping to 10.0.8 runtime packages by @​OvesN in
https://github.com/dotnet/msbuild/pull/13898
* Flaky-test workflow: reassure on empty PR list + drop local
reproduction (quarantine-first) by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13938
* [Flaky Test] Un-quarantine 5 consistently-green tests by
@​github-actions[bot] in https://github.com/dotnet/msbuild/pull/13952
* Flaky-test detector: open PRs ready-for-review; drop
newly-filed-issues section from PR body by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13958
* [Flaky Test] Quarantine 4 flaky tests by @​github-actions[bot] in
https://github.com/dotnet/msbuild/pull/13937
* Flaky-test: fix duplicate-issue bug by switching dedup key to a
visible code-block key by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13963
* CsWin32 follow-up: WindowsNative + VS Setup Configuration + remaining
hand-rolled interop by @​JeremyKuhne in
https://github.com/dotnet/msbuild/pull/13872
* Add the reviewer release skill checking if the Learn article Change
waves is updated by @​GangWang01 in
https://github.com/dotnet/msbuild/pull/13840
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/13977
 ... (truncated)

Commits viewable in [compare
view](https://github.com/dotnet/msbuild/compare/v18.8.2...v18.10.1).
</details>

Updated
[Microsoft.Build.Utilities.Core](https://github.com/dotnet/msbuild) from
18.8.2 to 18.10.1.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Build.Utilities.Core's
releases](https://github.com/dotnet/msbuild/releases)._

## 18.10.1

## What's Changed
* [vs16.11] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13103
* [vs17.12] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13796
* [vs17.8] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13902
* [vs17.11] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13903
* [vs17.12] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13909
* [vs17.12] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13986
* Add vs18.9 to merge-flow config; retire vs18.3 by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14214
* Bump labeler-cache-retention to use issue-labeler v2.1.0 by
@​jeffhandley in https://github.com/dotnet/msbuild/pull/14171
* Bump main to 18.10.0 after vs18.9 snap by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14216
* Improve release skill: Phase 2 DARC rules, VMR backflow, deterministic
baseline by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14220
* Determinize release: hardcode OptProf baseline + Phase 3.2 baseline
resolver by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14222
* Serialize BuildRequestConfiguration.RequestedTargets to fix solution
metaproject MSB4057 in parallel builds by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/14223
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14203
* Core support for AbsolutePath/FileInfo/DirectoryInfo and ITaskItem<T>
as task parameters by @​baronfel in
https://github.com/dotnet/msbuild/pull/13971
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14206
* Fix existence cache kind poisoning by @​AlesProkop in
https://github.com/dotnet/msbuild/pull/14249
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14226
* Don't disable the MSBuild server for /mt builds when node reuse is off
by @​AR-May in https://github.com/dotnet/msbuild/pull/14248
* Enhance expert reviewer guidelines with additional checks. by @​AR-May
in https://github.com/dotnet/msbuild/pull/14255
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14253
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14268
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14267
* Bump github/gh-aw-actions/setup from 0.81.6 to 0.82.2 by
@​dependabot[bot] in https://github.com/dotnet/msbuild/pull/14266
* Avoid boxing the struct enumerator in
PropertyDictionary<T>.GetEnumerator() by @​nareshjo in
https://github.com/dotnet/msbuild/pull/14272
* Refresh copy marker when implementation output changes by @​AlesProkop
in https://github.com/dotnet/msbuild/pull/14231
* Send task-host build process environment as delta by @​OvesN in
https://github.com/dotnet/msbuild/pull/14126
* Add regression coverage for metadata newline preservation by
@​VolPlita in https://github.com/dotnet/msbuild/pull/14261
* Fix EmbedInBinlog items with relative paths from child projects by
@​huulinhnguyen-dev in https://github.com/dotnet/msbuild/pull/13990
* Stop requiring VersionPrefix updates in servicing - insert prerelease
versions to VS by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/14277
* Fix WriteLinesToFile rewriting unchanged file when custom encoding is
used by @​huulinhnguyen-dev in
https://github.com/dotnet/msbuild/pull/14146
* Enable trim/AOT analyzers for Microsoft.Build and clean up annotations
by @​JeremyKuhne in https://github.com/dotnet/msbuild/pull/14064
* [automated] Merge branch 'vs18.9' => 'main' by @​github-actions[bot]
in https://github.com/dotnet/msbuild/pull/14291
* Fix MicroBuild plugin feed URL to use allowed pkgs.dev.azure.com
format by @​AlesProkop in https://github.com/dotnet/msbuild/pull/14295
* Pass ExcludeRestorePackageImports during restore to avoid redundant
evaluations by @​ViktorHofer with @​Copilot in
https://github.com/dotnet/msbuild/pull/14274
* [vs18.7] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13988
* Adopt Clever Test Selection (CTS) as parallel, non-blocking PR
pipeline by @​jankratochvilcz in
https://github.com/dotnet/msbuild/pull/14212
* Harden exceptions when connecting to server by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14292
* Update MicrosoftBuildVersion in analyzer template by
@​github-actions[bot] in https://github.com/dotnet/msbuild/pull/13886
* Fix MSBuild Server client dropping build result under WaitAny race
(#​14172) by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14251
* Partially revert #​13660: remove NuGet RestoreTask transient TaskHost
workaround by @​JanProvaznik in
https://github.com/dotnet/msbuild/pull/14297
* Disable daily AI credits guardrail for Expert Code Review workflow by
@​JanProvaznik with @​Copilot in
https://github.com/dotnet/msbuild/pull/14314
* Localized file check-in by OneLocBuild Task: Build definition ID 9434:
Build ID 14614733 by @​dotnet-bot in
https://github.com/dotnet/msbuild/pull/14246
* Add opt-in partial (stop-after-pass) project evaluation by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/14290
* Use partial evaluation for -getProperty/-getItem without a target by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/14296
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14324
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/14333
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/14330
* Bump github/gh-aw-actions/setup from 0.82.2 to 0.82.8 by
@​dependabot[bot] in https://github.com/dotnet/msbuild/pull/14328
* Restrict partial evaluation to ProjectInstance by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/14340
 ... (truncated)

## 18.9.6

## What's Changed
* [vs18.6] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13793
* [vs18.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13859
* [vs18.6] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13858
* [vs18.7] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13863
* CsWin32 follow-up: CLR metadata + TypeLib interop migration by
@​JeremyKuhne in https://github.com/dotnet/msbuild/pull/13853
* Update vmr-sb-validation.yml for Azure Pipelines by @​meghnave in
https://github.com/dotnet/msbuild/pull/13871
* Test: keep shell alive 15s in ToolTaskCanChangeCanonicalErrorFormat
(#​13734) by @​jankratochvilcz in
https://github.com/dotnet/msbuild/pull/13878
* Add vs18.8 to merge-flow config by @​OvesN in
https://github.com/dotnet/msbuild/pull/13877
* Stable branding for 18.8 release by @​OvesN in
https://github.com/dotnet/msbuild/pull/13883
* Bump main to 18.9.0 after vs18.8 snap by @​OvesN in
https://github.com/dotnet/msbuild/pull/13880
* Avoid checkout in insertion pipeline by @​rainersigwald in
https://github.com/dotnet/msbuild/pull/13887
* Report actual launch path in MSB4216 for Runtime="NET" task host by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/13889
* Migrate Tlblmp and AxImp to Multithreaded Execution by @​AlesProkop in
https://github.com/dotnet/msbuild/pull/13708
* Replace ErrorUtilities assertion methods with Assumed API and BCL
throw helpers by @​DustinCampbell in
https://github.com/dotnet/msbuild/pull/13790
* Fix CLR_E_SHIM_RUNTIMELOAD in RAR's IMetaDataDispenser activation by
@​JeremyKuhne in https://github.com/dotnet/msbuild/pull/13899
* [main] Update dependencies from nuget/nuget.client by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13905
* [main] Update dependencies from dotnet/arcade by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/13907
* [main] Update dependencies from dotnet/roslyn by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/13910
* [vs17.14] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13908
* [vs18.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13906
* Fix ToolTask output loss: increase EOF pipe timeout from 2s to 30s by
@​huulinhnguyen-dev in https://github.com/dotnet/msbuild/pull/13767
* Improve symlink cycle condition by @​GangWang01 in
https://github.com/dotnet/msbuild/pull/13901
* [vs18.6] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13904
* Add flaky-test detection and auto-fix agentic workflows by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/13915
* Quote --ignore-exit-code values so the quarantine pipeline does not
shell-split on Unix by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13918
* Fix flaky-test detector PR-evidence loss and raise scan limits by
@​ViktorHofer in https://github.com/dotnet/msbuild/pull/13919
* Tighten the pr review agent by @​JanKrivanek in
https://github.com/dotnet/msbuild/pull/13921
* Add environment variables for governance detection by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13920
* Change IsPackable to true and add IsShipping flag by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13924
* [vs18.7] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in https://github.com/dotnet/msbuild/pull/13911
* Make flaky detector verify recurrence postdates the fix before
commenting by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13930
* Fix AbsolutePath.GetCanonicalForm process state leak on Windows by
@​OvesN in https://github.com/dotnet/msbuild/pull/13788
* Fix flaky detector: unblock dnceng feed, fail fast, and defer
quarantine to a second run by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13936
* Update documentation for ImplicitUsings element by @​drewnoakes in
https://github.com/dotnet/msbuild/pull/13900
* [vs18.6] Point OptProf bootstrapper at rel/stable instead of int.main
by @​AlesProkop in https://github.com/dotnet/msbuild/pull/13923
* Add CS8618 suppressor for required MSBuild task properties by
@​AArnott in https://github.com/dotnet/msbuild/pull/13926
* Tighten NodeLaunchData.EnvironmentOverrides nullability to
IDictionary<string, string?>? by @​OvesN with @​Copilot in
https://github.com/dotnet/msbuild/pull/13815
* Fix ToolTask EOF wait to be STA-safe via CountdownEvent (MSB4018 in
AspNetCompiler) by @​YuliiaKovalova in
https://github.com/dotnet/msbuild/pull/13917
* [automated] Merge branch 'vs18.6' => 'vs18.7' by @​github-actions[bot]
in https://github.com/dotnet/msbuild/pull/13941
* Localized file check-in by OneLocBuild Task: Build definition ID 9434:
Build ID 14192258 by @​dotnet-bot in
https://github.com/dotnet/msbuild/pull/13849
* Bumping to 10.0.8 runtime packages by @​OvesN in
https://github.com/dotnet/msbuild/pull/13898
* Flaky-test workflow: reassure on empty PR list + drop local
reproduction (quarantine-first) by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13938
* [Flaky Test] Un-quarantine 5 consistently-green tests by
@​github-actions[bot] in https://github.com/dotnet/msbuild/pull/13952
* Flaky-test detector: open PRs ready-for-review; drop
newly-filed-issues section from PR body by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13958
* [Flaky Test] Quarantine 4 flaky tests by @​github-actions[bot] in
https://github.com/dotnet/msbuild/pull/13937
* Flaky-test: fix duplicate-issue bug by switching dedup key to a
visible code-block key by @​ViktorHofer in
https://github.com/dotnet/msbuild/pull/13963
* CsWin32 follow-up: WindowsNative + VS Setup Configuration + remaining
hand-rolled interop by @​JeremyKuhne in
https://github.com/dotnet/msbuild/pull/13872
* Add the reviewer release skill checking if the Learn article Change
waves is updated by @​GangWang01 in
https://github.com/dotnet/msbuild/pull/13840
* [main] Source code updates from dotnet/dotnet by @​dotnet-maestro[bot]
in https://github.com/dotnet/msbuild/pull/13977
 ... (truncated)

Commits viewable in [compare
view](https://github.com/dotnet/msbuild/compare/v18.8.2...v18.10.1).
</details>

Updated
[Microsoft.Extensions.Configuration](https://github.com/dotnet/dotnet)
from 10.0.9 to 10.0.12.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Configuration's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.Configuration.Binder](https://github.com/dotnet/dotnet)
from 10.0.9 to 10.0.12.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Configuration.Binder's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.Configuration.Json](https://github.com/dotnet/dotnet)
from 10.0.9 to 10.0.12.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Configuration.Json's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.DependencyInjection](https://github.com/dotnet/dotnet)
from 10.0.9 to 10.0.12.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.DependencyInjection's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.FileSystemGlobbing](https://github.com/dotnet/dotnet)
from 10.0.9 to 10.0.12.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.FileSystemGlobbing's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Microsoft.Extensions.Hosting](https://github.com/dotnet/dotnet)
from 10.0.7 to 10.0.12.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Hosting's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Microsoft.Extensions.Http](https://github.com/dotnet/dotnet)
from 10.0.9 to 10.0.12.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Http's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Microsoft.Extensions.Logging](https://github.com/dotnet/dotnet)
from 10.0.9 to 10.0.12.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Logging's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.NET.Sdk.WebAssembly.Pack](https://github.com/dotnet/dotnet)
from 10.0.8 to 10.0.12.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.NET.Sdk.WebAssembly.Pack's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest)
from 18.7.0 to 18.10.0.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.NET.Test.Sdk's
releases](https://github.com/microsoft/vstest/releases)._

## 18.10.0


## What's Changed
* Drop Mono fallback, run .NET Framework tests on Windows only by
@​nohwnd in https://github.com/microsoft/vstest/pull/16158
* Run Microsoft.Testing.Platform test apps under `vstest.console` and
datacollector by @​nohwnd in
https://github.com/microsoft/vstest/pull/16201
* Fix test output eaten by MSBuild terminal logger by @​nohwnd in
https://github.com/microsoft/vstest/pull/16223
* Remove the experimental test session feature by @​nohwnd in
https://github.com/microsoft/vstest/pull/16231
* Skip a single bad executor instead of failing all executor loading by
@​nohwnd in https://github.com/microsoft/vstest/pull/16239
* Assert apartment state instead of using Clipboard in UI tests by
@​nohwnd in https://github.com/microsoft/vstest/pull/16270
* Surface test host crashes during protocol negotiation by @​nohwnd in
https://github.com/microsoft/vstest/pull/16285
* Pass the inferred target platform to the host in run settings by
@​nohwnd in https://github.com/microsoft/vstest/pull/16271
* Report raw invalid IsTargetPlatformInferred value, cover host x64
forcing by @​nohwnd in https://github.com/microsoft/vstest/pull/16295
* Disable the MTP testhost by default (#​16337) by @​nohwnd in
https://github.com/microsoft/vstest/pull/16341


**Full Changelog**:
https://github.com/microsoft/vstest/compare/v18.9.0...v18.10.0

## 18.9.0

## What's Changed
* Fix tilde/exclamation characters corrupted in TerminalLogger test
output by @​nohwnd in https://github.com/microsoft/vstest/pull/16046
* Make TranslationLayer Native AOT-compatible by @​drewnoakes in
https://github.com/microsoft/vstest/pull/16045
* Guard GenerateProgramFile target against UseWinUI/UseUwpTools
evaluation order by @​nohwnd in
https://github.com/microsoft/vstest/pull/16072
* Add RequestingAssembly to AssemblyResolveEventArgs for binary compat
by @​nohwnd in https://github.com/microsoft/vstest/pull/16076
* Remove stale Microsoft.Extensions.FileSystemGlobbing binding redirect
from testhost.x86 and datacollector by @​Evangelink in
https://github.com/microsoft/vstest/pull/16082
* Fix TRX attachment paths when LogFileName contains a subdirectory by
@​nohwnd in https://github.com/microsoft/vstest/pull/15791
* Fix missing dumps for .NET Framework child processes in
NetClientHangDumper by @​nohwnd in
https://github.com/microsoft/vstest/pull/16098
* Fix data collection channels to use negotiated protocol version
instead of V1 by @​nohwnd in
https://github.com/microsoft/vstest/pull/16096
* Fix race condition in BlameCollector: skip hang dump when testhost
hasn't launched yet by @​nohwnd in
https://github.com/microsoft/vstest/pull/16065
* Replace TestSDKAutoGeneratedCode with ExcludeFromCodeCoverage in
auto-generated Program files by @​nohwnd in
https://github.com/microsoft/vstest/pull/16101
* Include testhost process path in crash error messages by @​nohwnd in
https://github.com/microsoft/vstest/pull/16108
* Fix DataDriven test results being double-counted in TRX logger totals
by @​nohwnd in https://github.com/microsoft/vstest/pull/15766
* Fix datacollector crash visibility: replace Assert with throwable
exceptions by @​nohwnd in https://github.com/microsoft/vstest/pull/16048
* Add TreatErrorMessagesAsWarnings parameter to TRX logger by @​nohwnd
in https://github.com/microsoft/vstest/pull/16106
* Wait for testhost stderr to drain before reading its crash output by
@​nohwnd in https://github.com/microsoft/vstest/pull/16128
* Handle runtimeconfig.dev.json without additionalProbingPaths by @​tmat
in https://github.com/microsoft/vstest/pull/16166
* Suggest Microsoft.NET.Test.Sdk when a managed test project brings no
testhost by @​nohwnd in https://github.com/microsoft/vstest/pull/16169
* Fix x86 testhost loading mismatched x64 hostfxr (0x800700C1) when run
via vstest.console.exe directly (#​16151) by @​azat-msft in
https://github.com/microsoft/vstest/pull/16156
* Preserve the real exception (type + stack trace) when a test run
aborts in BaseRunTests by @​nohwnd in
https://github.com/microsoft/vstest/pull/16167

## New Contributors
* @​drewnoakes made their first contribution in
https://github.com/microsoft/vstest/pull/16045

**Full Changelog**:
https://github.com/microsoft/vstest/compare/v18.8.0...v18.9.0

## 18.8.1

## What's Changed
* Fix protocol negotiation timeout when STJ reflection is disabled
(18.8.1) by @​nohwnd in https://github.com/microsoft/vstest/pull/16281


**Full Changelog**:
https://github.com/microsoft/vstest/compare/v18.8.0...v18.8.1

## 18.8.0

## What's Changed
* Migrate from Newtonsoft.Json to System.Text.Json / Jsonite (merge to
main) by @​nohwnd in https://github.com/microsoft/vstest/pull/15687
- For more detail refer to
https://devblogs.microsoft.com/dotnet/vs-test-is-removing-its-newtonsoft-json-dependency/
* Create source-only filter package by @​Youssef1313 in
https://github.com/microsoft/vstest/pull/15638
* Add ARM64 msdia140.dll support to test platform packages by @​nohwnd
in https://github.com/microsoft/vstest/pull/15692
* Fix mutex cleanup crash on macOS/Linux by @​nohwnd in
https://github.com/microsoft/vstest/pull/15684
* Restrict artifact temp directory permissions on Unix by @​nohwnd in
https://github.com/microsoft/vstest/pull/15729
* Add support for filtering uncategorized tests with TestCategory=None
by @​Evangelink in https://github.com/microsoft/vstest/pull/15727
* Fix SCI binding failure in DTA hosts (main) by @​nohwnd in
https://github.com/microsoft/vstest/pull/15724
* Fix HTML logger parallel file collision by @​nohwnd in
https://github.com/microsoft/vstest/pull/15435
* Improve error message when testhost cannot be found by @​nohwnd in
https://github.com/microsoft/vstest/pull/16053
* Fix HTML logger exception on invalid XML chars in test display names
by @​nohwnd in https://github.com/microsoft/vstest/pull/16051

**Full Changelog**:
https://github.com/microsoft/vstest/compare/v18.7.0...v18.8.0

Commits viewable in [compare
view](https://github.com/microsoft/vstest/compare/v18.7.0...v18.10.0).
</details>

Updated
[Microsoft.PowerPlatform.ResourceStack](https://github.com/azure/resourcestack)
from 7.0.0.2080 to 7.0.0.2118.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.PowerPlatform.ResourceStack's
releases](https://github.com/azure/resourcestack/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/azure/resourcestack/commits).
</details>

Updated
[Microsoft.PowerPlatform.ResourceStack](https://github.com/azure/resourcestack)
from 7.0.0.2080 to 7.0.0.2129.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.PowerPlatform.ResourceStack's
releases](https://github.com/azure/resourcestack/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/azure/resourcestack/commits).
</details>

Updated
[Microsoft.VisualStudio.Threading](https://github.com/microsoft/vs-threading)
from 17.12.19 to 18.7.23.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.VisualStudio.Threading's
releases](https://github.com/microsoft/vs-threadin…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants