public int Execute()
        {
            if (!_symbolsFile.ExistsFile)
            {
                Console.Error.WriteLine("PDB file {0} does not exist.", _symbolsFile);
                return(1);
            }

            if (!_sourceDescriptorFile.ExistsFile)
            {
                Console.Error.WriteLine("Source descriptor file {0} does not exist.", _sourceDescriptorFile);
                return(1);
            }

            try
            {
                DebugInfoType debugInfoType;
                if (!PdbUtils.TryGetPdbType(_symbolsFile, out debugInfoType))
                {
                    throw new Exception("Invalid PDB file " + _symbolsFile);
                }

                if (debugInfoType != DebugInfoType.Portable)
                {
                    throw new Exception(string.Format("Cannot update PDB file ${0}. PDB Type {1} is not supported",
                                                      _symbolsFile, debugInfoType));
                }

                var sourceDescriptor = ReadSourceDescriptor(_sourceDescriptorFile);
                if (sourceDescriptor.Documents == null)
                {
                    throw new Exception(string.Format("Source Link file ${0} is empty", _sourceDescriptorFile));
                }

                var symbolsFile = _symbolsFile.AddSuffix(".original");
                _symbolsFile.MoveFile(symbolsFile, true);

                if (!PortablePdbModifier.AddSourceLink(symbolsFile, _sourceDescriptorFile, _symbolsFile))
                {
                    throw new Exception(string.Format("Cannot update PDB file ${0}. Internal error", symbolsFile));
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Unable to update PDF file {0}: {1} ", _symbolsFile, e.Message);
                return(1);
            }

            return(0);
        }