zoukankan      html  css  js  c++  java
  • .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个同名的类~~嗷,只是看看而已,没法编译也没关系。

  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/lulu/p/1805739.html
Copyright © 2011-2022 走看看