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); } }
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); } }