Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
65714f88
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
65714f88
编写于
6月 22, 2018
作者:
C
Charles Stoner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Misc.
上级
969249c9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
64 addition
and
0 deletion
+64
-0
src/Compilers/CSharp/Test/Symbol/Symbols/Metadata/PE/TypeForwarders.cs
.../CSharp/Test/Symbol/Symbols/Metadata/PE/TypeForwarders.cs
+64
-0
未找到文件。
src/Compilers/CSharp/Test/Symbol/Symbols/Metadata/PE/TypeForwarders.cs
浏览文件 @
65714f88
...
...
@@ -1742,5 +1742,69 @@ public class Forwarded<T>
}
}
}
/// <summary>
/// Aliases to forwarded types are not supported currently.
/// </summary>
[
WorkItem
(
27375
,
"https://github.com/dotnet/roslyn/issues/27375"
)]
[
Fact
]
public
void
AliasToTypeForwarder
()
{
// Library v1: no forwarding.
const
string
sourceA1
=
@"[assembly: System.Reflection.AssemblyVersion(""1.0.0.0"")]
namespace MyNamespace
{
public class MyClass { }
}"
;
var
compA1
=
CreateCompilation
(
sourceA1
,
assemblyName
:
"A"
);
var
refA1
=
compA1
.
EmitToImageReference
(
aliases
:
ImmutableArray
.
Create
(
"A"
));
const
string
sourceB1
=
sourceA1
;
var
compB1
=
CreateCompilation
(
sourceB1
,
assemblyName
:
"B"
);
var
refB1
=
compB1
.
EmitToImageReference
(
aliases
:
ImmutableArray
.
Create
(
"B"
));
const
string
sourceProgram
=
@"extern alias A;
extern alias B;
class Program
{
static void Main()
{
var a = new A::MyNamespace.MyClass();
var b = new B::MyNamespace.MyClass();
}
}"
;
var
comp
=
CreateCompilation
(
sourceProgram
,
references
:
new
[]
{
refA1
,
refB1
});
comp
.
VerifyDiagnostics
();
// Library v2: forwarding to implementation assembly.
const
string
sourceBImpl
=
@"namespace MyNamespace
{
public class MyClass { }
}"
;
var
compBImpl
=
CreateCompilation
(
sourceBImpl
,
assemblyName
:
"BImpl"
);
var
refBImpl
=
compBImpl
.
EmitToImageReference
();
const
string
sourceB2
=
@"[assembly: System.Reflection.AssemblyVersion(""2.0.0.0"")]
[assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(MyNamespace.MyClass))]"
;
var
compB2
=
CreateCompilation
(
sourceB2
,
references
:
new
[]
{
refBImpl
},
assemblyName
:
"B"
);
// Alias to PE assembly.
comp
=
CreateCompilation
(
sourceProgram
,
references
:
new
[]
{
refA1
,
compB2
.
EmitToImageReference
(
aliases
:
ImmutableArray
.
Create
(
"B"
)),
refBImpl
});
comp
.
VerifyDiagnostics
(
// (8,36): error CS1069: The type name 'MyClass' could not be found in the namespace 'MyNamespace'. This type has been forwarded to assembly 'BImpl, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' Consider adding a reference to that assembly.
// var b = new B::MyNamespace.MyClass();
Diagnostic
(
ErrorCode
.
ERR_DottedTypeNameNotFoundInNSFwd
,
"MyClass"
).
WithArguments
(
"MyClass"
,
"MyNamespace"
,
"BImpl, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
).
WithLocation
(
8
,
36
));
// Alias to source assembly.
comp
=
CreateCompilation
(
sourceProgram
,
references
:
new
[]
{
refA1
,
new
CSharpCompilationReference
(
compB2
,
aliases
:
ImmutableArray
.
Create
(
"B"
)),
refBImpl
});
comp
.
VerifyDiagnostics
(
// (8,24): error CS0234: The type or namespace name 'MyNamespace' does not exist in the namespace 'B' (are you missing an assembly reference?)
// var b = new B::MyNamespace.MyClass();
Diagnostic
(
ErrorCode
.
ERR_DottedTypeNameNotFoundInNS
,
"MyNamespace"
).
WithArguments
(
"MyNamespace"
,
"B"
).
WithLocation
(
8
,
24
));
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录