Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@mthalman
Copy link
Member

@mthalman mthalman commented Dec 5, 2025

Implements property workload support for the 2xx feature band. This does two things:

  • Ensures that workloads are versioned with the associated 1xx build instead of the current 2xx build.
    image
  • Consumes the workload manifest MSI packages from the associated 1xx build instead of building it in 2xx.

Example build containing the artifacts for inspection.

Fixes #3126

-->
<PrivateSourceBuiltSdkVersion>10.0.100-rtm.25523.111</PrivateSourceBuiltSdkVersion>
<PrivateSourceBuiltArtifactsVersion>10.0.100-rtm.25523.111</PrivateSourceBuiltArtifactsVersion>
<DotNet1xxWorkloadManifestVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest100100Version)</DotNet1xxWorkloadManifestVersion>
Copy link
Member

Choose a reason for hiding this comment

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

Do we ever override MicrosoftNETWorkloadEmscriptenCurrentManifest100100Version by what's coming in via PSB? Asking as if we do that, the DotNet1xxWorkloadManifestVersion property would point at the wrong version as the override happens at a later point.

We in general recommend to not read from other properties in Versions.props due to versions getting overwritten later by PvP.

Copy link
Member Author

Choose a reason for hiding this comment

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

PSB only applies to dependencies in the repos. Since this dependency is at the root level, PSB doesn't influence the version. And even if it did, it should be the correct version anyway as the PSB of a 2xx build should still contain the 1xx version of this package.

Copy link
Member

Choose a reason for hiding this comment

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

We do have PSB support in the repo root:

<!-- For source only builds non test builds, override Versions.props entries with previously sourcebuilt artifacts. -->
<Import Project="$(PreviouslySourceBuiltPackageVersionsPropsFile)" Condition="'$(DotNetBuildSourceOnly)' == 'true' and '$(IsTestRun)' != 'true' and Exists('$(PreviouslySourceBuiltPackageVersionsPropsFile)')" />

And even if it did, it should be the correct version anyway as the PSB of a 2xx build should still contain the 1xx version of this package.

👍

@mthalman mthalman requested a review from ViktorHofer December 9, 2025 16:01

<BuildArgs>$(BuildArgs) /p:PublicBaseURL=file:%2F%2F$(ArtifactsAssetsDir)</BuildArgs>
<BuildArgs>$(BuildArgs) /p:UsePortableLinuxSharedFramework=false</BuildArgs>
<BuildArgs>$(BuildArgs) /p:DotNetBuildSharedComponents=$(DotNetBuildSharedComponents)</BuildArgs>
Copy link
Member

Choose a reason for hiding this comment

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

Can we only pass that in when necessary?

Copy link
Member Author

Choose a reason for hiding this comment

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

How does that help? That then creates a dependency on knowing what the default value is. Just as your suggestion in #3705 (comment) shows, if we were to only set it as /p:DotNetBuildSharedComponents=false then any conditions of '$(DotNetBuildSharedComponents)' == 'true' in the sdk repo would always be false. That forces there to be too much understanding of default values across the files.

Copy link
Member

Choose a reason for hiding this comment

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

In high level terms I'm asking if we can make 1xx the default experience (as I think it already is today in the repos). The 2xx which if I read things correctly is indicated by /p:DotNetBuildSharedComponents=false would be the opt-in experience.

Copy link
Member

Choose a reason for hiding this comment

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

I agree with Viktor.

</Target>

<Target Name="_CollectDownloadedWorkloadPacks"
Condition="'$(BuildWorkloads)' == 'true' and '$(DotNetBuildSharedComponents)' == 'true'">
Copy link
Member

Choose a reason for hiding this comment

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

Can we make this the default when BuildWorkloads is set so that we only pass /p:DotNetBuildSharedComponents=false in?

Copy link
Member Author

Choose a reason for hiding this comment

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

I'm not sure I understand. Can you explain more or provide a suggested change?

@mthalman mthalman requested a review from dsplaisted December 11, 2025 17:58
@mthalman
Copy link
Member Author

Reviewers: I need some eyes on this. Thanks.

<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>fad253f51b461736dfd3cd9c15977bb7493becef</Sha>
</Dependency>
<Dependency Name="Microsoft.NET.Workload.Emscripten.Current.Manifest-10.0.100" Version="10.0.100">
Copy link
Member

Choose a reason for hiding this comment

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

we need to remember to add this for every non-1xx branch going forward, do we have something to track this? or even better add it to branching automation

-->
<PrivateSourceBuiltSdkVersion>10.0.101-servicing.25569.105</PrivateSourceBuiltSdkVersion>
<PrivateSourceBuiltArtifactsVersion>10.0.101-servicing.25569.105</PrivateSourceBuiltArtifactsVersion>
<DotNet1xxWorkloadManifestVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest100100Version)</DotNet1xxWorkloadManifestVersion>
Copy link
Member

Choose a reason for hiding this comment

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

nit: add a comment above this line, this helps prevent merge conflicts. might be also a good place to document why we have this dependency

</ItemGroup>

<ItemGroup Condition="'$(PublishingWorkloadMsiInternal)' == 'true'">
<ItemGroup Condition="'$(DotNetBuildSharedComponents)' != 'true'">
Copy link
Member

Choose a reason for hiding this comment

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

I don't understand this change, can you explain?


<BuildArgs>$(BuildArgs) /p:PublicBaseURL=file:%2F%2F$(ArtifactsAssetsDir)</BuildArgs>
<BuildArgs>$(BuildArgs) /p:UsePortableLinuxSharedFramework=false</BuildArgs>
<BuildArgs>$(BuildArgs) /p:DotNetBuildSharedComponents=$(DotNetBuildSharedComponents)</BuildArgs>
Copy link
Member

Choose a reason for hiding this comment

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

I agree with Viktor.

<RuntimeWorkloadPacksToDownload Include="Microsoft.NETCore.App.Runtime.win-x86" />
<RuntimeWorkloadPacksToDownload Include="Microsoft.NETCore.App.Runtime.win-arm64" ExcludeAsMsi="true" />
<RuntimeWorkloadPacksToDownload Include="Microsoft.NETCore.App.Runtime.win-x64" ExcludeAsMsi="true" />
<RuntimeWorkloadPacksToDownload Include="Microsoft.NETCore.App.Runtime.win-x86" ExcludeAsMsi="true" />
Copy link
Member

Choose a reason for hiding this comment

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

I don't think I fully understand why these three packages are special?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants