public void CanFindAndLoadProviderForPdbFile()
        {
            var commandLine  = new Mock <ICommandLine>();
            var assemblyPath = typeof(IMocked).Assembly.Location;

            foreach (var symbolFile in _symbolFileHelper.GetSymbolFileLocations(assemblyPath, commandLine.Object))
            {
                Assert.NotNull(symbolFile);
                Assert.IsTrue(symbolFile.EndsWith(".pdb", StringComparison.InvariantCultureIgnoreCase));
            }
        }
        private AssemblyDefinition SearchForSymbolsAndLoad()
        {
            AssemblyDefinition sourceAssembly = null;
            var provider = new DefaultSymbolReaderProvider(true);

            try
            {
                sourceAssembly = AssemblyDefinition.ReadAssembly(ModulePath);
                if (sourceAssembly != null)
                {
                    var symbolReader = provider
                                       .GetSymbolReader(sourceAssembly.MainModule, sourceAssembly.MainModule.FileName);
                    if (symbolReader != null)
                    {
                        sourceAssembly.MainModule.ReadSymbols(symbolReader);
                        if (sourceAssembly.MainModule.HasSymbols)
                        {
                            return(sourceAssembly);
                        }
                    }
                }
            }
            catch (Exception)
            {
            }

            foreach (var symbolFile in _symbolFileHelper.GetSymbolFileLocations(ModulePath, _commandLine))
            {
                try
                {
                    using (var stream = System.IO.File.Open(symbolFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                    {
                        var parameters = new ReaderParameters
                        {
                            SymbolReaderProvider         = provider,
                            ReadingMode                  = ReadingMode.Immediate,
                            ReadSymbols                  = true,
                            SymbolStream                 = stream,
                            ThrowIfSymbolsAreNotMatching = true
                        };
                        sourceAssembly = AssemblyDefinition.ReadAssembly(ModulePath, parameters);
                        if (sourceAssembly.MainModule.HasSymbols)
                        {
                            return(sourceAssembly);
                        }
                    }
                }
                catch (Exception)
                {
                }
            }

            return(null);
        }