Exemple #1
0
        public void AssemblyAndPdb()
        {
            var source = @"class C { public static void Main() { int x = 1; } }";

            var compilation = CSharpTestBase.CreateCompilationWithMscorlib40AndSystemCore(source, options: TestOptions.DebugDll, assemblyName: "lib");
            var pdbStream   = new MemoryStream();
            var peImage     = compilation.EmitToArray(new EmitOptions(debugInformationFormat: DebugInformationFormat.PortablePdb), pdbStream: pdbStream);

            pdbStream.Position = 0;

            var dir     = Temp.CreateDirectory();
            var dllFile = dir.CreateFile("a.dll").WriteAllBytes(peImage);
            var pdbFile = dir.CreateFile("a.pdb").WriteAllBytes(pdbStream.ToArray());

            var outputs = new CompilationOutputFiles(dllFile.Path, pdbFile.Path);

            using (var pdb = outputs.OpenPdb())
            {
                var encReader = pdb.CreateEditAndContinueMethodDebugInfoReader();
                Assert.True(encReader.IsPortable);
                var localSig = encReader.GetLocalSignature(MetadataTokens.MethodDefinitionHandle(1));
                Assert.Equal(MetadataTokens.StandaloneSignatureHandle(1), localSig);
            }

            using (var metadata = outputs.OpenAssemblyMetadata(prefetch: false))
            {
                var mdReader = metadata.GetMetadataReader();
                Assert.Equal("lib", mdReader.GetString(mdReader.GetAssemblyDefinition().Name));
            }

            // make sure all files are closed and can be deleted
            Directory.Delete(dir.Path, recursive: true);
        }
Exemple #2
0
        private IEnumerable <LibraryAsset> CollectAssets(CompilationOutputFiles files)
        {
            var assemblyPath = files.Assembly;

            foreach (var path in files.All().Except(files.Resources().Select(r => r.Path)))
            {
                if (string.Equals(assemblyPath, path))
                {
                    continue;
                }
                yield return(LibraryAsset.CreateFromAbsolutePath(files.BasePath, path));
            }
        }
Exemple #3
0
 private IEnumerable<LibraryAsset> CollectAssets(CompilationOutputFiles files)
 {
     var assemblyPath = files.Assembly;
     foreach (var path in files.All())
     {
         if (string.Equals(assemblyPath, path))
         {
             continue;
         }
         yield return LibraryAsset.CreateFromAbsolutePath(files.BasePath, path);
     }
 }