Imported Upstream version 5.10.0.47

Former-commit-id: d0813289fa2d35e1f8ed77530acb4fb1df441bc0
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-01-24 17:04:36 +00:00
parent 88ff76fe28
commit e46a49ecf1
5927 changed files with 226314 additions and 129848 deletions

View File

@@ -13,8 +13,15 @@
<TargetFramework>portable-net45+win8</TargetFramework>
<Version>1.1.37</Version>
</FilePackageDependency>
<InboxOnTargetFramework Include="netcoreapp2.0" />
<InboxOnTargetFramework Include="$(UAPvNextTFM)" />
<!-- Since UAP and .NETCoreApp are package based we still want to enable
OOBing libraries that happen to overlap with their framework package.
This avoids us having to lock the API in our NuGet packages just
to match what shipped inbox: since we can provide a new library
we can update it to add API without raising the netstandard version. -->
<ValidatePackageSuppression Include="TreatAsOutOfBox">
<Value>.NETCoreApp;UAP</Value>
</ValidatePackageSuppression>
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project>

View File

@@ -1 +1 @@
d421ee938b951e8fc13b1f093c52ec399c682a2d
507b479bf6a15cb7a5f6d50c79d47577cefd2e94

View File

@@ -5,6 +5,7 @@
<ProjectGuid>{69B25962-B4C2-4295-8809-5653CD03FC75}</ProjectGuid>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CLSCompliant>false</CLSCompliant>
<DefineConstants Condition="'$(TargetGroup)' == 'netstandard1.1'">$(DefineConstants);NETSTANDARD11</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netcoreapp-Release|AnyCPU'" />
@@ -31,4 +32,4 @@
<ProjectReference Include="..\..\System.Collections.Immutable\ref\System.Collections.Immutable.csproj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project>
</Project>

View File

@@ -73,6 +73,8 @@
<Compile Include="System\Reflection\Metadata\MetadataReaderProvider.cs" />
<Compile Include="System\Reflection\Metadata\BlobContentId.cs" />
<Compile Include="System\Reflection\Metadata\Signatures\PrimitiveSerializationTypeCode.cs" />
<Compile Include="System\Reflection\Metadata\TypeSystem\AssemblyDefinition.netstandard.cs" Condition="'$(TargetGroup)' != 'netstandard1.1'" />
<Compile Include="System\Reflection\Metadata\TypeSystem\AssemblyReference.netstandard.cs" Condition="'$(TargetGroup)' != 'netstandard1.1'" />
<Compile Include="System\Reflection\Metadata\TypeSystem\Handles.TypeSystem.cs" />
<Compile Include="System\Reflection\PortableExecutable\ManagedPEBuilder.cs" />
<Compile Include="System\Reflection\PortableExecutable\ManagedTextSection.cs" />
@@ -181,6 +183,7 @@
<Compile Include="System\Reflection\Metadata\Signatures\MemberReferenceKind.cs" />
<Compile Include="System\Reflection\Metadata\Ecma335\MetadataAggregator.cs" />
<Compile Include="System\Reflection\Metadata\MetadataKind.cs" />
<Compile Include="System\Reflection\Metadata\MetadataReader.netstandard.cs" Condition="'$(TargetGroup)' != 'netstandard1.1'" />
<Compile Include="System\Reflection\Metadata\MetadataReader.cs" />
<Compile Include="System\Reflection\Metadata\MetadataReader.WinMD.cs" />
<Compile Include="System\Reflection\Metadata\MetadataReaderOptions.cs" />

View File

