I am a contributor to a GitHub project, and recently we had some trouble with our .NET Standard 2.0 project installing correctly into a .NET Framework 4.5 project. The cause of this is that (if I am understanding correctly) .NET Standard 2.0 supports a minimum .NET Framework of 4.6.1.
OK, fair enough. So we updated the .csproj to create another framework output:
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
In our testing project, the supported frameworks are defined as such:
<TargetFrameworks>netcoreapp2.0;net471;net45</TargetFrameworks>
However, we are running into a problem with the net471
build as it seems to be picking up the net45
framework and not the netstandard2.0
. In order to get this working, we are having to set the TargetFrameworks
of the class library as such:
<TargetFrameworks>netstandard2.0;net471;net45</TargetFrameworks>
This seems excessive as it would seem that .netstandard2.0
should be the TargetFramework
that net471
picks up, rather than the net45
target.
Is there a way to force a project reference to a particular TargetFramework
? I did try the following in our testing project, but it did not seem work:
<ItemGroup Condition="'$(TargetFramework)' != 'net471'">
<ProjectReference Include="..\..\src\ExtendedXmlSerializer\ExtendedXmlSerializer.csproj" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net471'">
<ProjectReference Include="..\..\src\ExtendedXmlSerializer\ExtendedXmlSerializer.csproj">
<TargetFramework>netstandard2.0</TargetFramework>
</ProjectReference>
</ItemGroup>
Thank you in advance for any assistance you can provide!
Update 2020: The answer suggesting to use SetTargetFramework
is a better fit, also to not conflict with other settings.
You can change your project reference like this:
<ProjectReference Include="..\..\src\ExtendedXmlSerializer\ExtendedXmlSerializer.csproj"
AdditionalProperties="TargetFramework=netstandard2.0" />
to force the selection of a specific target framework over the default "get nearest TFM" logic.
It does not work. VS 2017 15.5.5. Reference from 4.6.2 MSTest project net462 target of multitarget (net462;netstandard2.0) class library. – SerG Feb 13 at 13:34
It is true, the new way to solve that is this:
<ProjectReference Include="..\multitargeted_lib\multitargeted_lib.csproj">
<SetTargetFramework>TargetFramework=netstandard2.0</SetTargetFramework>
</ProjectReference>
Source is here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With