theraot / Theraot

Backporting .NET and more: LINQ expressions in .net 2.0 - nuget Theraot.Core available.
MIT License
159 stars 30 forks source link

Theraot.Core conflicts with Microsoft.Bcl.AsyncInterfaces package #196

Open ig-sinicyn opened 1 year ago

ig-sinicyn commented 1 year ago

If the project references both Theraot.Core and Microsoft.Bcl.AsyncInterfaces packages there's Error CS0433 The type 'IAsyncEnumerable<T>' exists in both assemblies error when using the IAsyncEnumerable<T> type

NB1: the reference may be transitive. As example, SomeProject -> System.Text.Json -> Microsoft.Bcl.AsyncInterfaces.

NB2: the issue may be workarounded with aliases for unneeded assembly,

    <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="7.0.0" >
        <Aliases>AsyncInterfaces</Aliases>
    </PackageReference>

But it may be a good idea to use the Microsoft.Bcl.AsyncInterfaces in Theraot.Core, as it is done with Microsoft.Bcl.HashCode package

UPD: I've just discovered the IAsyncEnumerable<T> is not available when targeting net48. I'm not sure if I should report it as a separate issue as it'll be fixed automatically after referencing the Microsoft.Bcl.AsyncInterfaces. Extracted to #197

Repro: Program.cs:

internal class Program
{
    public static void Main(string[] args)
    {
        IAsyncEnumerable<int> a = null;
    }
}

ConsoleApp.csproj:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net461</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="System.Text.Json" Version="7.0.3" />
        <PackageReference Include="Theraot.Core" Version="3.2.11" />
    </ItemGroup>
</Project>
NN--- commented 1 year ago

I think we should have a separate issue for IAsyncEnumerable.

ig-sinicyn commented 1 year ago

Will do:)