@@ -31,7 +31,7 @@ namespace System.Reflection.Internal
/// Does not check bounds.
///
/// Only creates a copy of the data if they are not represented by a managed byte array,
/// or if the specified range doens't span the entire block.
/// or if the specified range doesn't span the entire block.
/// </remarks>
public unsafe virtual ImmutableArray<byte> GetContentUnchecked(int start, int length)
{

View File

@@ -116,7 +116,7 @@ namespace System.Reflection.Metadata
public int RemainingBytes => (int)(_endPointer - _currentPointer);
/// <summary>
/// Repositions the reader to the start of the underluing memory block.
/// Repositions the reader to the start of the underlying memory block.
/// </summary>
public void Reset()
{

View File

@@ -20,7 +20,7 @@ namespace System.Reflection.Metadata.Ecma335
/// Builder tracking labels, branches and exception handlers.
/// </summary>
/// <remarks>
/// If null the encoder doesn't support constuction of control flow.
/// If null the encoder doesn't support construction of control flow.
/// </remarks>
public ControlFlowBuilder ControlFlowBuilder { get; }

View File

@@ -1 +1 @@
161cec5c59c4881faa640b4c15e500dd63cc0042
f56f0f835cfd63c3f562c4e0569942f4aa99dc63

View File

@@ -0,0 +1,62 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
namespace System.Reflection.Metadata
{
public sealed partial class MetadataReader
{
internal AssemblyName GetAssemblyName(StringHandle nameHandle, Version version, StringHandle cultureHandle, BlobHandle publicKeyOrTokenHandle, AssemblyHashAlgorithm assemblyHashAlgorithm, AssemblyFlags flags)
{
string name = GetString(nameHandle);
string cultureName = (!cultureHandle.IsNil) ? GetString(cultureHandle) : null;
var hashAlgorithm = (Configuration.Assemblies.AssemblyHashAlgorithm)assemblyHashAlgorithm;
byte[] publicKeyOrToken = !publicKeyOrTokenHandle.IsNil ? GetBlobBytes(publicKeyOrTokenHandle) : null;
var assemblyName = new AssemblyName(name)
{
Version = version,
CultureName = cultureName,
HashAlgorithm = hashAlgorithm,
Flags = GetAssemblyNameFlags(flags),
ContentType = GetContentTypeFromAssemblyFlags(flags)
};
bool hasPublicKey = (flags & AssemblyFlags.PublicKey) != 0;
if (hasPublicKey)
{
assemblyName.SetPublicKey(publicKeyOrToken);
}
else
{
assemblyName.SetPublicKeyToken(publicKeyOrToken);
}
return assemblyName;
}
private AssemblyNameFlags GetAssemblyNameFlags(AssemblyFlags flags)
{
AssemblyNameFlags assemblyNameFlags = AssemblyNameFlags.None;
if ((flags & AssemblyFlags.PublicKey) != 0)
assemblyNameFlags |= AssemblyNameFlags.PublicKey;
if ((flags & AssemblyFlags.Retargetable) != 0)
assemblyNameFlags |= AssemblyNameFlags.Retargetable;
if ((flags & AssemblyFlags.EnableJitCompileTracking) != 0)
assemblyNameFlags |= AssemblyNameFlags.EnableJITcompileTracking;
if ((flags & AssemblyFlags.DisableJitCompileOptimizer) != 0)
assemblyNameFlags |= AssemblyNameFlags.EnableJITcompileOptimizer;
return assemblyNameFlags;
}
private AssemblyContentType GetContentTypeFromAssemblyFlags(AssemblyFlags flags)
{
return (AssemblyContentType)(((int)flags & (int)AssemblyFlags.ContentTypeMask) >> 9);
}
}
}

View File

@@ -6,7 +6,7 @@ using System.Diagnostics;
namespace System.Reflection.Metadata
{
public struct AssemblyDefinition
public partial struct AssemblyDefinition
{
private readonly MetadataReader _reader;

View File

@@ -0,0 +1,14 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
namespace System.Reflection.Metadata
{
public partial struct AssemblyDefinition
{
public AssemblyName GetAssemblyName()
{
return _reader.GetAssemblyName(Name, Version, Culture, PublicKey, HashAlgorithm, Flags);
}
}
}

View File

@@ -7,7 +7,7 @@ using System.Reflection.Metadata.Ecma335;
namespace System.Reflection.Metadata
{
public struct AssemblyReference
public partial struct AssemblyReference
{
private readonly MetadataReader _reader;

View File

@@ -0,0 +1,14 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
namespace System.Reflection.Metadata
{
public partial struct AssemblyReference
{
public AssemblyName GetAssemblyName()
{
return _reader.GetAssemblyName(Name, Version, Culture, PublicKeyOrToken, AssemblyHashAlgorithm.None, Flags);
}
}
}

View File

@@ -264,7 +264,7 @@ namespace System.Reflection.Metadata.Decoding.Tests
// Compiler can generate temporaries or re-order so just check the ones we expect are there.
// (They could get optimized away too. If that happens in practice, change this test to use hard-coded signatures.)
Assert.Contains("uint8& pinned", localTypes);
Assert.Contains("uint8[] pinned", localTypes);
Assert.Contains("uint8[]", localTypes);
}
}

View File

@@ -203,7 +203,7 @@ namespace System.Reflection.Metadata.Ecma335.Tests
}
/// <summary>
/// Add methods do miminal validation to avoid overhead.
/// Add methods do minimal validation to avoid overhead.
/// </summary>
[Fact]
public void Add_ArgumentErrors()

View File

@@ -0,0 +1,126 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Xunit;
namespace System.Reflection.Metadata.Tests
{
public class AssemblyDefinitionTests
{
[Fact]
public void ValidateAssemblyNameWithCultureSet()
{
var assembly = new { Assembly = Misc.Satellite, Name = "SatelliteAssembly.resources", Version = new Version(1, 0, 0, 0), ContentType = AssemblyContentType.Default, Culture = "de-DE" };
var reader = MetadataReaderTests.GetMetadataReader(assembly.Assembly, options: MetadataReaderOptions.ApplyWindowsRuntimeProjections);
foreach (var assemblyRefHandle in reader.AssemblyReferences)
{
var assemblyDef = reader.GetAssemblyDefinition();
var assemblyRef = reader.GetAssemblyReference(assemblyRefHandle);
var assemblyName = assemblyDef.GetAssemblyName();
// Validate against input assembly
Assert.Equal(assembly.Version, assemblyName.Version);
Assert.Equal(assembly.Name, assemblyName.Name);
Assert.Equal(assembly.ContentType, assemblyName.ContentType);
Assert.Equal(assembly.Culture, assemblyName.CultureName);
Assert.Equal(Configuration.Assemblies.AssemblyHashAlgorithm.SHA1, assemblyName.HashAlgorithm);
Assert.Null(assemblyName.GetPublicKey());
Assert.Null(assemblyName.GetPublicKeyToken());
Assert.Equal(AssemblyNameFlags.None, assemblyName.Flags);
// Validate against AssemblyDefinition
ValidateDefinitionAssemblyNameAgainst(assemblyName, reader, assemblyDef);
// Validate against AssemblyReference
ValidateDefinitionAssemblyNameAgainst(assemblyName, reader, assemblyRef);
}
}
[Fact]
public void ValidateAssemblyNameWithPublicKey()
{
var assembly = new { Assembly = Misc.Signed, Name = "Signed", Version = new Version(0, 0, 0, 0), ContentType = AssemblyContentType.Default, Flags = AssemblyNameFlags.PublicKey };
var reader = MetadataReaderTests.GetMetadataReader(assembly.Assembly, options: MetadataReaderOptions.ApplyWindowsRuntimeProjections);
foreach (var assemblyRefHandle in reader.AssemblyReferences)
{
var assemblyDef = reader.GetAssemblyDefinition();
var assemblyRef = reader.GetAssemblyReference(assemblyRefHandle);
var assemblyName = assemblyDef.GetAssemblyName();
// Validate against input assembly
Assert.Equal(assembly.Version, assemblyName.Version);
Assert.Equal(assembly.Name, assemblyName.Name);
Assert.Equal(assembly.ContentType, assemblyName.ContentType);
Assert.Null(assemblyName.CultureName);
Assert.Equal(Configuration.Assemblies.AssemblyHashAlgorithm.SHA1, assemblyName.HashAlgorithm);
Assert.Equal(assembly.Flags, assemblyName.Flags);
Assert.NotNull(assemblyName.GetPublicKeyToken());
Assert.NotNull(assemblyName.GetPublicKey());
// Validate against AssemblyDefinition
ValidateDefinitionAssemblyNameAgainst(assemblyName, reader, assemblyDef);
// Validate against AssemblyReference
ValidateDefinitionAssemblyNameAgainst(assemblyName, reader, assemblyRef);
}
}
[Fact]
public void ValidateAssemblyNameForAssemblyDefinition()
{
var assemblyItems = new[]
{
new { Assembly = WinRT.Lib, Name = "Lib", Version = new Version(1, 0, 0, 0), ContentType = AssemblyContentType.WindowsRuntime },
new { Assembly = NetModule.AppCS, Name = "AppCS", Version = new Version(1, 2, 3, 4), ContentType = AssemblyContentType.Default },
new { Assembly = Namespace.NamespaceTests, Name = "NamespaceTests", Version = new Version(0, 0, 0, 0), ContentType = AssemblyContentType.Default },
new { Assembly = PortablePdbs.DocumentsDll, Name = "Documents", Version = new Version(0, 0, 0, 0), ContentType = AssemblyContentType.Default }
};
foreach (var item in assemblyItems)
{
var reader = MetadataReaderTests.GetMetadataReader(item.Assembly, options: MetadataReaderOptions.ApplyWindowsRuntimeProjections);
foreach (var assemblyRefHandle in reader.AssemblyReferences)
{
var assemblyDef = reader.GetAssemblyDefinition();
var assemblyRef = reader.GetAssemblyReference(assemblyRefHandle);
var assemblyName = assemblyDef.GetAssemblyName();
// Validate against input assembly
Assert.Equal(item.Version, assemblyName.Version);
Assert.Equal(item.Name, assemblyName.Name);
Assert.Equal(item.ContentType, assemblyName.ContentType);
Assert.Null(assemblyName.CultureName);
Assert.Equal(Configuration.Assemblies.AssemblyHashAlgorithm.SHA1, assemblyName.HashAlgorithm);
Assert.Null(assemblyName.GetPublicKey());
Assert.Null(assemblyName.GetPublicKeyToken());
Assert.Equal(AssemblyNameFlags.None, assemblyName.Flags);
// Validate against AssemblyDefinition
ValidateDefinitionAssemblyNameAgainst(assemblyName, reader, assemblyDef);
// Validate against AssemblyReference
ValidateDefinitionAssemblyNameAgainst(assemblyName, reader, assemblyRef);
}
}
}
private void ValidateDefinitionAssemblyNameAgainst(AssemblyName assemblyName, MetadataReader reader, AssemblyDefinition assemblyDef)
{
Assert.Equal(reader.GetString(assemblyDef.Name), assemblyName.Name);
Assert.Equal(assemblyDef.Version, assemblyName.Version);
Assert.Equal((Configuration.Assemblies.AssemblyHashAlgorithm)assemblyDef.HashAlgorithm, assemblyName.HashAlgorithm);
Assert.Equal((AssemblyContentType)(((int)assemblyDef.Flags & (int)AssemblyFlags.ContentTypeMask) >> 9), assemblyName.ContentType);
}
private void ValidateDefinitionAssemblyNameAgainst(AssemblyName assemblyName, MetadataReader reader, AssemblyReference assemblyRef)
{
Assert.NotEqual(reader.GetString(assemblyRef.Name), assemblyName.Name);
}
}
}

View File

@@ -0,0 +1,103 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Linq;
using Xunit;
namespace System.Reflection.Metadata.Tests
{
public class AssemblyReferenceTests
{
[Fact]
public void ValidateAssemblyNameForSingleAssemblyReference()
{
var reader = MetadataReaderTests.GetMetadataReader(WinRT.Lib, options: MetadataReaderOptions.ApplyWindowsRuntimeProjections);
var handle = reader.AssemblyReferences.Skip(3).First();
var assemblyRef = reader.GetAssemblyReference(handle);
var assemblyDef = reader.GetAssemblyDefinition();
var assemblyName = assemblyRef.GetAssemblyName();
// Validate against input assembly
Assert.Equal("System.Runtime", assemblyName.Name);
Assert.Equal(new Version(4, 0, 0, 0), assemblyName.Version);
Assert.Equal(new byte[] { 0xB0, 0x3F, 0x5F, 0x7F, 0x11, 0xD5, 0x0A, 0x3A }, assemblyName.GetPublicKeyToken());
Assert.Null(assemblyName.CultureName);
Assert.Equal(Configuration.Assemblies.AssemblyHashAlgorithm.None, assemblyName.HashAlgorithm);
Assert.Null(assemblyName.GetPublicKey());
Assert.Equal(AssemblyNameFlags.None, assemblyName.Flags);
Assert.Equal(AssemblyContentType.Default, assemblyName.ContentType);
// Validate against AssemblyRefernce
ValidateReferenceAssemblyNameAgainst(assemblyName, reader, assemblyRef);
// Validate against AssemblyDefinition
ValidateReferenceAssemblyNameAgainst(assemblyName, reader, assemblyDef);
}
[Fact]
public void ValidateAssemblyNameForMultipleAssemblyReferences()
{
var expRefs = new string[] { "mscorlib", "System.Core", "System", "Microsoft.VisualBasic" };
byte[][] expKeys = new byte[][]
{
new byte[] { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 },
new byte[] { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 },
new byte[] { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 },
// VB: B0 3F 5F 7F 11 D5 0A 3A
new byte[] { 0xb0, 0x3f, 0x5f, 0x7f, 0x11, 0xd5, 0x0a, 0x3a }
};
var expVers = new Version[]
{
new Version(4, 0, 0, 0),
new Version(4, 0, 0, 0),
new Version(4, 0, 0, 0),
new Version(/*VB*/10, 0, 0, 0),
};
var reader = MetadataReaderTests.GetMetadataReader(NetModule.AppCS);
int i = 0;
foreach (var assemblyRefHandle in reader.AssemblyReferences)
{
var assemblyRef = reader.GetAssemblyReference(assemblyRefHandle);
var assemblyDef = reader.GetAssemblyDefinition();
var assemblyName = assemblyRef.GetAssemblyName();
// Validate against input assembly
Assert.Equal(expRefs[i], assemblyName.Name);
Assert.Equal(expVers[i], assemblyName.Version);
Assert.Equal(expKeys[i], assemblyName.GetPublicKeyToken());
Assert.Null(assemblyName.CultureName);
Assert.Equal(Configuration.Assemblies.AssemblyHashAlgorithm.None, assemblyName.HashAlgorithm);
Assert.Null(assemblyName.GetPublicKey());
Assert.Equal(AssemblyNameFlags.None, assemblyName.Flags);
Assert.Equal(AssemblyContentType.Default, assemblyName.ContentType);
// Validate against AssemblyRefernce
ValidateReferenceAssemblyNameAgainst(assemblyName, reader, assemblyRef);
// Validate against AssemblyDefinition
ValidateReferenceAssemblyNameAgainst(assemblyName, reader, assemblyDef);
i++;
}
}
private void ValidateReferenceAssemblyNameAgainst(AssemblyName assemblyName, MetadataReader reader, AssemblyReference assemblyRef)
{
Assert.Equal(reader.GetString(assemblyRef.Name), assemblyName.Name);
Assert.Equal(assemblyRef.Version, assemblyName.Version);
Assert.Equal(reader.GetBlobBytes(assemblyRef.PublicKeyOrToken), assemblyName.GetPublicKeyToken());
}
private void ValidateReferenceAssemblyNameAgainst(AssemblyName assemblyName, MetadataReader reader, AssemblyDefinition assemblyDef)
{
Assert.NotEqual(reader.GetString(assemblyDef.Name), assemblyName.Name);
Assert.NotEqual(assemblyDef.Version, assemblyName.Version);
}
}
}

View File

@@ -0,0 +1,10 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
// csc /target:library /debug:full Debug.cs
public class C
{
public static void Main() { }
}

View File

@@ -26,6 +26,7 @@ namespace System.Reflection.Metadata.Tests
public static readonly byte[] Debug = ResourceHelper.GetResource("Misc.Debug.dll");
public static readonly byte[] KeyPair = ResourceHelper.GetResource("Misc.KeyPair.snk");
public static readonly byte[] Signed = ResourceHelper.GetResource("Misc.Signed.exe");
public static readonly byte[] Satellite = ResourceHelper.GetResource("Misc.SatelliteAssembly.resources.dll");
public static readonly byte[] KeyPair_PublicKey = new byte[]
{

View File

@@ -38,6 +38,8 @@
<Compile Include="Metadata\Ecma335\MetadataRootBuilderTests.cs" />
<Compile Include="Metadata\Ecma335\PortablePdbBuilderTests.cs" />
<Compile Include="Metadata\LargeTablesAndHeapsTests.cs" />
<Compile Include="Metadata\TypeSystem\AssemblyDefinitionTests.cs" />
<Compile Include="Metadata\TypeSystem\AssemblyReferenceTests.cs" />
<Compile Include="Metadata\TypeSystem\ClassLayoutRow.cs" />
<Compile Include="Metadata\Decoding\CustomAttributeDecoderTests.cs" />
<Compile Include="Metadata\Decoding\DisassemblingTypeProvider.cs" />
@@ -130,14 +132,16 @@
<EmbeddedResource Include="Resources\PortablePdbs\Documents.Embedded.dll" />
<None Include="Resources\PortablePdbs\Documents.cmd" />
<None Include="Resources\PortablePdbs\Documents.cs" />
<None Include="Resources\Misc\SatelliteAssembly.resources.cs" />
<EmbeddedResource Include="Resources\Misc\SatelliteAssembly.resources.dll" />
<None Include="Resources\Misc\Signed.cmd" />
<None Include="Resources\Misc\Signed.cs" />
<EmbeddedResource Include="Resources\Misc\Signed.exe" />
</ItemGroup>
<ItemGroup>
<ItemGroup>
<!-- Some internal types are needed, so we reference the implementation assembly, rather than the reference assembly. -->
<TargetingPackExclusions Include="System.Reflection.Metadata" />
<ReferenceFromRuntime Include="System.Reflection.Metadata" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
</Project>
</Project>