Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
54a80068
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,发现更多精彩内容 >>
提交
54a80068
编写于
8月 15, 2015
作者:
T
Tomáš Matoušek
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4579 from tmat/EncAssemblyDef
Do not emit AssemblyDef into EnC delta
上级
ec840848
b008aca8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
21 addition
and
23 deletion
+21
-23
src/Compilers/CSharp/Test/Emit/Emit/EditAndContinue/EditAndContinueTests.cs
...rp/Test/Emit/Emit/EditAndContinue/EditAndContinueTests.cs
+7
-15
src/Compilers/Core/Portable/PEWriter/MetadataWriter.cs
src/Compilers/Core/Portable/PEWriter/MetadataWriter.cs
+11
-5
src/Compilers/VisualBasic/Test/Emit/Emit/EditAndContinue/EditAndContinueTests.vb
...ic/Test/Emit/Emit/EditAndContinue/EditAndContinueTests.vb
+3
-3
未找到文件。
src/Compilers/CSharp/Test/Emit/Emit/EditAndContinue/EditAndContinueTests.cs
浏览文件 @
54a80068
...
...
@@ -7,6 +7,7 @@
using
System.Reflection
;
using
System.Reflection.Metadata
;
using
System.Reflection.Metadata.Ecma335
;
using
System.Threading
;
using
Microsoft.CodeAnalysis.CodeGen
;
using
Microsoft.CodeAnalysis.CSharp.Symbols
;
using
Microsoft.CodeAnalysis.CSharp.Test.Utilities
;
...
...
@@ -85,18 +86,9 @@ public void Delta_AssemblyDefTable()
generation0
,
ImmutableArray
.
Create
(
new
SemanticEdit
(
SemanticEditKind
.
Update
,
f0
,
f1
,
preserveLocalVariables
:
true
)));
var
reader1
=
diff1
.
GetMetadata
().
Reader
;
var
assemblyDef
=
reader1
.
GetAssemblyDefinition
();
Assert
.
False
(
assemblyDef
.
Name
.
IsNil
);
Assert
.
Equal
(
0
,
assemblyDef
.
Version
.
Major
);
Assert
.
Equal
(
0
,
assemblyDef
.
Version
.
Minor
);
Assert
.
Equal
(
0
,
assemblyDef
.
Version
.
Revision
);
Assert
.
Equal
(
0
,
assemblyDef
.
Version
.
Build
);
Assert
.
True
(
assemblyDef
.
PublicKey
.
IsNil
);
Assert
.
True
(
assemblyDef
.
Culture
.
IsNil
);
Assert
.
Equal
((
AssemblyFlags
)
0
,
assemblyDef
.
Flags
);
Assert
.
Equal
(
AssemblyHashAlgorithm
.
Sha1
,
assemblyDef
.
HashAlgorithm
);
// AssemblyDef record is not emitted to delta since changes in assembly identity are not allowed:
Assert
.
True
(
md0
.
MetadataReader
.
IsAssembly
);
Assert
.
False
(
diff1
.
GetMetadata
().
Reader
.
IsAssembly
);
}
[
Fact
]
...
...
@@ -3931,7 +3923,7 @@ .maxstack 1
"
);
// expect a single TypeRef for System.Object
var
md1
=
diff1
.
GetMetadata
();
AssertEx
.
Equal
(
new
[]
{
"[0x23000002] 0x000002
8b.0x00000298
"
},
DumpTypeRefs
(
md1
.
Reader
));
AssertEx
.
Equal
(
new
[]
{
"[0x23000002] 0x000002
66.0x00000273
"
},
DumpTypeRefs
(
md1
.
Reader
));
var
diff2
=
compilation2
.
EmitDifference
(
diff1
.
NextGeneration
,
...
...
@@ -3954,7 +3946,7 @@ .maxstack 1
"
);
// expect a single TypeRef for System.Object
var
md2
=
diff2
.
GetMetadata
();
AssertEx
.
Equal
(
new
[]
{
"[0x23000003] 0x000002
f9.0x00000306
"
},
DumpTypeRefs
(
md2
.
Reader
));
AssertEx
.
Equal
(
new
[]
{
"[0x23000003] 0x000002
af.0x000002bc
"
},
DumpTypeRefs
(
md2
.
Reader
));
}
[
Fact
]
...
...
@@ -4039,7 +4031,7 @@ .maxstack 1
"
);
// expect a single TypeRef for System.Object
var
md2
=
diff2
.
GetMetadata
();
AssertEx
.
Equal
(
new
[]
{
"[0x23000003] 0x00000
32c.0x00000339
"
},
DumpTypeRefs
(
md2
.
Reader
));
AssertEx
.
Equal
(
new
[]
{
"[0x23000003] 0x00000
2e2.0x000002ef
"
},
DumpTypeRefs
(
md2
.
Reader
));
}
private
static
IEnumerable
<
string
>
DumpTypeRefs
(
MetadataReader
reader
)
...
...
src/Compilers/Core/Portable/PEWriter/MetadataWriter.cs
浏览文件 @
54a80068
...
...
@@ -119,6 +119,12 @@ private bool IsMinimalDelta
get
{
return
!
IsFullMetadata
;
}
}
/// <summary>
/// NetModules and EnC deltas don't have AssemblyDef record.
/// We don't emit it for EnC deltas since assembly identity has to be preserved across generations (CLR/debugger get confused otherwise).
/// </summary>
private
bool
EmitAssemblyDefinition
=>
module
.
AsAssembly
!=
null
&&
!
IsMinimalDelta
;
/// <summary>
/// Returns metadata generation ordinal. Zero for
/// full metadata and non-zero for delta.
...
...
@@ -459,7 +465,7 @@ private ImmutableArray<int> GetRowCounts()
{
var
rowCounts
=
new
int
[
MetadataTokens
.
TableCount
];
rowCounts
[(
int
)
TableIndex
.
Assembly
]
=
(
this
.
module
.
AsAssembly
!=
null
)
?
1
:
0
;
rowCounts
[(
int
)
TableIndex
.
Assembly
]
=
EmitAssemblyDefinition
?
1
:
0
;
rowCounts
[(
int
)
TableIndex
.
AssemblyRef
]
=
_assemblyRefTable
.
Count
;
rowCounts
[(
int
)
TableIndex
.
ClassLayout
]
=
_classLayoutTable
.
Count
;
rowCounts
[(
int
)
TableIndex
.
Constant
]
=
_constantTable
.
Count
;
...
...
@@ -2584,12 +2590,12 @@ public int GetHashCode(IAssemblyReference reference)
private
void
PopulateAssemblyTableRows
()
{
IAssembly
assembly
=
this
.
module
.
AsAssembly
;
if
(
assembly
==
null
)
if
(!
EmitAssemblyDefinition
)
{
return
;
}
IAssembly
assembly
=
this
.
module
.
AsAssembly
;
_assemblyKey
=
heaps
.
GetBlobIndex
(
assembly
.
PublicKey
);
_assemblyName
=
this
.
GetStringIndexForPathAndCheckLength
(
assembly
.
Name
,
assembly
);
_assemblyCulture
=
heaps
.
GetStringIndex
(
assembly
.
Culture
);
...
...
@@ -4070,12 +4076,12 @@ private void SerializeFieldRvaTable(BlobBuilder writer, MetadataSizes metadataSi
private
void
SerializeAssemblyTable
(
BlobBuilder
writer
,
MetadataSizes
metadataSizes
)
{
IAssembly
assembly
=
this
.
module
.
AsAssembly
;
if
(
assembly
==
null
)
if
(!
EmitAssemblyDefinition
)
{
return
;
}
IAssembly
assembly
=
this
.
module
.
AsAssembly
;
writer
.
WriteUInt32
((
uint
)
assembly
.
HashAlgorithm
);
writer
.
WriteUInt16
((
ushort
)
assembly
.
Version
.
Major
);
writer
.
WriteUInt16
((
ushort
)
assembly
.
Version
.
Minor
);
...
...
src/Compilers/VisualBasic/Test/Emit/Emit/EditAndContinue/EditAndContinueTests.vb
浏览文件 @
54a80068
...
...
@@ -3488,7 +3488,7 @@ End Class
"
)
' expect a single TypeRef for System.Object
Dim
md1
=
diff1
.
GetMetadata
()
AssertEx
.
Equal
({
"[0x23000002] 0x000002
32.0x0000023f
"
},
DumpTypeRefs
(
md1
.
Reader
))
AssertEx
.
Equal
({
"[0x23000002] 0x000002
0d.0x0000021a
"
},
DumpTypeRefs
(
md1
.
Reader
))
Dim
diff2
=
compilation2
.
EmitDifference
(
diff1
.
NextGeneration
,
ImmutableArray
.
Create
(
...
...
@@ -3508,7 +3508,7 @@ End Class
"
)
' expect a single TypeRef for System.Object
Dim
md2
=
diff2
.
GetMetadata
()
AssertEx
.
Equal
({
"[0x23000003] 0x000002
a0.0x000002ad
"
},
DumpTypeRefs
(
md2
.
Reader
))
AssertEx
.
Equal
({
"[0x23000003] 0x000002
56.0x00000263
"
},
DumpTypeRefs
(
md2
.
Reader
))
End
Sub
<
Fact
>
...
...
@@ -3580,7 +3580,7 @@ End Class
"
)
' expect a single TypeRef for System.Object
Dim
md2
=
diff2
.
GetMetadata
()
AssertEx
.
Equal
({
"[0x23000003] 0x000002
d3.0x000002e0
"
},
DumpTypeRefs
(
md2
.
Reader
))
AssertEx
.
Equal
({
"[0x23000003] 0x000002
89.0x00000296
"
},
DumpTypeRefs
(
md2
.
Reader
))
End
Sub
Private
Shared
Iterator
Function
DumpTypeRefs
(
reader
As
MetadataReader
)
As
IEnumerable
(
Of
String
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录