本文整理汇总了C#中BlobBuilder类的典型用法代码示例。如果您正苦于以下问题:C# BlobBuilder类的具体用法?C# BlobBuilder怎么用?C# BlobBuilder使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
BlobBuilder类属于命名空间,在下文中一共展示了BlobBuilder类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SerializeTableHeader
internal static ExceptionRegionEncoder SerializeTableHeader(BlobBuilder builder, int exceptionRegionCount, bool hasSmallRegions)
{
Debug.Assert(exceptionRegionCount > 0);
const byte EHTableFlag = 0x01;
const byte FatFormatFlag = 0x40;
bool hasSmallFormat = hasSmallRegions && IsSmallRegionCount(exceptionRegionCount);
int dataSize = GetExceptionTableSize(exceptionRegionCount, hasSmallFormat);
builder.Align(4);
if (hasSmallFormat)
{
builder.WriteByte(EHTableFlag);
builder.WriteByte(unchecked((byte)dataSize));
builder.WriteInt16(0);
}
else
{
Debug.Assert(dataSize <= 0x00ffffff);
builder.WriteByte(EHTableFlag | FatFormatFlag);
builder.WriteByte(unchecked((byte)dataSize));
builder.WriteUInt16(unchecked((ushort)(dataSize >> 8)));
}
return new ExceptionRegionEncoder(builder, hasSmallFormat);
}
示例2: WriteData
public void WriteData(BlobBuilder resourceWriter)
{
if (_fileReference == null)
{
try
{
using (Stream stream = _streamProvider())
{
if (stream == null)
{
throw new InvalidOperationException(CodeAnalysisResources.ResourceStreamProviderShouldReturnNonNullStream);
}
var count = (int)(stream.Length - stream.Position);
resourceWriter.WriteInt32(count);
int bytesWritten = resourceWriter.TryWriteBytes(stream, count);
if (bytesWritten != count)
{
throw new EndOfStreamException(
string.Format(CultureInfo.CurrentUICulture, CodeAnalysisResources.ResourceStreamEndedUnexpectedly, bytesWritten, count));
}
resourceWriter.Align(8);
}
}
catch (Exception e)
{
throw new ResourceException(_name, e);
}
}
}
示例3: BlobEncoder_MethodSignature
public void BlobEncoder_MethodSignature()
{
var b = new BlobBuilder();
var e = new BlobEncoder(b);
var s = e.MethodSignature();
AssertEx.Equal(new byte[] { 0x00 }, b.ToArray());
Assert.Same(b, s.Builder);
Assert.False(s.HasVarArgs);
b.Clear();
s = e.MethodSignature(
convention: SignatureCallingConvention.StdCall,
genericParameterCount: 1234,
isInstanceMethod: true);
AssertEx.Equal(new byte[] { 0x32, 0x84, 0xD2 }, b.ToArray());
Assert.False(s.HasVarArgs);
b.Clear();
s = e.MethodSignature(
convention: SignatureCallingConvention.VarArgs,
genericParameterCount: 1,
isInstanceMethod: false);
AssertEx.Equal(new byte[] { 0x15, 0x01 }, b.ToArray());
Assert.True(s.HasVarArgs);
b.Clear();
Assert.Throws<ArgumentOutOfRangeException>(() => e.MethodSignature(genericParameterCount: -1));
Assert.Throws<ArgumentOutOfRangeException>(() => e.MethodSignature(genericParameterCount: ushort.MaxValue + 1));
}
示例4: WriteFakeILWithBranches
private static void WriteFakeILWithBranches(BlobBuilder builder, ControlFlowBuilder branchBuilder, int size)
{
Assert.Equal(0, builder.Count);
const byte filling = 0x01;
int ilOffset = 0;
foreach (var branch in branchBuilder.Branches)
{
builder.WriteBytes(filling, branch.ILOffset - ilOffset);
Assert.Equal(branch.ILOffset, builder.Count);
builder.WriteByte((byte)branch.OpCode);
int operandSize = branch.OpCode.GetBranchOperandSize();
if (operandSize == 1)
{
builder.WriteSByte(-1);
}
else
{
builder.WriteInt32(-1);
}
ilOffset = branch.ILOffset + sizeof(byte) + operandSize;
}
builder.WriteBytes(filling, size - ilOffset);
Assert.Equal(size, builder.Count);
}
示例5: Serialize
/// <summary>
/// Serialized the metadata root content into the given <see cref="BlobBuilder"/>.
/// </summary>
/// <param name="builder">Builder to write to.</param>
/// <param name="methodBodyStreamRva">
/// The relative virtual address of the start of the method body stream.
/// Used to calculate the final value of RVA fields of MethodDef table.
/// </param>
/// <param name="mappedFieldDataStreamRva">
/// The relative virtual address of the start of the field init data stream.
/// Used to calculate the final value of RVA fields of FieldRVA table.
/// </param>
/// <exception cref="ArgumentNullException"><paramref name="builder"/> is null.</exception>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="methodBodyStreamRva"/> or <paramref name="mappedFieldDataStreamRva"/> is negative.</exception>
public void Serialize(BlobBuilder builder, int methodBodyStreamRva, int mappedFieldDataStreamRva)
{
if (builder == null)
{
Throw.ArgumentNull(nameof(builder));
}
if (methodBodyStreamRva < 0)
{
Throw.ArgumentOutOfRange(nameof(methodBodyStreamRva));
}
if (mappedFieldDataStreamRva < 0)
{
Throw.ArgumentOutOfRange(nameof(mappedFieldDataStreamRva));
}
// header:
MetadataBuilder.SerializeMetadataHeader(builder, MetadataVersion, _serializedMetadata.Sizes);
// #~ or #- stream:
_tablesAndHeaps.SerializeMetadataTables(builder, _serializedMetadata.Sizes, _serializedMetadata.StringMap, methodBodyStreamRva, mappedFieldDataStreamRva);
// #Strings, #US, #Guid and #Blob streams:
_tablesAndHeaps.WriteHeapsTo(builder, _serializedMetadata.StringHeap);
}
示例6: ReadVersion
private string ReadVersion(BlobBuilder metadata)
{
using (var provider = MetadataReaderProvider.FromMetadataImage(metadata.ToImmutableArray()))
{
return provider.GetMetadataReader().MetadataVersion;
}
}
示例7: Baseline
public void Baseline()
{
var mdBuilder = new MetadataBuilder();
mdBuilder.AddModule(0, default(StringHandle), default(GuidHandle), default(GuidHandle), default(GuidHandle));
var rootBuilder = new MetadataRootBuilder(mdBuilder);
var mdBlob = new BlobBuilder();
rootBuilder.Serialize(mdBlob, 0, 0);
// validate sizes table rows that reference guids:
using (var mdProvider = MetadataReaderProvider.FromMetadataImage(mdBlob.ToImmutableArray()))
{
var mdReader = mdProvider.GetMetadataReader();
Assert.Equal(2 + 3 * 2 + 2, mdReader.ModuleTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.TypeRefTable.RowSize);
Assert.Equal(4 + 2 + 2 + 2 + 2 + 2, mdReader.TypeDefTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.FieldTable.RowSize);
Assert.Equal(8 + 2 + 2 + 2, mdReader.MethodDefTable.RowSize);
Assert.Equal(4 + 2, mdReader.ParamTable.RowSize);
Assert.Equal(2 + 2, mdReader.InterfaceImplTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.MemberRefTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.ConstantTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.CustomAttributeTable.RowSize);
Assert.Equal(2 + 2, mdReader.FieldMarshalTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.DeclSecurityTable.RowSize);
Assert.Equal(6 + 2, mdReader.ClassLayoutTable.RowSize);
Assert.Equal(4 + 2, mdReader.FieldLayoutTable.RowSize);
Assert.Equal(2, mdReader.StandAloneSigTable.RowSize);
Assert.Equal(2 + 2, mdReader.EventMapTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.EventTable.RowSize);
Assert.Equal(2 + 2, mdReader.PropertyMapTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.PropertyTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.MethodSemanticsTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.MethodImplTable.RowSize);
Assert.Equal(2, mdReader.ModuleRefTable.RowSize);
Assert.Equal(2, mdReader.TypeSpecTable.RowSize);
Assert.Equal(2 + 2 + 2 + 2, mdReader.ImplMapTable.RowSize);
Assert.Equal(4 + 2, mdReader.FieldRvaTable.RowSize);
Assert.Equal(16 + 2 + 2 + 2, mdReader.AssemblyTable.RowSize);
Assert.Equal(12 + 2 + 2 + 2 + 2, mdReader.AssemblyRefTable.RowSize);
Assert.Equal(4 + 2 + 2, mdReader.FileTable.RowSize);
Assert.Equal(8 + 2 + 2 + 2, mdReader.ExportedTypeTable.RowSize);
Assert.Equal(8 + 2 + 2, mdReader.ManifestResourceTable.RowSize);
Assert.Equal(2 + 2, mdReader.NestedClassTable.RowSize);
Assert.Equal(4 + 2 + 2, mdReader.GenericParamTable.RowSize);
Assert.Equal(2 + 2, mdReader.MethodSpecTable.RowSize);
Assert.Equal(2 + 2, mdReader.GenericParamConstraintTable.RowSize);
Assert.Equal(2 + 2 + 2 + 2, mdReader.DocumentTable.RowSize);
Assert.Equal(2 + 2, mdReader.MethodDebugInformationTable.RowSize);
Assert.Equal(2 + 2 + 2 + 2 + 4 + 4, mdReader.LocalScopeTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.LocalVariableTable.RowSize);
Assert.Equal(2 + 2, mdReader.LocalConstantTable.RowSize);
Assert.Equal(2 + 2, mdReader.ImportScopeTable.RowSize);
Assert.Equal(2 + 2, mdReader.StateMachineMethodTable.RowSize);
Assert.Equal(2 + 2 + 2, mdReader.CustomDebugInformationTable.RowSize);
}
}
示例8: Serialize_Errors
public void Serialize_Errors()
{
var mdBuilder = new MetadataBuilder();
var pdbBuilder = new PortablePdbBuilder(mdBuilder, MetadataRootBuilder.EmptyRowCounts, default(MethodDefinitionHandle));
var builder = new BlobBuilder();
Assert.Throws<ArgumentNullException>(() => pdbBuilder.Serialize(null));
}
示例9: BlobEncoder_FieldSignature
public void BlobEncoder_FieldSignature()
{
var b = new BlobBuilder();
var e = new BlobEncoder(b);
var s = e.FieldSignature();
AssertEx.Equal(new byte[] { 0x06 }, b.ToArray());
Assert.Same(b, s.Builder);
}
示例10: SerializedMetadata
public SerializedMetadata(
MetadataSizes sizes,
BlobBuilder stringHeap,
ImmutableArray<int> stringMap)
{
Sizes = sizes;
StringHeap = stringHeap;
StringMap = stringMap;
}
示例11: SerializedSection
public SerializedSection(BlobBuilder builder, string name, SectionCharacteristics characteristics, int relativeVirtualAddress, int sizeOfRawData, int pointerToRawData)
{
Name = name;
Characteristics = characteristics;
Builder = builder;
RelativeVirtualAddress = relativeVirtualAddress;
SizeOfRawData = sizeOfRawData;
PointerToRawData = pointerToRawData;
}
示例12: Add_Small
public void Add_Small()
{
var builder = new BlobBuilder();
var encoder = new ExceptionRegionEncoder(builder, hasSmallFormat: true);
encoder.Add(ExceptionRegionKind.Catch, 1, 2, 4, 5, catchType: MetadataTokens.TypeDefinitionHandle(1));
AssertEx.Equal(new byte[]
{
0x00, 0x00, // kind
0x01, 0x00, // try offset
0x02, // try length
0x04, 0x00, // handler offset
0x05, // handler length
0x01, 0x00, 0x00, 0x02 // catch type
}, builder.ToArray());
builder.Clear();
encoder.Add(ExceptionRegionKind.Filter, 0xffff, 0xff, 0xffff, 0xff, filterOffset: int.MaxValue);
AssertEx.Equal(new byte[]
{
0x01, 0x00, // kind
0xff, 0xff, // try offset
0xff, // try length
0xff, 0xff, // handler offset
0xff, // handler length
0xff, 0xff, 0xff, 0x7f // filter offset
}, builder.ToArray());
builder.Clear();
encoder.Add(ExceptionRegionKind.Fault, 0xffff, 0xff, 0xffff, 0xff);
AssertEx.Equal(new byte[]
{
0x04, 0x00, // kind
0xff, 0xff, // try offset
0xff, // try length
0xff, 0xff, // handler offset
0xff, // handler length
0x00, 0x00, 0x00, 0x00
}, builder.ToArray());
builder.Clear();
encoder.Add(ExceptionRegionKind.Finally, 0, 0, 0, 0);
AssertEx.Equal(new byte[]
{
0x02, 0x00, // kind
0x00, 0x00, // try offset
0x00, // try length
0x00, 0x00, // handler offset
0x00, // handler length
0x00, 0x00, 0x00, 0x00
}, builder.ToArray());
builder.Clear();
}
示例13: BlobEncoder
public BlobEncoder(BlobBuilder builder)
{
if (builder == null)
{
Throw.BuilderArgumentNull();
}
Builder = builder;
}
示例14: Ctor
public void Ctor()
{
var code = new BlobBuilder();
var flow = new ControlFlowBuilder();
var ie = new InstructionEncoder(code, flow);
Assert.Same(ie.CodeBuilder, code);
Assert.Same(ie.ControlFlowBuilder, flow);
Assert.Throws<ArgumentNullException>(() => new InstructionEncoder(null));
}
示例15: Serialize_Errors
public void Serialize_Errors()
{
var mdBuilder = new MetadataBuilder();
var rootBuilder = new MetadataRootBuilder(mdBuilder);
var builder = new BlobBuilder();
Assert.Throws<ArgumentNullException>(() => rootBuilder.Serialize(null, 0, 0));
Assert.Throws<ArgumentOutOfRangeException>(() => rootBuilder.Serialize(builder, -1, 0));
Assert.Throws<ArgumentOutOfRangeException>(() => rootBuilder.Serialize(builder, 0, -1));
}