Skip to content

Isolate Graph authentication assembly loading (#3632)#3633

Open
ramsessanchez wants to merge 1 commit into
mainfrom
fixauth-module-assembly-loading
Open

Isolate Graph authentication assembly loading (#3632)#3633
ramsessanchez wants to merge 1 commit into
mainfrom
fixauth-module-assembly-loading

Conversation

@ramsessanchez
Copy link
Copy Markdown
Contributor

Full Description available here: #3632

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the Microsoft.Graph.Authentication PowerShell module wrapper to load the authentication binary (Microsoft.Graph.Authentication.dll) into a dedicated AssemblyLoadContext on PowerShell Core, improving dependency isolation for Microsoft 365 module interop scenarios while keeping Windows PowerShell/Desktop behavior unchanged.

Changes:

  • Load Microsoft.Graph.Authentication.dll via a named AssemblyLoadContext on PowerShell Core and add a managed dependency resolver for that context.
  • Stop generating NestedModules entries for the authentication DLLs so the script module controls when/how the binary loads.
  • Add Pester coverage to validate the root assembly and worker-thread dependency resolution are outside AssemblyLoadContext.Default on PowerShell Core.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
src/Authentication/Authentication/Microsoft.Graph.Authentication.psm1 Introduces custom ALC loading, dependency resolver registration, and updated export/alias logic.
src/Authentication/Authentication/test/Microsoft.Graph.Authentication.Tests.ps1 Adds import-time tests to assert isolated ALC loading and worker-thread dependency resolution.
src/Authentication/Authentication/build-module.ps1 Removes generated NestedModules update so the wrapper controls assembly load context selection.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +65 to +78

foreach (string dependencyFolder in dependencyFolders)
{
if (string.IsNullOrWhiteSpace(dependencyFolder) || !Directory.Exists(dependencyFolder))
{
continue;
}

string dependencyPath = Path.Combine(dependencyFolder, assemblyName.Name + ".dll");
if (File.Exists(dependencyPath))
{
return context.LoadFromAssemblyPath(Path.GetFullPath(dependencyPath));
}
}
Comment on lines +93 to +95
if ($PSEdition -ne 'Core' -or -not ('System.Runtime.Loader.AssemblyLoadContext' -as [type])) {
return Import-Module -Name $ModulePath -PassThru
}
@PrzemyslawKlys
Copy link
Copy Markdown

Opened follow-up PR #3635 against this branch to address the Copilot inline comments here and the earlier worker-thread test flakiness note from #3632. Focused auth Pester tests pass locally (8/8) and git diff --check is clean.

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.

3 participants