使用Reflexil修改类库
因为公司一个项目需要修改PPS的颜色,于是反编译了PPS的代码发现,作者很不厚道的把所有着色都HardCode在代码里
private static void InsertDefaultSeriesColors(AnalyticChartTemplate template)
{
template.Add_CustomColor(Color.FromArgb(0, 0, 0, 0));
template.Add_CustomColor(Color.FromArgb(0xec, 0xc0, 80, 0x4d));
template.Add_CustomColor(Color.FromArgb(0xec, 0x9b, 0xbb, 0x59));
template.Add_CustomColor(Color.FromArgb(0xec, 0xdd, 0xd9, 0xc3));
template.Add_CustomColor(Color.FromArgb(0xec, 0x4b, 0xac, 0xc6));
template.Add_CustomColor(Color.FromArgb(0xec, 0xf7, 150, 70));
template.Add_CustomColor(Color.FromArgb(0xec, 0x93, 0x89, 0x53));
template.Add_CustomColor(Color.FromArgb(0xec, 0x8d, 0xb3, 0xe2));
template.Add_CustomColor(Color.FromArgb(0xec, 0xe5, 0xb9, 0xb7));
template.Add_CustomColor(Color.FromArgb(0xec, 0xd7, 0xe3, 0xbc));
template.Add_CustomColor(Color.FromArgb(0xec, 0xcc, 0xc1, 0xd9));
template.Add_CustomColor(Color.FromArgb(0xec, 0xb7, 0xdd, 0xe8));
template.Add_CustomColor(Color.FromArgb(0xec, 0xfb, 0xd5, 0xb5));
template.Add_CustomColor(Color.FromArgb(0xec, 0x80, 100, 0xa2));
template.Add_CustomColor(Color.FromArgb(0xec, 15, 0x24, 0x3e));
template.Add_CustomColor(Color.FromArgb(0xec, 0x63, 0x24, 0x23));
template.Add_CustomColor(Color.FromArgb(0xec, 0x4f, 0x61, 40));
template.Add_CustomColor(Color.FromArgb(0xec, 0x5f, 0x49, 0x7a));
template.Add_CustomColor(Color.FromArgb(0xec, 0x20, 0x58, 0x67));
template.Add_CustomColor(Color.FromArgb(0xec, 0x97, 0x48, 6));
template.Add_CustomColor(Color.FromArgb(0xec, 0x49, 0x44, 0x29));
}
在没有其它办法下,只好尝试修改PPS的类库,再加上原有签名重新部署一次。
网上找到Reflector的一个插件Reflexil,附上地址
http://reflexil.net/
这个插件能够直接在Reflctor下修改类库,并且保留原有签名, 原本就可以解决我所有问题,但是尝试过后,发现保存后的类库是延迟签名的, 什么延迟签名,可以参考下这链接http://msdn.microsoft.com/en-us/library/t07a3dye.aspx所以不能直接部署到GAC, 头疼花了接近一天的时间, 去寻找如何部署, 在快要绝望的时候, 意外的发现可以使用ilasm对类库再签名, 这就意味着我可以先使用ilasm进行反编译,再使用原有资源进行签名, 为了印证是否正确 ,写了如下指命
进入vs工具命令行ildasm C:\Microsoft.PerformancePoint.Scorecards.ServerRendering.Patched.dll /out:c:\Microsoft.PerformancePoint.Scorecards.ServerRendering.il
进入Microsoft.Net下frameworkilasm c:\Microsoft.PerformancePoint.Scorecards.ServerRendering.il /dll发现能够注册到GAC, 但是又发现了一个问题,传统GAC上根本看不到我注册的dll, 原来又是我粗心了, 使用了.net 4.0的ilasm , 使用到4.0的ilasm重编译的时候会编译成4.0的dll, 放的位置跟2.0的位置是不相同的, 于是使用2.0 ilasm重新试一遍, 大功造成 。在这做一个总结, 要修改原有类库并使用原有签名的步骤是1. 使用Reflexil进行修改,并保存为一个延迟签名的文件2. 使用对应版本的ilasm进行反编译再重编译
使用Reflexil修改类库的更多相关文章
- c#:Reflector+Reflexil 修改编译后的dll/exe文件
不知道大家有没有这样的经历:现场实施时测试出一个bug,明明知道某个dll/exe文件只要修改一二行代码即可,但手头没有开发环境,紧急情况下,可以用reflector + reflexil 临时直接修 ...
- .net reflector+reflexil修改编译后的dll文件
1.用reflector打开相关的dll文件. 2.如果reflector中没有reflexil插件,点击工具栏中的Tools->Add-Ins 3.找到需要修改的文件,双击打开该文件:点击To ...
- Android Studio 将工程作为第三方类库的步骤
一.将工程的module名称修改为自己要添加的类库名称 1.选中module文件夹右键到Rename项 2.选中Rename module项 3.修改为自己的名称,如VolleyLibary 二.修改 ...
- Resharper 修改命名空间
1. 使用Reshared 右键->Refactor->Rename 修改所有文件的命名空间(鼠标移动到对应类的命名空间) 2.修改类库中的命名空间 包括程序集信息 右键->属性 3 ...
- 在普通的"类库"项目中添加 WPF 的 Window 对象
最近开发一个 WPF 项目, 在此项目中有个类库工程, 在开发的过程中发现在类库工程中竟然添加不了 WPF 窗口对象和一些其他的 WPF 对象,在新建窗口中选 WPF 类型,只有一个 “用户控件(WP ...
- OpenLiveWriter代码插件
1.OpenLiveWriter安装 Windows Live Writer在2012年就停止了更新,Open Live Writer(以下简称OLW)是由Windows Live WriterWri ...
- 代码的坏味道(22)——不完美的库类(Incomplete Library Class)
坏味道--不完美的库类(Incomplete Library Class) 特征 当一个类库已经不能满足实际需要时,你就不得不改变这个库(如果这个库是只读的,那就没辙了). 问题原因 许多编程技术都建 ...
- 【无私分享:ASP.NET CORE 项目实战(第四章)】Code First 创建数据库和数据表
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来介绍下Asp.net Core 使用 CodeFirst 创建数据库和表,通过 控制台 和 dotnet ef 两种 ...
- [.NET逆向] 破解NET的四大神器
原本这篇文章可以更早一星期写出来与大家分享,由于某方面的原因耽搁到现在,心里竟有那么一点好像对不住大家的感觉.这当然与神器有关,因为我发现利用这四大神器我似乎觉得几乎所有的NET程序破解都不在话下了 ...
随机推荐
- QPaintDevice: Cannot destroy paint device that is being painted
在paintEvent中,使用QPainter * 绘制图像出现此问题.解决: 1.改为不使用QPainter指针. 2.添上begin(), end() QPainter * painter = n ...
- XPS 15 9530使用Windows10频繁发生Intel HD Graphics 4600驱动奔溃的一种解决方法
本人使用XPS 15 9530.集成显卡为Intel HD Graphics 4600.操作系统Windows 10 Pro,使用过程当中经常会发生集成显卡奔溃的问题,错误提示如下: Display ...
- Java知多少(110)数据库之插入记录
插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...
- GNU GCC 扩展属性
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html constructor destructor constructor (prior ...
- EPANET中读取INPUT文件的函数文件——INPUT1.C/INPUT2.C/INPUT3.C
首先介绍下这3个文件的关系:可以说INPUT1.C的函数粒度最大,它的函数getdata()就完成了整个INPUT文件数据的读入,该函数又调用了INPUT2.C中的部分函数,INPUT2.C文件中的函 ...
- Week4 结对编程
1.照片 1.1 结对编程参与者:李文涛.黎柏文 1.2 展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...
- [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务
除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...
- 基于DevExpress开发的GridView如何实现一列显示不同的控件类型
在很多DevExpress的使用例子里面,我们可以看到,基于GridView实现的不同控件展示的时候,每一列的控件类型都是一样的,如果我要某一列的一行让用户可以从下列列表选择选项,而其他行不可选择,那 ...
- Ext.GridPanel 用法总结(一)—— Grid基本用法
Ext.GridPanel 用法总结(一)—— Grid基本用法 摘自:http://www.cnblogs.com/luluping/archive/2009/08/01/1536645.html ...