private IEnumerable <MemberDependency> GetDependencies(IAssemblyFile file)
        {
            try
            {
                using (var stream = file.OpenRead())
                    using (var peFile = new PEReader(stream))
                    {
                        var metadataReader = GetMetadataReader(peFile);

                        AddReferencedAssemblies(metadataReader);

                        var helper = new DependencyFinderEngineHelper(_assemblyFilter, metadataReader, file);
                        helper.ComputeData();

                        // Remember this assembly as a user assembly.
                        _userAssemblies.Add(helper.CallingAssembly);

                        return(helper.MemberDependency);
                    }
            }
            catch (Exception exc)
            {
                // InvalidPEAssemblyExceptions may be expected and indicative of a non-PE file
                if (exc is InvalidPEAssemblyException)
                {
                    throw;
                }

                // Other exceptions are unexpected, though, and wil benefit from
                // more details on the scenario that hit them
                throw new PortabilityAnalyzerException(string.Format(LocalizedStrings.MetadataParsingExceptionMessage, file.Name), exc);
            }
        }
        private IEnumerable <MemberDependency> GetDependencies(IAssemblyFile file)
        {
            try
            {
                using (var stream = file.OpenRead())
                {
                    using (var peFile = new PEReader(stream))
                    {
                        var metadataReader = GetMetadataReader(peFile);

                        var helper = new DependencyFinderEngineHelper(_assemblyFilter, metadataReader, file, _objectFinder);

                        if (_assemblyFilter.IsFrameworkAssembly(metadataReader.FormatAssemblyInfo()))
                        {
                            _nonUserAssemblies.Add(helper.CallingAssembly);
                            return(Enumerable.Empty <MemberDependency>());
                        }
                        else
                        {
                            AddReferencedAssemblies(metadataReader);

                            helper.ComputeData();

                            // Remember this assembly as a user assembly.
                            _userAssemblies.Add(helper.CallingAssembly);

                            return(helper.MemberDependency);
                        }
                    }
                }
            }
            catch (Exception exc)
            {
                // InvalidPEAssemblyExceptions may be expected and indicative of a non-PE file
                if (exc is InvalidPEAssemblyException)
                {
                    throw;
                }

                // Occurs when we cannot find the System.Object assembly.
                if (exc is SystemObjectNotFoundException)
                {
                    throw;
                }

                // Other exceptions are unexpected, though, and will benefit from
                // more details on the scenario that hit them
                throw new PortabilityAnalyzerException(string.Format(CultureInfo.CurrentCulture, LocalizedStrings.MetadataParsingExceptionMessage, file.Name), exc);
            }
        }
Ejemplo n.º 3
0
            public Stream OpenRead()
            {
                if (!File.Exists(ILAssemblyPath))
                {
                    throw new FileNotFoundException("Could not find ilasm");
                }

                var ilPath = Path.GetTempFileName();

                using (var fs = File.OpenWrite(ilPath))
                {
                    using (var stream = _other.OpenRead())
                    {
                        stream.CopyTo(fs);
                    }
                }

                var psi = new ProcessStartInfo
                {
                    Arguments = $"{ilPath} /dll",
                    FileName  = ILAssemblyPath,
                    RedirectStandardOutput = true,
                    RedirectStandardError  = true,
                    UseShellExecute        = false
                };

                using (var process = Process.Start(psi))
                {
                    process.WaitForExit();

                    var stdout = process.StandardOutput.ReadToEnd();
                    var stderr = process.StandardError.ReadToEnd();

                    _output.WriteLine("ilasm stdout:");
                    _output.WriteLine(stdout);

                    _output.WriteLine("ilasm stderr:");
                    _output.WriteLine(stderr);

                    Assert.Equal(0, process.ExitCode);
                }

                File.Delete(ilPath);
                var dllPath = Path.ChangeExtension(ilPath, ".dll");

                Assert.True(File.Exists(dllPath));

                return(File.OpenRead(dllPath));
            }
        private IEnumerable<MemberDependency> GetDependencies(IAssemblyFile file)
        {
            try
            {
                using (var stream = file.OpenRead())
                using (var peFile = new PEReader(stream))
                {
                    var metadataReader = GetMetadataReader(peFile);

                    AddReferencedAssemblies(metadataReader);

                    var helper = new DependencyFinderEngineHelper(_assemblyFilter, metadataReader, file);
                    helper.ComputeData();

                    // Remember this assembly as a user assembly.
                    _userAssemblies.Add(helper.CallingAssembly);

                    return helper.MemberDependency;
                }
            }
            catch (Exception exc)
            {
                // InvalidPEAssemblyExceptions may be expected and indicative of a non-PE file
                if (exc is InvalidPEAssemblyException) throw;

                // Other exceptions are unexpected, though, and wil benefit from
                // more details on the scenario that hit them
                throw new PortabilityAnalyzerException(string.Format(LocalizedStrings.MetadataParsingExceptionMessage, file.Name), exc);
            }
        }