算是和ILSpy干上了。

目前做了两步:

1) 能保存xaml了;

2)能批量保存了;

但是,工程文件没有改变,所以,装载项目后,那些xaml和cs文件,各在各的地方。难用极了。

每天都提醒自己是中国人,象现在学习的这个项目,人家国外是几十人,三年多来做到这个样子。这里呢,现在就一个人,一个月。

所以,只能学习。而且,要付出巨大的努力。

还是要工具。工具不好使,还得改。

今天状态奇差,所以不得不加班才改完,上午来,调试了一会,竟然睡着了。满腹愁肠瞌睡多啊。

不过,也说明c#相比较c,调试时压力的确小一些。

说正事。

第一件事,就是找在哪里下手。

由于ILSpy也是本周刚接触,TMD找好一个多小时,而最可气的,那代码就在我看的那个函数的上面停了一个多小时。

不过,找到了:

就在:ILSpy\Languages\CSharpLanguage.cs

中的WriteProjectFile中

这个函数挺老长。

就不废话了。只把改过的部分传上来:

在这段后面:

             w.WriteStartElement("ItemGroup"); // Referencesforeach (AssemblyNameReference r in module.AssemblyReferences) {if (r.Name != "mscorlib") {w.WriteStartElement("Reference");w.WriteAttributeString("Include", r.Name);w.WriteEndElement();}}w.WriteEndElement(); // </ItemGroup> (References)

