因为公司一个项目需要修改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下framework
ilasm 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修改类库的更多相关文章

  1. c#:Reflector+Reflexil 修改编译后的dll/exe文件

    不知道大家有没有这样的经历:现场实施时测试出一个bug,明明知道某个dll/exe文件只要修改一二行代码即可,但手头没有开发环境,紧急情况下,可以用reflector + reflexil 临时直接修 ...

  2. .net reflector+reflexil修改编译后的dll文件

    1.用reflector打开相关的dll文件. 2.如果reflector中没有reflexil插件,点击工具栏中的Tools->Add-Ins 3.找到需要修改的文件,双击打开该文件:点击To ...

  3. Android Studio 将工程作为第三方类库的步骤

    一.将工程的module名称修改为自己要添加的类库名称 1.选中module文件夹右键到Rename项 2.选中Rename module项 3.修改为自己的名称,如VolleyLibary 二.修改 ...

  4. Resharper 修改命名空间

    1. 使用Reshared 右键->Refactor->Rename 修改所有文件的命名空间(鼠标移动到对应类的命名空间) 2.修改类库中的命名空间 包括程序集信息 右键->属性 3 ...

  5. 在普通的"类库"项目中添加 WPF 的 Window 对象

    最近开发一个 WPF 项目, 在此项目中有个类库工程, 在开发的过程中发现在类库工程中竟然添加不了 WPF 窗口对象和一些其他的 WPF 对象,在新建窗口中选 WPF 类型,只有一个 “用户控件(WP ...

  6. OpenLiveWriter代码插件

    1.OpenLiveWriter安装 Windows Live Writer在2012年就停止了更新,Open Live Writer(以下简称OLW)是由Windows Live WriterWri ...

  7. 代码的坏味道(22)——不完美的库类(Incomplete Library Class)

    坏味道--不完美的库类(Incomplete Library Class) 特征 当一个类库已经不能满足实际需要时,你就不得不改变这个库(如果这个库是只读的,那就没辙了). 问题原因 许多编程技术都建 ...

  8. 【无私分享:ASP.NET CORE 项目实战(第四章)】Code First 创建数据库和数据表

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来介绍下Asp.net Core 使用 CodeFirst 创建数据库和表,通过 控制台 和 dotnet ef 两种 ...

  9. [.NET逆向] 破解NET的四大神器

     原本这篇文章可以更早一星期写出来与大家分享,由于某方面的原因耽搁到现在,心里竟有那么一点好像对不住大家的感觉.这当然与神器有关,因为我发现利用这四大神器我似乎觉得几乎所有的NET程序破解都不在话下了 ...

随机推荐

  1. QPaintDevice: Cannot destroy paint device that is being painted

    在paintEvent中,使用QPainter * 绘制图像出现此问题.解决: 1.改为不使用QPainter指针. 2.添上begin(), end() QPainter * painter = n ...

  2. XPS 15 9530使用Windows10频繁发生Intel HD Graphics 4600驱动奔溃的一种解决方法

    本人使用XPS 15 9530.集成显卡为Intel HD Graphics 4600.操作系统Windows 10 Pro,使用过程当中经常会发生集成显卡奔溃的问题,错误提示如下: Display ...

  3. Java知多少(110)数据库之插入记录

    插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...

  4. SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码

    在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...

  5. GNU GCC 扩展属性

    http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html constructor destructor constructor (prior ...

  6. EPANET中读取INPUT文件的函数文件——INPUT1.C/INPUT2.C/INPUT3.C

    首先介绍下这3个文件的关系:可以说INPUT1.C的函数粒度最大,它的函数getdata()就完成了整个INPUT文件数据的读入,该函数又调用了INPUT2.C中的部分函数,INPUT2.C文件中的函 ...

  7. Week4 结对编程

    1.照片 1.1  结对编程参与者:李文涛.黎柏文 1.2  展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...

  8. [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务

    除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...

  9. 基于DevExpress开发的GridView如何实现一列显示不同的控件类型

    在很多DevExpress的使用例子里面,我们可以看到,基于GridView实现的不同控件展示的时候,每一列的控件类型都是一样的,如果我要某一列的一行让用户可以从下列列表选择选项,而其他行不可选择,那 ...

  10. Ext.GridPanel 用法总结(一)—— Grid基本用法

    Ext.GridPanel 用法总结(一)—— Grid基本用法 摘自:http://www.cnblogs.com/luluping/archive/2009/08/01/1536645.html ...