dotnet/roslyn

Incorrect behavior when using alias refers to namespace in using alias

Open

#1,027 建立於 2015年3月4日

在 GitHub 查看
 (17 留言) (1 反應) (0 負責人)C# (4,257 fork)batch import
Area-CompilersBughelp wanted

倉庫指標

Star
 (20,414 star)
PR 合併指標
 (平均合併 6天 17小時) (30 天內合併 256 個 PR)

描述

extern alias Contracts1;
extern alias Contracts2;

using alias1 = Contracts1::TestContractAssembly;
using alias2 = Contracts2::TestContractAssembly;

partial class Contract : alias1.IContract, alias2.IContract
{
    int alias1.IContract.x
    {
        get
        {
            return 1;
        }
    }
    int alias2.IContract.x
    {
        get
        {
            return 1;
        }
    }
}

Both IContract types are the same - they expose an int property "x". Roslyn incorrectly reports that IContract.x has already been implemented.

This works if you inline the using aliases.

I strongly suspect that the alias points to the merged namespace symbol, rather than to the namespace symbol contained in the assembly symbol referenced by the extern alias.

貢獻者指南