• .net Framework框架源码下载及整理


          .Net源码老早就和和Vs2008一起开源出来了,但是却只能调试的时候使用。后来有个工具可以一起下载,但是下下来的貌似不全,也好多错误。

          刚刚发现一个地址:http://referencesource.microsoft.com/netframework.aspx,貌似还很早就有这个了,竟让一直都不知道。就下载了一个 里面有很多版本8.0好像就是.net 3.5sp1,4就是.net4。现在是100来M的msi安装包,解压后600多M,其中一半是pdb文件。源码有200多M吧。不过看一下这路径,他丫不就远程调试那个包吗,呃,不说啥,将就整理下吧。

          没办法自己整理吧,写了个小程序,递归遍历所有的文件,读取文件内容,按照namespce的结构重建目录:

    具体实现如下:

            static string OrginFolderPath = @"F:\Source\NetFramework\3.5\Source";
            static string TargetFolderPath = @"F:\Net3.5\";
            static int flag = 1;
            static void Main(string[] args)
            {
                DirectoryInfo donetFrameworkDirectry = new DirectoryInfo(OrginFolderPath);
                ReCollectionFrameworkFiles(donetFrameworkDirectry);
                Console.WriteLine("End of collection~~~~~");
                Console.ReadLine(); 
            }
            static void ReCollectionFrameworkFiles(DirectoryInfo directory)
            {
                foreach (FileSystemInfo f in directory.GetFileSystemInfos())
                {
                    if (f is FileInfo)
                    {
                        string newPath = RemoveFolderByNameSpace((FileInfo)f);
                        //Console.WriteLine(newPath);
                        if (!string.IsNullOrEmpty(newPath))
                        {
                            string foldername = TargetFolderPath + newPath;
                            if (!Directory.Exists(foldername))
                            {
                                Directory.CreateDirectory(foldername);
                            }
                            string fileFullName = foldername + f.Name;
                            if (File.Exists(fileFullName))
                            {
                                fileFullName = Path.ChangeExtension(fileFullName, "cs" + flag.ToString());
                                //show conflict files
                                Console.WriteLine("Conflict orgin:" + f.FullName + "\t targer:" + fileFullName);
                                flag++;
                            }
                            File.Copy(f.FullName, fileFullName);
                            // Console.WriteLine(f.FullName);
                        }
                        else
                        { 
                        //not find the namespace
                          //  Console.WriteLine(f.FullName);
                            File.AppendAllText(@"F:\log.txt", f.FullName+"\r\n");
                        }
                    }
                    else
                    {
                        ReCollectionFrameworkFiles((DirectoryInfo)f);
                    }
                }
            }
            static string RemoveFolderByNameSpace(FileInfo file)
            {
                if (file.Name.EndsWith(".cs"))
                {
                    string codeInfo = file.OpenText().ReadToEnd();
                    Regex reg = new Regex(@"^[ ]*namespace[ ]+(?<namespace>[\w\.]+)",RegexOptions.Multiline);
                    var temp = reg.Match(codeInfo).Groups;
                    //Console.WriteLine(temp["namespace"]);
                    if (temp != null && temp.Count > 1)
                    {
                        string strnamespace = temp[1].Value;
                        return GenerationFolderPath(strnamespace);
                    }
                }
                return null;
            }
            static string GenerationFolderPath(string strnamespace)
            {
                string[] strs = strnamespace.Split(new char[] { '.' });
                string folder = string.Empty;
                foreach (var s in strs)
                {
                    folder += s + @"\";
                }
                return folder;
            }

         前两个可以设置你的源目录和目的目录,一两分钟就可以完成重新计算目录结构。我统计了一下,大概还是有150来个重复的文件,都是被修改后缀放在对应的目录下。还有一些是没有namespace的都写入了日志文件,不多。

          这样整理之后System下就有比较完整的源码了,200多M应该会很全,看了一下注释还是很全。通过vs的从目录创建项目经过漫长的过程,建立项目文件,又编译好久竟然蹦出几千个错误。神啊,这不是玩我啊,接口定义全没,有些类也没有,微软这也叫开源啊~~主要是很多的类都重复了,还有150个同名的类~~嗷,只是看看而已,没法编译也没关系。

  • 相关阅读:
    dbcp 详细配置
    InetAddress
    Qrcode 二维码
    左值右值分析
    javaweb reponse 写出文件
    ehcache 在集群环境下 出现 Cause was not due to an IOException or NotBoundException
    lo4j 日志级别
    log4j xml配置
    cron 表达式
    RabbitMQ简介
  • 原文地址:https://www.cnblogs.com/lulu/p/1805739.html
Copyright © 2020-2023  润新知