-
-
Notifications
You must be signed in to change notification settings - Fork 13
Reasonable Defaults For Centrally Controlled PackageReference Version #54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
0829ed9
c05ac1a
b2e133c
f3072c1
fcf4ac5
e63625a
6fdcc9a
5217a7c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,124 @@ | ||
| <!-- | ||
| ************************************************************************************************************************* | ||
| MSBuild.SDK.SystemWeb.Common.DefaultPackageVersions.targets | ||
| Allowing project owners to apply Central Control of Package Versions, and this Sdk is capable of providing reasonable default version numbers | ||
| when not set by the project owner | ||
| * Do this After the "ProjectFile" so we can detect if the project has already explicitly included these packages | ||
| * Do this After the "Directory.Build.targets" so CentralPackageVersions->Sdk.targets/Packages.props have already acted | ||
| * Which means AFTER the entire import chain | ||
| Microsoft.NET.Sdk/Sdk/Sdk.props | ||
| ************************************************************************************************************************* | ||
| --> | ||
| <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
| <PropertyGroup> | ||
| <!-- Set to CPM if using Nuget 6.2.0+ CPM | ||
| See https://learn.microsoft.com/en-us/nuget/consume-packages/Central-Package-Management | ||
| Addresses #49 --> | ||
| <ApplySDKDefaultPackageVersions Condition="'$(ManagePackageVersionsCentrally)'=='true' AND '$(ApplySDKDefaultPackageVersions)' == '' ">CPM</ApplySDKDefaultPackageVersions> | ||
|
|
||
| <!-- Set to CPV if using Microsoft.Build.CentralPackageVersions Requires Version 2.1.1 or higher | ||
| See https://github.com/microsoft/MSBuildSdks/tree/main/src/CentralPackageVersions --> | ||
| <ApplySDKDefaultPackageVersions Condition="'$(UsingMicrosoftCentralPackageVersionsSdk)'=='true' AND '$(EnableCentralPackageVersions)' != 'false' AND '$(ApplySDKDefaultPackageVersions)' == ''">CPV</ApplySDKDefaultPackageVersions> | ||
|
|
||
| <!-- Set to true if not using known Centralized logic and not already set --> | ||
| <ApplySDKDefaultPackageVersions Condition="'$(ApplySDKDefaultPackageVersions)'==''">true</ApplySDKDefaultPackageVersions> | ||
| </PropertyGroup> | ||
|
|
||
| <!-- | ||
| ************************************************************************************************************************* | ||
| Provide the appropriate mechanism to set Version for our PackageReference items when using Centralized Control | ||
| - https://github.com/CZEMacLeod/MSBuild.SDK.SystemWeb/issues/46 | ||
| - https://github.com/CZEMacLeod/MSBuild.SDK.SystemWeb/issues/49 | ||
| Only do this When Configured '$(ExcludeSDKDefaultPackages)'=='false' and '$(ApplySDKDefaultPackageVersions )' != 'false' | ||
| * Use a PackageVersion Item "Include" style manipulation like those found in a Directory.Packages.props | ||
| * Use a PackageReference Item "Update" style manipulation like those found in a Packages.targets | ||
| * Use a PackageReference Item "Update" style manipulation when no central logic | ||
| ************************************************************************************************************************* | ||
| --> | ||
| <ItemGroup Condition="'$(ExcludeSDKDefaultPackages)'=='false' AND '$(ApplySDKDefaultPackageVersions)' != 'false'"> | ||
|
|
||
| <!-- Find any PackageReferences added by this SDK, and provide Version when using Central Package Management --> | ||
| <PackageVersion | ||
| Include="@(PackageReference->WithMetadataValue('SystemWebSdkIncludedPackage','true')->HasMetadata('SystemWebSdkIncludedPackageVersion'))" | ||
| Exclude="@(PackageVersion)" | ||
| Condition=" '$(ApplySDKDefaultPackageVersions)' == 'CPM' " | ||
| > | ||
| <SystemWebSdkProvidedDefaultVersion>true</SystemWebSdkProvidedDefaultVersion> | ||
| <Version>%(SystemWebSdkIncludedPackageVersion)</Version> | ||
| </PackageVersion> | ||
|
|
||
| <!-- Find any PackageReferences added by this SDK, and provide Version when using Central Package Versions --> | ||
| <PackageReference | ||
| Update="@(PackageReference->WithMetadataValue('SystemWebSdkIncludedPackage','true')->HasMetadata('SystemWebSdkIncludedPackageVersion'))" | ||
| Condition=" '$(ApplySDKDefaultPackageVersions)' == 'CPV' " | ||
| > | ||
| <SystemWebSdkProvidedDefaultVersion Condition="'%(Version)' == '' ">true</SystemWebSdkProvidedDefaultVersion> | ||
| <Version Condition="'%(Version)' == '' ">%(SystemWebSdkIncludedPackageVersion)</Version> | ||
| </PackageReference> | ||
|
|
||
| <!-- Find any PackageReferences added by this SDK, and provide Version when not using any Centralized --> | ||
| <PackageReference | ||
| Update="@(PackageReference->WithMetadataValue('SystemWebSdkIncludedPackage','true')->HasMetadata('SystemWebSdkIncludedPackageVersion'))" | ||
| Condition=" '$(ApplySDKDefaultPackageVersions)' == 'true' "> | ||
| <Version Condition="'%(Version)' == '' ">%(SystemWebSdkIncludedPackageVersion)</Version> | ||
| </PackageReference> | ||
|
|
||
|
|
||
|
|
||
|
|
||
| <!-- Collect those items that this SDK has had to set so we can share some warnings later --> | ||
| <SystemWebSdkProvidedPackageVersionDefault | ||
| Include="@(PackageReference->HasMetadata('SystemWebSdkProvidedDefaultVersion')->WithMetadataValue('SystemWebSdkProvidedDefaultVersion','true'))" | ||
| Condition=" '$(ApplySDKDefaultPackageVersions)' == 'CPV' " | ||
| > | ||
| <Suggestion><PackageReference Update="%(Identity)" Version="%(Version)" /></Suggestion> | ||
| </SystemWebSdkProvidedPackageVersionDefault> | ||
| <SystemWebSdkProvidedPackageVersionDefault | ||
| Include="@(PackageVersion->HasMetadata('SystemWebSdkProvidedDefaultVersion')->WithMetadataValue('SystemWebSdkProvidedDefaultVersion','true'))" | ||
| Condition=" '$(ApplySDKDefaultPackageVersions)' == 'CPM' " > | ||
| <Suggestion><PackageVersion Include="%(Identity)" Version="%(Version)" /></Suggestion> | ||
| </SystemWebSdkProvidedPackageVersionDefault> | ||
|
|
||
| </ItemGroup> | ||
|
|
||
|
|
||
|
|
||
|
|
||
| <!-- | ||
| ************************************************************************************************************************* | ||
| Target SystemWebSdkProvidedPackageVersionDefaultWarning | ||
| * Emit Warnings (not errors) whenever | ||
| - a system of central management for package versions is detected | ||
| - AND | ||
| - an SDK applied default version for the Package Reference was provided | ||
| ************************************************************************************************************************* | ||
| --> | ||
| <PropertyGroup> | ||
| <SystemWebSdkProvidedPackageVersionDefaultWarningBeforeTargets> | ||
| $(SystemWebSdkProvidedPackageVersionDefaultWarningBeforeTargets); | ||
| ResolvePackageAssets | ||
| </SystemWebSdkProvidedPackageVersionDefaultWarningBeforeTargets> | ||
|
|
||
| <SystemWebSdkProvidedPackageVersionDefaultWarningBeforeTargets Condition=" '$(ApplySDKDefaultPackageVersions)' == 'CPV' "> | ||
| $(SystemWebSdkProvidedPackageVersionDefaultWarningBeforeTargets); | ||
| CheckPackageReferences | ||
| </SystemWebSdkProvidedPackageVersionDefaultWarningBeforeTargets> | ||
| </PropertyGroup> | ||
|
|
||
| <Target Name="SystemWebSdkProvidedPackageVersionDefaultWarning" BeforeTargets="$(SystemWebSdkProvidedPackageVersionDefaultWarningBeforeTargets)" | ||
| Condition=" '$(ExcludeSDKDefaultPackages)'=='false' AND '$(ApplySDKDefaultPackageVersions)' != 'false' AND @(SystemWebSdkProvidedPackageVersionDefault->Count()) != 0 "> | ||
| <PropertyGroup> | ||
| <SystemWebSdkProvidedPackageVersionDefault_LinkedFile Condition=" '$(ApplySDKDefaultPackageVersions)' == 'CPM' AND '$(ImportDirectoryPackagesProps)' == 'true' and '$(DirectoryPackagesPropsPath)' != '' and Exists('$(DirectoryPackagesPropsPath)') ">$(DirectoryPackagesPropsPath)</SystemWebSdkProvidedPackageVersionDefault_LinkedFile> | ||
| <SystemWebSdkProvidedPackageVersionDefault_LinkedFile Condition=" '$(ApplySDKDefaultPackageVersions)' == 'CPV' AND '$(CentralPackagesFile)' != '' and Exists('$(CentralPackagesFile)') ">$(CentralPackagesFile)</SystemWebSdkProvidedPackageVersionDefault_LinkedFile> | ||
| <SystemWebSdkProvidedPackageVersionDefault_LinkedFile Condition=" '$(SystemWebSdkProvidedPackageVersionDefault_LinkedFile)' == '' ">$(MSBuildProjectFullPath)</SystemWebSdkProvidedPackageVersionDefault_LinkedFile> | ||
| </PropertyGroup> | ||
| <Warning | ||
| Text="The PackageReference '%(SystemWebSdkProvidedPackageVersionDefault.Identity)' was included by the SystemWeb Sdk defaulting to Version='%(SystemWebSdkProvidedPackageVersionDefault.Version)'. Centralized management of package versions was detected, consider adding this entry '%(SystemWebSdkProvidedPackageVersionDefault.Suggestion)' to your centralized package version listing." | ||
| File="$(SystemWebSdkProvidedPackageVersionDefault_LinkedFile)" | ||
| /> | ||
| </Target> | ||
|
|
||
|
|
||
|
|
||
|
|
||
| </Project> | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,26 +1,37 @@ | ||
| <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
| <!-- If we are using a central package management system such as Microsoft.Build.CentralPackageVersions do not include package versions --> | ||
| <PropertyGroup> | ||
| <!-- Requires Microsoft.Build.CentralPackageVersions Version 2.1.1 or higher | ||
| See https://github.com/microsoft/MSBuildSdks/tree/main/src/CentralPackageVersions --> | ||
| <ApplySDKDefaultPackageVersions Condition="'$(UsingMicrosoftCentralPackageVersionsSdk)'=='true'">false</ApplySDKDefaultPackageVersions> | ||
| <!-- Turn of if using Nuget 6.2.0+ CPM | ||
| See https://learn.microsoft.com/en-us/nuget/consume-packages/Central-Package-Management | ||
| Addresses #49 --> | ||
| <ApplySDKDefaultPackageVersions Condition="'$(ManagePackageVersionsCentrally)'=='true'">false</ApplySDKDefaultPackageVersions> | ||
| <ApplySDKDefaultPackageVersions Condition="'$(ApplySDKDefaultPackageVersions)'==''">true</ApplySDKDefaultPackageVersions> | ||
| </PropertyGroup> | ||
| <!-- | ||
| ************************************************************************************************************************* | ||
| MSBuild.SDK.SystemWeb.CommonFiles.DefaultPackages.targets | ||
| Ensure that the desirable PackageReference items are present if configured to do so | ||
| * Do this After the "ProjectFile" so we can detect if the project has already explicitly included these packages | ||
| * Do this Before the "Directory.Build.targets" so CentralPackageVersions can act on these packages | ||
| * Which means before the entire import chain | ||
| Microsoft.NET.Sdk/Sdk/Sdk.props | ||
| -> Microsoft.CSharp.targets | ||
| -> Microsoft.CSharp.CurrentVersion.targets | ||
| -> Microsoft.Common.targets | ||
| -> Directory.Build.targets | ||
| ************************************************************************************************************************* | ||
| --> | ||
| <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
|
|
||
| <!-- Include compilers unless ExcludeSDKDefaultPackages property is set --> | ||
| <ItemGroup Condition="'$(ExcludeSDKDefaultPackages)'=='false'"> | ||
| <PackageReference Include="Microsoft.Net.Compilers.Toolset" PrivateAssets="All" GeneratePathProperty="true"/> | ||
| <PackageReference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" /> | ||
| </ItemGroup> | ||
| <ItemGroup Condition=" '$(ExcludeSDKDefaultPackages)'=='false' "> | ||
| <PackageReference Include="Microsoft.Net.Compilers.Toolset" | ||
| Condition="'$(MicrosoftNetCompilersToolset_Version)'!=''" | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think these shouldn't have the condition of the version on them, as they may not have versions set if using CPM/CPV. Would it be better to create a new item group, e.g. <PackageReference Include="@(SDKDefaultPackageReference)"
Exclude="@(PackageReference)"
Condition="'$(ExcludeSDKDefaultPackages)'=='false'">
<Version /><!-- Make sure we don't apply version's here -->
<SystemWebSdkIncludedPackage>true</SystemWebSdkIncludedPackage>
<SystemWebSdkIncludedPackageVersion>%(Version)</SystemWebSdkIncludedPackageVersion>
</PackageReference>or is that adding complexity that it doesn't need? (Would need to import common at the end of razor/sdk defaultpackages instead of the start.) I just think that having simple to manage lines for the default package refs (and any custom properties such as <ItemGroup>
<SDKDefaultPackageReference Include="Microsoft.Net.Compilers.Toolset"
Version="$(MicrosoftNetCompilersToolset_Version)"
PrivateAssets="All"
GeneratePathProperty="true" />
<SDKDefaultPackageReference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
Version="$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)" />
</ItemGroup>
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Conditional check on named version propertyThat Conditional on the version property is a holdover from back before your recent updates. Previously it looked like this <ItemGroup Condition="'$(ExcludeASPNetCompilers)'=='false' AND '$(UsingMicrosoftCentralPackageVersionsSdk)'!='true'">
<PackageReference Include="Microsoft.Net.Compilers.Toolset" Version="$(MicrosoftNetCompilersToolset_Version)" PrivateAssets="All" Condition="'$(MicrosoftNetCompilersToolset_Version)'!=''"/>
<PackageReference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" Version="$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)" Condition="'$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)'!=''" />
</ItemGroup>I had assumed that it was an intentional way of allowing project owners to exclude an individual package (clear out property for single named package), so I had included that old conditional in this rendition. But we can probably go with Separate ItemGroupI had thought about having some itemgroup that is the list of packages we will work on, but we already have named properties for each package and that is a fairly straight forward way for project owners to tweak if they want to. In general, I think whatever these end up being, they still needs to be "incorporated" in 2 phases though
I'll think on it some more |
||
| Exclude="@(PackageReference)" > | ||
| <SystemWebSdkIncludedPackage>true</SystemWebSdkIncludedPackage> | ||
| <SystemWebSdkIncludedPackageVersion>$(MicrosoftNetCompilersToolset_Version)</SystemWebSdkIncludedPackageVersion> | ||
| <PrivateAssets>All</PrivateAssets> | ||
| <GeneratePathProperty>true</GeneratePathProperty> | ||
| </PackageReference> | ||
|
|
||
| <PackageReference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" | ||
| Condition="'$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)'!=''" | ||
| Exclude="@(PackageReference)" > | ||
| <SystemWebSdkIncludedPackage>true</SystemWebSdkIncludedPackage> | ||
| <SystemWebSdkIncludedPackageVersion>$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)</SystemWebSdkIncludedPackageVersion> | ||
| </PackageReference> | ||
|
|
||
| <!-- Set package versions if ApplySDKDefaultPackageVersions is true --> | ||
| <ItemGroup Condition="'$(ExcludeSDKDefaultPackages)'=='false' AND '$(ApplySDKDefaultPackageVersions)'=='true'"> | ||
| <PackageReference Update="Microsoft.Net.Compilers.Toolset" Version="$(MicrosoftNetCompilersToolset_Version)" Condition="'$(MicrosoftNetCompilersToolset_Version)'!=''"/> | ||
| <PackageReference Update="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" Version="$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)" Condition="'$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)'!=''" /> | ||
| </ItemGroup> | ||
|
|
||
| </Project> | ||
Uh oh!
There was an error while loading. Please reload this page.