Skip to content

Remove net472 containers#53547

Open
YuliiaKovalova wants to merge 22 commits intorelease/10.0.3xxfrom
dev/ykovalova/remove_net472_containers
Open

Remove net472 containers#53547
YuliiaKovalova wants to merge 22 commits intorelease/10.0.3xxfrom
dev/ykovalova/remove_net472_containers

Conversation

@YuliiaKovalova
Copy link
Copy Markdown
Member

@YuliiaKovalova YuliiaKovalova commented Mar 20, 2026

Summary

Remove the net472 target from the Containers SDK (Microsoft.NET.Build.Containers), keeping only the .NET Core ($(SdkTargetFramework)) target.

The net472 build existed to support Visual Studio's Full-Framework MSBuild (MSBuildRuntimeType == Full). Now that VS uses .NET Runtime with HostObject support for container operations, the net472 target and all this infrastructure is no longer needed.

Fixes

dotnet/msbuild#11333

@github-actions github-actions Bot added the Area-Containers Related to dotnet SDK containers functionality label Mar 20, 2026
@YuliiaKovalova YuliiaKovalova changed the base branch from main to release/10.0.3xx March 23, 2026 12:35
@YuliiaKovalova YuliiaKovalova changed the title remove net472 containers Remove net472 containers Mar 23, 2026
@YuliiaKovalova YuliiaKovalova marked this pull request as ready for review March 23, 2026 17:14
@YuliiaKovalova YuliiaKovalova requested a review from a team as a code owner March 23, 2026 17:14
Copilot AI review requested due to automatic review settings March 23, 2026 17:14
@YuliiaKovalova
Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

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 removes the net472 target and associated packaging/test/layout infrastructure from the Containers SDK (Microsoft.NET.Build.Containers), aligning with the move away from Full Framework MSBuild for VS container operations.

Changes:

  • Drop multi-targeting ($(SdkTargetFramework);net472) for Microsoft.NET.Build.Containers and related integration tests, removing net472-only source/test shims.
  • Remove net472 task publishing/packaging outputs (layout + nupkg content) and update package content expectations accordingly.
  • Update the shipped .props to always point at the .NET (net10.0) task implementation.

Reviewed changes

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

Show a summary per file
File Description
test/UnitTests.proj Stops including Containers integration tests in the TestFullMSBuild/net472 run.
test/Microsoft.NET.Build.Containers.IntegrationTests/PackageTests.cs Updates dependency and nupkg content assertions to remove tasks/net472 expectations.
test/Microsoft.NET.Build.Containers.IntegrationTests/Microsoft.NET.Build.Containers.IntegrationTests.csproj Removes net472 target and related conditional compilation setup.
test/Microsoft.NET.Build.Containers.IntegrationTests/FullFramework/CreateNewImageToolTaskTests.cs Deletes Full Framework–specific tests for the removed ToolTask-based implementation.
src/Layout/redist/targets/GenerateLayout.targets Removes publishing of net472 task assets into the redist layout.
src/Layout/redist/targets/Crossgen.targets Updates comment to reflect removal of net472 components.
src/Containers/packaging/package.csproj Removes net472 packaging path and dependency harvesting for net472 tasks.
src/Containers/packaging/build/Microsoft.NET.Build.Containers.props Removes MSBuild runtime-based TFM selection; uses only net10.0 tasks and updates UsingTask declarations.
src/Containers/Microsoft.NET.Build.Containers/net472Definitions.cs Deletes net472-only polyfills (IsExternalInit, NotNullWhenAttribute).
src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateNewImageToolTask.cs Deletes the net472 ToolTask-based shim implementation.
src/Containers/Microsoft.NET.Build.Containers/Tasks/ComputeDotnetBaseImageAndTag.cs Removes now-unused NETFRAMEWORK-only using directives.
src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net472/PublicAPI.Unshipped.txt Removes net472 public API baseline.
src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net472/PublicAPI.Shipped.txt Removes net472 public API baseline header.
src/Containers/Microsoft.NET.Build.Containers/Microsoft.NET.Build.Containers.csproj Removes net472 TFM and all net472-specific compile/package reference conditionals.
src/Containers/Microsoft.NET.Build.Containers/ContainerHelpers.cs Removes NETFRAMEWORK/NET conditional usings now that net472 is gone.

Comment thread src/Containers/packaging/package.csproj Outdated
@baronfel
Copy link
Copy Markdown
Member

This looks correct, however anyone still using the Microsoft.Net.Build.Containers NuGet package and using an older version of VS will be broken if they upgrade. We need to stop publishing the package now that it's baked into the SDK too.

@YuliiaKovalova
Copy link
Copy Markdown
Member Author

This looks correct, however anyone still using the Microsoft.Net.Build.Containers NuGet package and using an older version of VS will be broken if they upgrade. We need to stop publishing the package now that it's baked into the SDK too.

@marcpopMSFT & @mmitche could you please check this comment? Do you have any concerns regarding removing this package from publishing?

@mmitche
Copy link
Copy Markdown
Member

mmitche commented Mar 24, 2026

This looks correct, however anyone still using the Microsoft.Net.Build.Containers NuGet package and using an older version of VS will be broken if they upgrade. We need to stop publishing the package now that it's baked into the SDK too.