改成这个样子:

             foreach (IGrouping<string, string> gr in (from f in files group f.Item2 by f.Item1 into g orderby g.Key select g)) {w.WriteStartElement("ItemGroup");bool isCsfile = false;if (gr.Key.Equals("Compile")){isCsfile = true;}foreach (string file in gr.OrderBy(f => f, StringComparer.OrdinalIgnoreCase)) {w.WriteStartElement(gr.Key);string strXamlFileName = "";string xamlPath= "";if (isCsfile && findXamlAddBy_haoyujie(files, file,ref strXamlFileName,ref  xamlPath) ){// 列表中的原始文件全路径名string oldStr = Path.Combine(options.SaveAsProjectDirectory, file);// 新文件名,无扩展名 string newCsfilePath = xamlPath + Path.GetFileNameWithoutExtension(file);//加上新的扩展名string purcsFilename = newCsfilePath + ".xaml.cs";//改名方法{string newStr = Path.Combine(options.SaveAsProjectDirectory, purcsFilename);FileInfo fi = new FileInfo(oldStr);if (File.Exists(newStr)){File.Delete(newStr);}fi.MoveTo(newStr);}{//把xaml文件名字,大小写改得与cs文件一样//string newStrXaml = Path.Combine(options.SaveAsProjectDirectory, xamlPath + strXamlFileName) + ".xaml";改名方法//FileInfo fiXaml = new FileInfo(newStrXaml);//string tmpFile = newStrXaml + "555";//if (File.Exists(tmpFile))//{//    File.Delete(tmpFile);//}//fiXaml.MoveTo(Path.Combine(tmpFile));改名方法//FileInfo fiXaml2 = new FileInfo(tmpFile);//fiXaml2.MoveTo(Path.Combine(newStrXaml));//File.Delete(tmpFile);}w.WriteAttributeString("Include", purcsFilename);w.WriteStartElement("DependentUpon");w.WriteString(strXamlFileName + ".xaml");w.WriteEndElement();w.WriteStartElement("SubType");w.WriteString("Code");w.WriteEndElement();strXamlFileName = "";xamlPath = "";}else{w.WriteAttributeString("Include", file);}w.WriteEndElement();}w.WriteEndElement();}

注意,上面的函数,参数是被改过的:

加了一个options, 原因是我们需要知道用户选择的保存目录。

void WriteProjectFile(TextWriter writer, IEnumerable<Tuple<string, string>> files, ModuleDefinition module, DecompilationOptions options)

加了两个自定义函数

        //得到一个路径+文件名中的路径部分,因为系统自带的函数中,没有找到static public string GetFolderWithX(string strCur){string xamlPath = "";if (strCur.IndexOf(@"\") > 0) //如果xaml有目录{xamlPath = strCur.Substring(0, strCur.LastIndexOf(@"\") + 1);}else if (strCur.IndexOf(@"/") > 0) //如果xaml有目录{xamlPath = strCur.Substring(0, strCur.LastIndexOf(@"/") + 1);}else{xamlPath = "";}return xamlPath;}/// <summary>/// /// </summary>/// <param name="files"></param>/// <param name="strcsFileName">当前需进行判断的cs文件</param>/// <param name="strXamlFileName">新的xaml的名称,因为要改大小写</param>/// <param name="xamlPath">新的xaml的路径</param>/// <returns></returns>bool findXamlAddBy_haoyujie( IEnumerable<Tuple<string, string>> files,string strcsFileName,ref string strXamlFileName,ref string xamlPath){foreach (IGrouping<string, string> gr in (from f in files group f.Item2 by f.Item1 into g orderby g.Key select g)){string strGroupName = gr.Key;   //得到分组if (strGroupName.Equals("Page"))    //得到xaml那个组{foreach (string fileXaml in gr.OrderBy(f => f, StringComparer.OrdinalIgnoreCase)){                        string purXamlFilename = Path.GetFileNameWithoutExtension(fileXaml);string tmpCSFilepath = Path.GetFileNameWithoutExtension(strcsFileName);如果在c#文件路径中,有strCur,则返回真                       if (tmpCSFilepath.Equals(purXamlFilename, StringComparison.OrdinalIgnoreCase)){//这里是唯一的改变,也就是说,xaml的名字,从cs 路径中得到strcsFileNamestrXamlFileName = Path.GetFileNameWithoutExtension(strcsFileName);xamlPath = GetFolderWithX(fileXaml);return true;}}}}return false;}

今天脑子极其混乱,周四了,连上5天班了,也能理解。而且,这个破地方,在反编译完所有的文件之后,大大提高了调试的难度。直到建了一个小工程,在那个小工程里调完,才算是今天能做完。

代码和可执行文件,以后再传上来。

要回家了。有一段代码被我注掉了,不太对路。因为xaml文件的名字,原本想改成与cs文件一样的骆驼式。现在应当是对了。但以后再调吧。

今天这断代码改的,没什么水准。应当用xaml的组进行遍历,好象搞反了,当然,也能用,唯一的问题,在.csproj中,没的把xaml的文件改成骆驼式,不太美观,也不耽误用。

但这个ILSpy的确不是当前本人工作的重点,明天还得接着看解出来的信息,向老外学习吧。

可执行文件

代码

ILSpy中baml转化为xaml的改进(三)相关推荐

  1. ILSpy中baml转化为xaml的改进(五)

    进一步分析BAML解析器. 因为还需要维护公司的CRM2011系统,两天没有进行这方面工作. 面对着巨量的数据,解开BAML这把锁对我目前的工作,至关重要.没有什么别的选择. 虽然前面用ILSpy,已 ...

  2. ILSpy中baml转化为xaml的改进(二)

    前一篇中,只是对单一文件保存,进行了改进. 但在反编译时,还要一个一个的处理. 面对海量的代码,更需要一个能将所有的保存的工具.磨刀不误砍柴工,再改进一下工具. 首先找到在: ILSpy\Langua ...

  3. ILSpy中baml转化为xaml的改进(四)

    周一上班接着补充. 这些天状态的确低迷.上午对着电脑发了好一会呆.但活还是要干的. 上午的改进完了以后,面对一些小问题. 1.如何自动在反编译后的工程中,加入引用路径. 2. 在资源文件中,如果用到了 ...

  4. ILSpy中baml转化为xaml的改进

    这些天,正在学习.Net的框架. 找到一个较大的工程,反编译来学习. 这个框架用到了当前所有能想到的东西,如prism,Infragistics公司的插件,如RIBBON,Layoutmgr,是基于W ...

  5. TypeScript算法专题 - blog3 - 对TypeScript链表实现中的一些问题总结与改进

    TypeScript算法专题 - [单链表3] 链表的合并 以及对TypeScript链表实现中的一些问题总结与改进 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 专题目 ...

  6. R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame)、添加标题、副标题

    R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame).添加标题.副标题. ...

  7. PDFPlumber使用入门+python实现PDF中表格转化为Excel的方法

    PDFPlumber使用入门:https://blog.csdn.net/weixin_48629601/article/details/107224376 python实现PDF中表格转化为Exce ...

  8. WPF中关于对前台Xaml中Triggers的一些重要思考。

    原文:WPF中关于对前台Xaml中Triggers的一些重要思考. 今天在做一个小Demo的时候碰到了一个比较奇怪的问题,就是其中一个Trigger始终无法执行,<Trigger Propert ...

  9. 推荐系统中的矩阵分解| 奇异值分解及改进、因子分解机

    网络中的信息量呈现指数式增长,随之带来了信息过载问题.推荐系统是大数据时代下应运而生的产物,目前已广泛应用于电商.社交.短视频等领域.本文将针对推荐系统中基于隐语义模型的矩阵分解技术来进行讨论. 目录 ...

最新文章

  1. devexpress chart 柱形图
  2. 网站SEO优化值得收藏的技巧介绍
  3. 织梦网站翻页php,dedecms织梦网站列表页和内容页分页样式
  4. android 速度检测工具,IT之家学院:如何测试Android应用启动速度
  5. Spring AOP核心原理分析
  6. model Ensemble
  7. 使用 ext3grep 恢复数据试验成功 笔记
  8. php 保存错误日志,PHP中把错误日志保存在系统日志中_PHP教程
  9. socket.io实现客户端和服务端的双向通信
  10. 货币代码无法进行ALE通信
  11. eclipse字体大小怎么设置
  12. 如何生成希尔伯特矩阵
  13. 医院信息化建设历程(4)面向管理的全院级应用阶段
  14. android极光推送tag,Android极光推送设置别名和标签
  15. mysql按键精灵接口,mysql,按键精灵,读取写入
  16. pmp练习题及其答案
  17. 如果你不了解 python 的学习体系?来看看这篇博客吧 ,特邀嘴强擦哥做点评|Python技能树测评
  18. 汇编语言 贪吃蛇/鱼/变色/时间周期
  19. 经典好文!手把手教你写Android项目文档,小白也能看明白
  20. ReLU函数 Vs Sigmoid 函数——XOR问题究竟用那个好

热门文章

  1. Python--getattr、__getattr__、__getattribute__,倔强一下
  2. 17:Oriented R-CNN for Object Detection
  3. 2.3.2 HMC硬件管理终端
  4. 聪明的男人啊 多珍惜你身边的傻女人
  5. python计算题库_python练习题-
  6. SpringBoot笔记十四:消息队列
  7. java自定义函数式接口
  8. oracle number存储小数
  9. 深度学习之yolov5目标识别全过程记录(纯小白)
  10. java阿里云短信服务SDK使用方法