public void EndToEnd_PortableToWindows_ExplicitPath_SourceLinkConversion() { var dir = _temp.CreateDirectory(); var pe = dir.CreateFile("SourceLink.dll").WriteAllBytes(TestResources.SourceLink.PortableDll); var pdb = dir.CreateFile("SourceLink.x.pdb").WriteAllBytes(TestResources.SourceLink.PortablePdb); var outPdbPath = Path.Combine(dir.Path, "SourceLink.pdb2"); Pdb2Pdb.Convert(new Pdb2Pdb.Args( peFilePath: pe.Path, pdbFilePathOpt: pdb.Path, outPdbFilePath: outPdbPath, options: PdbConversionOptions.Default, extract: false, verbose: false)); using (var peStream = File.OpenRead(pe.Path)) using (var pdbStream = File.OpenRead(outPdbPath)) { var symReader = SymReaderFactory.CreateWindowsPdbReader(pdbStream); Assert.Null(symReader.GetSourceLinkData()); string actual = symReader.GetSourceServerData(); AssertEx.AssertLinesEqual( @"SRCSRV: ini ------------------------------------------------ VERSION=2 SRCSRV: variables ------------------------------------------ RAWURL=http://server/%var2% SRCSRVVERCTRL=http SRCSRVTRG=%RAWURL% SRCSRV: source files --------------------------------------- C:\Documents.cs*3/Documents.cs.g C:\a\b\c\d\1.cs*1/a/b/c/d/1.cs C:\a\b\c\D\2.cs*1/a/b/c/D/2.cs C:\a\b\C\d\3.cs*1/a/b/C/d/3.cs C:\a\b\c\d\x.cs*1/a/b/c/d/x.cs C:\A\b\c\x.cs*1/a/b/c/x.cs C:\a\b\x.cs*1/a/b/x.cs C:\a\B\3.cs*1/a/B/3.cs C:\a\B\c\4.cs*1/a/B/c/4.cs :6.cs*4/:6.cs C:\a\b\X.cs*1/a/b/X.cs C:\a\B\x.cs*1/a/B/x.cs SRCSRV: end ------------------------------------------------", actual); } }
public void EndToEnd_EmbeddedToWindows_SuppressSourceLinkConversion() { var dir = _temp.CreateDirectory(); var pe = dir.CreateFile("SourceLink.Embedded.dll").WriteAllBytes(TestResources.SourceLink.EmbeddedDll); var outPdb = dir.CreateFile("SourceLink.converted.pdb").WriteAllText("dummy"); Pdb2Pdb.Convert(new Pdb2Pdb.Args( peFilePath: pe.Path, pdbFilePathOpt: null, outPdbFilePath: outPdb.Path, options: PdbConversionOptions.SuppressSourceLinkConversion, extract: false, verbose: false)); using (var peStream = File.OpenRead(pe.Path)) using (var pdbStream = File.OpenRead(outPdb.Path)) { var symReader = SymReaderFactory.CreateWindowsPdbReader(pdbStream); AssertEx.Equal(TestResources.SourceLink.SourceLinkJson, symReader.GetRawSourceLinkData()); Assert.Null(symReader.GetSourceServerData()); } }
private static void VerifyMatchingSignatures(Stream portablePdbStream, Stream windowsPdbStream) { Guid guid; uint stamp; int age; using (var provider = MetadataReaderProvider.FromPortablePdbStream(portablePdbStream)) { SymReaderHelpers.GetWindowsPdbSignature(provider.GetMetadataReader().DebugMetadataHeader.Id, out guid, out stamp, out age); } var symReader = SymReaderFactory.CreateWindowsPdbReader(windowsPdbStream); try { Marshal.ThrowExceptionForHR(symReader.MatchesModule(guid, stamp, age, out bool result)); Assert.True(result); } finally { ((ISymUnmanagedDispose)symReader).Destroy(); } }