MSBuild.SDK.SystemWeb
MSBuild.SDK.SystemWeb copied to clipboard
Update Microsoft.CodeDom.Providers.DotNetCompilerPlatform - closes #59
The default version of Microsoft.CodeDom.Providers.DotNetCompilerPlatform
now depends on your target framework version, and will automatically move to 3.11.0 or 4.1.0 if possible, and fallback to the previous value of 3.6.0 otherwise.
Closes #59, although this may need reworked when a better way to handle default versions is included based on #54 and #56.
@CZEMacLeod If you are running into problems with this idea.... it might be because that in non-crosstargeted projects, the TargetFrameworkVersion
property is calculated/set only at the following import chain
Microsoft.NET.Sdk\Sdk.targets -> Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.BeforeCommon.targets -> Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets
Using these TargetFrameworkVersion
values in the "Property Phase" to calculate other Properties when done "After" the Microsoft.NET.Sdk\Sdk.targets is imported. (maybe locate it within the Sdk.targets) could work with something like:
<!-- When doing greater than/less than comparisons between strings, MSBuild will try to parse the strings as Version objects and compare them as
such if the parse succeeds. -->
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup Condition="'$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)'=='' AND '$(TargetFrameworkIdentifier)' == '.NETFramework'">
<MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '4.7.2'" >4.1.0</MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version><!-- net 4.7.2+ -->
<MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '4.6.2' AND '$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)' == '' " >3.11.0</MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version><!-- net 4.6.2, 4.7.2+ -->
<MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version Condition=" '$(_TargetFrameworkVersionWithoutV)' >= '4.5' AND '$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)' == '' " >3.6.0</MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version><!-- net 4.5 / 4.6 / 4.7.2+ -->
</PropertyGroup>
Or potentially use the TargetFrameworkVersion
values directly in the "Item Phase" at which time all properties have been calculated/set, potentially like:
<!-- When doing greater than/less than comparisons between strings, MSBuild will try to parse the strings as Version objects and compare them as
such if the parse succeeds. -->
<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)'!=''" />
<PackageReference Update="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" Version="3.6.0" Condition="'$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)'=='' AND '$(_TargetFrameworkVersionWithoutV)' >= '4.5'" />
<PackageReference Update="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" Version="3.11.0" Condition="'$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)'=='' AND '$(_TargetFrameworkVersionWithoutV)' >= '4.6.2'" />
<PackageReference Update="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" Version="4.1.0" Condition="'$(MicrosoftCodeDomProvidersDotNetCompilerPlatform_Version)'=='' AND '$(_TargetFrameworkVersionWithoutV)' >= '4.7.2'" />
</ItemGroup>