@marcpopMSFT & @mmitche could you please check this comment? Do you have any concerns regarding removing this package from publishing?

Only concern is that it shows up as a package ref somewhere we don't expect, but we should find that in testing. Mark the package as non-shipping and I think that should about do it.

@marcpopMSFT marcpopMSFT requested a review from lbussell March 24, 2026 20:22
@YuliiaKovalova
Copy link
Copy Markdown
Member Author

This looks correct, however anyone still using the Microsoft.Net.Build.Containers NuGet package and using an older version of VS will be broken if they upgrade. We need to stop publishing the package now that it's baked into the SDK too.

@marcpopMSFT & @mmitche could you please check this comment? Do you have any concerns regarding removing this package from publishing?

Only concern is that it shows up as a package ref somewhere we don't expect, but we should find that in testing. Mark the package as non-shipping and I think that should about do it.

Cool, thanks!
Done

Comment thread src/Containers/packaging/package.csproj Outdated
<IsPackable>true</IsPackable>
<IsShipping>true</IsShipping>
<IsShipping>false</IsShipping>
<IsShippingPackage>true</IsShippingPackage>
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.

@mmitche what's the difference/meaning of IsShipping vs IsShippingPackage? Are both needed?

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.

IsShipping is broader than IsShippingPackage. IsShipping are used in projects where some assets produced are shipping while others are not: https://github.com/dotnet/arcade/blob/main/Documentation/ArcadeSdk.md#isshipping-isshippingassembly-isshippingpackage-isshippingvsix-bool

I would set IsShipping == false

YuliiaKovalova and others added 3 commits March 26, 2026 07:33
Removed Containers from RemainingFiles to prevent crossgenning of containerized DLLs.
YuliiaKovalova and others added 3 commits March 26, 2026 11:03
Delete netframeworkDefinitions.cs which contained net472-only polyfills
(IsExternalInit, NotNullWhenAttribute). With the net472 target removed,
these polyfills are no longer needed and the NotNullWhenAttribute in the
Microsoft.NET.Build.Containers namespace was shadowing the real
System.Diagnostics.CodeAnalysis.NotNullWhenAttribute, causing CS8767
in the test project (via InternalsVisibleTo).

Also restore the [NotNullWhen(true)] attribute on MockEnvironmentProvider
to match the IEnvironmentProvider interface.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@YuliiaKovalova YuliiaKovalova requested a review from baronfel March 31, 2026 10:44
@YuliiaKovalova
Copy link
Copy Markdown
Member Author

hi @lbussell ,
Could you please review the changes?

@YuliiaKovalova
Copy link
Copy Markdown
Member Author

hm , after pulling changes from the target branch the tests fail with
》C:\Program Files\Microsoft Visual Studio\18\Insiders\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1259,5): error MSB3644: The reference assemblies for .NETFramework,Version=v4.6.9 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application. You can download .NET Framework Developer Packs at https://aka.ms/msbuild/developerpacks [C:\h\w\AA3A097C\t\dotnetSdkTests\hepu34ny.vpu\MissingRefere---C53218B1\MissingReferenceAssemblies\MissingReferenceAssemblies.csproj]

https://helixr1107v0xdeko0k025g8.blob.core.windows.net/dotnet-sdk-refs-pull-53547-merge-b36b34842dd1493ea8/Microsoft.NET.Build.Tests.dll.4/3/console.b0eae202.log?helixlogtype=result&skoid=8eda00af-b5ec-4be9-b69b-0919a2338892&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2026-04-08T19%3A03%3A13Z&ske=2026-04-08T20%3A03%3A13Z&sks=b&skv=2026-02-06&sv=2026-02-06&se=2026-04-08T20%3A03%3A13Z&sr=b&sp=rl&sig=CbfG9rtbvtmyEysehbVKmhPJ5ybf3254LrHiDuVGres%3D

YuliiaKovalova and others added 3 commits April 9, 2026 12:54
…shipping

- Remove ToolExe, ToolPath properties from CreateNewImage (ToolTask was deleted)
- Remove ContainerizeDirectory property (only used by ToolTask)
- Remove DotNetHost PropertyGroup from targets (only used for ToolTask)
- Remove ContainerizeFolder/ContainerizeFolderName from props (no longer referenced)
- Remove IsShippingPackage=true (IsShipping=false is sufficient)
- Fix CopyNupkgToCustomFolder path: Shipping -> NonShipping
- Update PublicAPI.Unshipped.txt accordingly

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Dependency flow had bumped versions on the PR branch independently,
causing test failures due to version misalignment with the base branch.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@YuliiaKovalova
Copy link
Copy Markdown
Member Author

HI @DonnaChen888 ,

The reported failures aren't related to my changes, I see the same in https://github.com/dotnet/sdk/runs/72391515947

could you please force-merge it? I have an approval from containers maintainer.

@DonnaChen888
Copy link
Copy Markdown
Contributor

HI @DonnaChen888 ,

The reported failures aren't related to my changes, I see the same in https://github.com/dotnet/sdk/runs/72391515947

could you please force-merge it? I have an approval from containers maintainer.

Hi @marcpopMSFT, @dsplaisted, could you please take a look?

@dsplaisted dsplaisted enabled auto-merge April 22, 2026 15:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Area-Containers Related to dotnet SDK containers functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants