fsprojects / Paket

A dependency manager for .NET with support for NuGet packages and Git repositories.
https://fsprojects.github.io/Paket/
MIT License
2.02k stars 520 forks source link

multiple paket groups generate wrong dependencies at design time (inside VS) #3334

Closed enricosada closed 6 years ago

enricosada commented 6 years ago

Description

If a project use multiple paket group for dependencies, the project build incorrectly in VS because load the wrong nuget dependencies. it will build correctly from command line.

Repro steps

A project (.net sdk) who have dependencies from multiple paket group inside the paket.references, and multiple target framework (let's say net461 and netstandard2.0)

Expected behavior

Each target framework (inside VS) will build with the correct dependencies of that target framework

Actual behavior

All dependencies are added together, for all framework (not seperated by framework). The restore target (inside .NET SdK) will just do a package resolution, so may use wrong packges version and add not expected packages. Some warning will be like:

warning NU1701: Package 'EventStore.Client 4.1.1-rc1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.1'. This package may not be fully compatible with your project.

or

warning MSB3277: Found conflicts between different versions of "FSharp.Core" that could not be resolved.

Affected version

from v5.174

Known workarounds

Revert to paket version 5.173.4 Be sure to have aligned the .paket\Paket.Restore.targets and remove the obj dir

additional info

The issue is that all dependencies are specified in Marvel.Projection.fsproj.paket.props (loaded only at design time)

    <ItemGroup Condition="($(DesignTimeBuild) == true) AND (('$(TargetFramework)' == 'monoandroid') OR ('$(TargetFramework)' == 'monoandroid2.2') OR ('$(TargetFramework)' == 'monoandroid22') OR ('$(TargetFramework)' == 'monoandroid2.3') OR ('$(TargetFramework)' == 'monoandroid23') OR ('$(TargetFramework)' == 'monoandroid4.0.3') OR ('$(TargetFramework)' == 'monoandroid403') OR ('$(TargetFramework)' == 'monoandroid4.1') OR ('$(TargetFramework)' == 'monoandroid41') OR ('$(TargetFramework)' == 'monoandroid4.2') OR ('$(TargetFramework)' == 'monoandroid42') OR ('$(TargetFramework)' == 'monoandroid4.3') OR ('$(TargetFramework)' == 'monoandroid43') OR ('$(TargetFramework)' == 'monoandroid4.4') OR ('$(TargetFramework)' == 'monoandroid44') OR ('$(TargetFramework)' == 'monoandroid5.0') OR ('$(TargetFramework)' == 'monoandroid50') OR ('$(TargetFramework)' == 'monoandroid5.1') OR ('$(TargetFramework)' == 'monoandroid51') OR ('$(TargetFramework)' == 'monoandroid6.0') OR ('$(TargetFramework)' == 'monoandroid60') OR ('$(TargetFramework)' == 'monoandroid7.0') OR ('$(TargetFramework)' == 'monoandroid70') OR ('$(TargetFramework)' == 'monoandroid7.1') OR ('$(TargetFramework)' == 'monoandroid71') OR ('$(TargetFramework)' == 'monoandroid8.0') OR ('$(TargetFramework)' == 'monoandroid80') OR ('$(TargetFramework)' == 'monoandroid8.1') OR ('$(TargetFramework)' == 'monoandroid81') OR ('$(TargetFramework)' == 'monotouch') OR ('$(TargetFramework)' == 'native') OR ('$(TargetFramework)' == 'native(,arm)') OR ('$(TargetFramework)' == 'native(,Win32)') OR ('$(TargetFramework)' == 'native(,x64)') OR ('$(TargetFramework)' == 'native(Debug,arm)') OR ('$(TargetFramework)' == 'native(Debug,Win32)') OR ('$(TargetFramework)' == 'native(Debug,x64)') OR ('$(TargetFramework)' == 'native(Release,arm)') OR ('$(TargetFramework)' == 'native(Release,Win32)') OR ('$(TargetFramework)' == 'native(Release,x64)') OR ('$(TargetFramework)' == 'net10') OR ('$(TargetFramework)' == 'net11') OR ('$(TargetFramework)' == 'net20') OR ('$(TargetFramework)' == 'net30') OR ('$(TargetFramework)' == 'net35') OR ('$(TargetFramework)' == 'net35-Unity Full v3.5') OR ('$(TargetFramework)' == 'net35-Unity Full v35') OR ('$(TargetFramework)' == 'net35-Unity Micro v3.5') OR ('$(TargetFramework)' == 'net35-Unity Micro v35') OR ('$(TargetFramework)' == 'net35-Unity Subset v3.5') OR ('$(TargetFramework)' == 'net35-Unity Subset v35') OR ('$(TargetFramework)' == 'net35-Unity Web v3.5') OR ('$(TargetFramework)' == 'net35-Unity Web v35') OR ('$(TargetFramework)' == 'net40') OR ('$(TargetFramework)' == 'net403') OR ('$(TargetFramework)' == 'net45') OR ('$(TargetFramework)' == 'net451') OR ('$(TargetFramework)' == 'net452') OR ('$(TargetFramework)' == 'net453') OR ('$(TargetFramework)' == 'net46') OR ('$(TargetFramework)' == 'net461') OR ('$(TargetFramework)' == 'net462') OR ('$(TargetFramework)' == 'net463') OR ('$(TargetFramework)' == 'net47') OR ('$(TargetFramework)' == 'net471') OR ('$(TargetFramework)' == 'net472') OR ('$(TargetFramework)' == 'netcoreapp1.0') OR ('$(TargetFramework)' == 'netcoreapp10') OR ('$(TargetFramework)' == 'netcoreapp1.1') OR ('$(TargetFramework)' == 'netcoreapp11') OR ('$(TargetFramework)' == 'netcoreapp2.0') OR ('$(TargetFramework)' == 'netcoreapp20') OR ('$(TargetFramework)' == 'netcoreapp2.1') OR ('$(TargetFramework)' == 'netcoreapp21') OR ('$(TargetFramework)' == 'netstandard1.0') OR ('$(TargetFramework)' == 'netstandard10') OR ('$(TargetFramework)' == 'netstandard1.1') OR ('$(TargetFramework)' == 'netstandard11') OR ('$(TargetFramework)' == 'netstandard1.2') OR ('$(TargetFramework)' == 'netstandard12') OR ('$(TargetFramework)' == 'netstandard1.3') OR ('$(TargetFramework)' == 'netstandard13') OR ('$(TargetFramework)' == 'netstandard1.4') OR ('$(TargetFramework)' == 'netstandard14') OR ('$(TargetFramework)' == 'netstandard1.5') OR ('$(TargetFramework)' == 'netstandard15') OR ('$(TargetFramework)' == 'netstandard1.6') OR ('$(TargetFramework)' == 'netstandard16') OR ('$(TargetFramework)' == 'netstandard2.0') OR ('$(TargetFramework)' == 'netstandard20') OR ('$(TargetFramework)' == 'portable-net40+sl4') OR ('$(TargetFramework)' == 'portable-net40+sl4+win8+wp7') OR ('$(TargetFramework)' == 'portable-net40+sl4+win8+wp75') OR ('$(TargetFramework)' == 'portable-net40+sl4+win8+wp8') OR ('$(TargetFramework)' == 'portable-net40+sl5') OR ('$(TargetFramework)' == 'portable-net40+sl5+win8') OR ('$(TargetFramework)' == 'portable-net40+sl5+win8+wp8') OR ('$(TargetFramework)' == 'portable-net40+sl5+win8+wp8+wpa81') OR ('$(TargetFramework)' == 'portable-net40+sl5+win8+wpa81') OR ('$(TargetFramework)' == 'portable-net40+win8') OR ('$(TargetFramework)' == 'portable-net40+win8+wpa81') OR ('$(TargetFramework)' == 'portable-net403+sl4') OR ('$(TargetFramework)' == 'portable-net403+sl4+win8') OR ('$(TargetFramework)' == 'portable-net403+sl4+win8+wp7') OR ('$(TargetFramework)' == 'portable-net403+sl4+win8+wp75') OR ('$(TargetFramework)' == 'portable-net403+sl4+win8+wp8') OR ('$(TargetFramework)' == 'portable-net403+sl5') OR ('$(TargetFramework)' == 'portable-net403+sl5+win8') OR ('$(TargetFramework)' == 'portable-net403+sl5+win8+wp8') OR ('$(TargetFramework)' == 'portable-net403+sl5+win8+wp8+wpa81') OR ('$(TargetFramework)' == 'portable-net403+sl5+win8+wpa81') OR ('$(TargetFramework)' == 'portable-net403+win8') OR ('$(TargetFramework)' == 'portable-net403+win8+wpa81') OR ('$(TargetFramework)' == 'portable-net45+sl4') OR ('$(TargetFramework)' == 'portable-net45+sl4+win8') OR ('$(TargetFramework)' == 'portable-net45+sl4+win8+wp7') OR ('$(TargetFramework)' == 'portable-net45+sl4+win8+wp75') OR ('$(TargetFramework)' == 'portable-net45+sl4+win8+wp8') OR ('$(TargetFramework)' == 'portable-net45+sl5') OR ('$(TargetFramework)' == 'portable-net45+sl5+win8') OR ('$(TargetFramework)' == 'portable-net45+sl5+win8+wp8') OR ('$(TargetFramework)' == 'portable-net45+sl5+win8+wp8+wpa81') OR ('$(TargetFramework)' == 'portable-net45+sl5+win8+wpa81') OR ('$(TargetFramework)' == 'portable-net45+win8') OR ('$(TargetFramework)' == 'portable-net45+win8+wp8') OR ('$(TargetFramework)' == 'portable-net45+win8+wp8+wpa81') OR ('$(TargetFramework)' == 'portable-net45+win8+wpa81') OR ('$(TargetFramework)' == 'portable-net45+wp8') OR ('$(TargetFramework)' == 'portable-net451+win81') OR ('$(TargetFramework)' == 'portable-net451+win81+wpa81') OR ('$(TargetFramework)' == 'portable-win81+wp81') OR ('$(TargetFramework)' == 'portable-win81+wp81+wpa81') OR ('$(TargetFramework)' == 'portable-win81+wpa81') OR ('$(TargetFramework)' == 'portable-wp81+wpa81') OR ('$(TargetFramework)' == 'sl3') OR ('$(TargetFramework)' == 'sl4') OR ('$(TargetFramework)' == 'sl5') OR ('$(TargetFramework)' == 'uap10.0') OR ('$(TargetFramework)' == 'uap100') OR ('$(TargetFramework)' == 'uap10.0.15138') OR ('$(TargetFramework)' == 'uap10015138') OR ('$(TargetFramework)' == 'uap10.0.16299') OR ('$(TargetFramework)' == 'uap10016299') OR ('$(TargetFramework)' == 'uap10.0.16300') OR ('$(TargetFramework)' == 'uap10016300') OR ('$(TargetFramework)' == 'uap10.1') OR ('$(TargetFramework)' == 'uap101') OR ('$(TargetFramework)' == 'win10') OR ('$(TargetFramework)' == 'win8') OR ('$(TargetFramework)' == 'win81') OR ('$(TargetFramework)' == 'wp7') OR ('$(TargetFramework)' == 'wp71') OR ('$(TargetFramework)' == 'wp75') OR ('$(TargetFramework)' == 'wp8') OR ('$(TargetFramework)' == 'wp81') OR ('$(TargetFramework)' == 'wpa81') OR ('$(TargetFramework)' == 'xamarinios') OR ('$(TargetFramework)' == 'xamarinmac') OR ('$(TargetFramework)' == 'xamarintvos') OR ('$(TargetFramework)' == 'xamarinwatchos'))">
        <PackageReference Include="EventStore.Client">
            <Version>4.1.1-rc1</Version>
        </PackageReference>
        <PackageReference Include="FSharp.Core">
            <Version>3.1.2.5</Version>
        </PackageReference>
        <PackageReference Include="FSharp.Control.AsyncSeq">
            <Version>2.0.21</Version>
        </PackageReference>
        <PackageReference Include="FSharp.Core">
            <Version>4.3.4</Version>
        </PackageReference>

instead of

    <ItemGroup Condition="($(DesignTimeBuild) == true) AND ('$(TargetFramework)' == 'net461')">
        <PackageReference Include="EventStore.Client">
            <Version>4.1.1-rc1</Version>
        </PackageReference>
        <PackageReference Include="FSharp.Core">
            <Version>3.1.2.5</Version>
        </PackageReference>
        <PackageReference Include="FSharp.Control.AsyncSeq">
            <Version>2.0.21</Version>
        </PackageReference>
    </ItemGroup>
    <ItemGroup Condition="($(DesignTimeBuild) == true) AND ('$(TargetFramework)' == 'netstandard2.0')">
        <PackageReference Include="FSharp.Core">
            <Version>4.3.4</Version>
        </PackageReference>
enricosada commented 6 years ago

I'll send a PR, working on it