Inheritance: ISymbolWriterProvider
コード例 #1
0
ファイル: AssemblyBuilder.cs プロジェクト: yunjoker/Scut
 /// <summary>
 /// 
 /// </summary>
 /// <param name="assemblyPath"></param>
 /// <param name="currentPath"></param>
 /// <param name="savePath"></param>
 /// <returns></returns>
 public static bool BuildToFile(string assemblyPath, string currentPath, string savePath = null)
 {
     bool setSuccess = false;
     if (string.IsNullOrEmpty(savePath))
     {
         savePath = assemblyPath;
     }
     string pdbFile = Path.ChangeExtension(assemblyPath, "pdb");
     PdbReaderProvider readerProvider = null;
     PdbWriterProvider writerProvider = null;
     bool debug = false;
     if (File.Exists(pdbFile))
     {
         debug = true;
         readerProvider = new PdbReaderProvider();
         writerProvider = new PdbWriterProvider();
     }
     //huhu modify reason: Support for model debugging.
     var ass = AssemblyDefinition.ReadAssembly(assemblyPath, new ReaderParameters
     {
         SymbolReaderProvider = readerProvider,
         ReadSymbols = debug
     });
     BaseAssemblyResolver resolver = ass.MainModule.AssemblyResolver as BaseAssemblyResolver;
     if (resolver != null)
     {
         resolver.AddSearchDirectory(currentPath);
     }
     var types = ass.MainModule.Types.Where(p => !p.IsEnum).ToList();
     foreach (TypeDefinition type in types)
     {
         setSuccess = ProcessEntityType(type, setSuccess, currentPath);
     }
     //modify reason: no model.
     ass.Write(savePath, new WriterParameters
     {
         SymbolWriterProvider = writerProvider,
         WriteSymbols = debug
     });
     return true;
 }
コード例 #2
0
ファイル: AssemblyBuilder.cs プロジェクト: yunjoker/Scut
        /// <summary>
        /// 
        /// </summary>
        /// <param name="assemblyPath"></param>
        /// <param name="outputAssembly"></param>
        /// <returns></returns>
        public static bool BuildToStream(string assemblyPath, out Stream outputAssembly)
        {
            bool setSuccess = false;
            string currentPath = Path.GetDirectoryName(assemblyPath);
            outputAssembly = new MemoryStream();
            using (Stream stream = ReadAssembly(assemblyPath))
            {
                string pdbFile = Path.ChangeExtension(assemblyPath, "pdb");
                PdbReaderProvider readerProvider = null;
                PdbWriterProvider writerProvider = null;
                bool debug = false;
                if (File.Exists(pdbFile))
                {
                    debug = true;
                    readerProvider = new PdbReaderProvider();
                    writerProvider = new PdbWriterProvider();
                }

                var ass = AssemblyDefinition.ReadAssembly(stream, new ReaderParameters
                {
                    SymbolReaderProvider = readerProvider,
                    ReadSymbols = debug
                });
                var types = ass.MainModule.Types.Where(p => !p.IsEnum).ToList();
                foreach (TypeDefinition type in types)
                {
                    setSuccess = ProcessEntityType(type, setSuccess, currentPath);
                }
                if (setSuccess)
                {
                    ass.Write(outputAssembly, new WriterParameters
                    {
                        SymbolWriterProvider = writerProvider,
                        WriteSymbols = debug
                    });
                    return true;
                }
            }
            return false;
        }