Skip to content
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

Get ambiguous type identity error when using package 'Microsoft.CodeAnalysis.CSharp/2.0.0' in a project that targets 'netcoreapp2.0' #20861

Closed
daxian-dbw opened this issue Apr 2, 2017 · 9 comments
Labels
area-Infrastructure-libraries question Answer questions and provide assistance, not an issue with source code or documentation.
Milestone

Comments

@daxian-dbw
Copy link
Contributor

I ran into this when using the package Microsoft.CodeAnalysis.CSharp/2.0.0 (2.0.0 is the latest version I can find) in my project targeting netcoreapp2.0. Microsoft.CodeAnalysis.CSharp/2.0.0 depends on Microsoft.CodeAnalysis.Common/2.0.0 which pulls in System.ValueTuple/4.3.0. However, the types in System.ValueTuple.dll are already exposed from System.Runtime.dll when targeting netcoreapp2.0, and thus using any of those types results in ambiguous type identity error:

Program.cs(9,45): error CS0433: The type 'TupleExtensions' exists in both 'System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' and 'System.Runtime, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' [D:\apps\netcore2\test\test.csproj]

Here is a simple repro:

using System;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(typeof(System.TupleExtensions).FullName);
        }
    }
}

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="2.0.0" />
  </ItemGroup>

</Project>

It looks netcoreapp2.0 doesn't come with Microsoft.CodeAnalysis.CSharp.dll and Microsoft.CodeAnalysis.dll. How should I consume the Microsoft.CodeAnalysis.CSharp package then?

@karelz
Copy link
Member

karelz commented Apr 2, 2017

@weshaggard @ericeil @jcouv what is the story around ValueTuple? I know it was somewhat special, but don't remember details ...

cc @terrajobst

@jcouv
Copy link
Member

jcouv commented Apr 2, 2017

CoreFx was updated to type-forward to System.Runtime (PR dotnet/corefx#14786).
But this was done after the initial release of the ValueTuple package (4.3.0).
@ericstj is about to publish an updated package (for mono), which I suspect will also contain those type-forwards. I'll let him confirm if that's the case.

@weshaggard
Copy link
Member

This is because ValueTuple hasn't been added to the shared framework yet. I'm going to take care of this today.

@daxian-dbw you can workaround this issue by referencing the latest System.ValueTuple package from myget (https://dotnet.myget.org/feed/dotnet-core/package/nuget/System.ValueTuple/4.4.0-preview1-25203-01).

@daxian-dbw
Copy link
Contributor Author

@weshaggard it works fine after referencing to a recent version of System.ValueTuple package. Thanks!

This is because ValueTuple hasn't been added to the shared framework yet.

I guess once ValueTuple is added to the shared framework, I won't need to reference to System.ValueTuple/4.4.0-preview1-25203-01 in order to use Microsoft.CodeAnalysis.CSharp/2.0.0, is that correct?

@weshaggard
Copy link
Member

I guess once ValueTuple is added to the shared framework, I won't need to reference to System.ValueTuple/4.4.0-preview1-25203-01 in order to use Microsoft.CodeAnalysis.CSharp/2.0.0, is that correct?

That's correct.

@danmoseley
Copy link
Member

@daxian-dbw sounds like this is resolved, I"ll close , feel free to reopen

daxian-dbw referenced this issue in PowerShell/PowerShell Apr 17, 2017
This change moves powershell to .NET Core 2.0. Major changes are:
1. PowerShell assemblies are now targeting `netcoreapp2.0`. We are using `microsoft.netcore.app-2.0.0-preview1-001913-00`, which is from dotnet-core build 4/4/17. We cannot target `netstandard2.0` because the packages `System.Reflection.Emit` and `System.Reflection.Emit.Lightweight`, which are needed for powershell class, cannot be referenced when targeting `netstandard2.0`.
2. Refactor code to remove most CLR stub types and extension types.
3. Update build scripts to enable CI builds. The `-cache` section is specified to depend on `appveyor.yml`, so the cache will be invalidated if `appveyor.yml` is changed.
4. Ship `netcoreapp` reference assemblies with powershell to fix the issues in `Add-Type` (#2764). By default `Add-Type` will reference all those reference assemblies when compiling C# code. If `-ReferenceAssembly` is specified, then we search reference assemblies first, then the framework runtime assemblies, and lastly the loaded assemblies (possibly a third-party one that was already loaded).
5. `dotnet publish` generates executable on Unix platforms, but doesn't set "x" permission and thus it cannot execute. Currently, the "x" permission is set in the build script, `dotnet/cli` issue [#6286](https://github.com/dotnet/cli/issues/6286) is tracking this.
6. Replace the use of some APIs with the ones that take `SecureString`.
7. osx.10.12 is required to update to `netcoreapp2.0` because `dotnet-cli` 2.0.0-preview only works on osx.10.12.
8. Add dependency to `System.ValueTuple` to work around a ambiguous type identity issue in coreclr. The issue is tracked by `dotnet/corefx` [#17797](https://github.com/dotnet/corefx/issues/17797). When moving to newer version of `netcoreapp2.0`, we need to verify if this dependency is still needed.
@jcouv
Copy link
Member

jcouv commented May 12, 2017

@weshaggard I'm not very familiar with the concept of shared framework. I looked at your PRs from early April. I saw you did some netstandard changes (both in corefx and standard repos) for ValueTuple. Were those related to the shared framework?

@weshaggard
Copy link
Member

I did a lot of changes you will need to be more specific. I can tell you that ValueTuple has been added to the shared framework for .NET Core.

@jcouv
Copy link
Member

jcouv commented May 12, 2017

Cool. That addresses my question. Thanks! :-)

@msftgits msftgits transferred this issue from dotnet/corefx Jan 31, 2020
@msftgits msftgits added this to the 2.0.0 milestone Jan 31, 2020
@ghost ghost locked as resolved and limited conversation to collaborators Dec 24, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-Infrastructure-libraries question Answer questions and provide assistance, not an issue with source code or documentation.
Projects
None yet
Development

No branches or pull requests

6 participants