随笔分类 - .NET Solution
.NET Solution
摘要:经常遇到一些好的.NET项目开放源代码之后,便很少更新。即使是大名鼎鼎的CodeProject中的文章中的代码项目,遇到问题时,留言或是主动给作者发邮件,都像石沉大海一样,得不到回复或解决,只好自力更生。 Codeplex中的项目,更新的速度就更慢了。从First release算起,三个月之外,就很少有更新了。我指的项目不是指官方的一些项目,驻留在这里。比如SQL Server的Sample ...
阅读全文
摘要:CLR自带的反射机智和API可以很轻松的读取.NET程序集信息,但是不能对程序集进行修改。CLR提供的是只读的API,但是开源项目Mono.Cecil不仅仅可以读取.NET程序集的元数据,还可以进行修改。1 读取程序集的版本信息CLR定义的对象模型是以程序集为编译和部署单元。一个程序集下面可以有多个模块,模块下面再包含类型,类型中定义方法,属性和事件等。直接传入一个完整的字符串表示的程序集,MONO可以解析它的基本信息:var name = AssemblyNameReference.Parse ("Foo, version=2.0.0.0, culture=fr-FR")
阅读全文
摘要:首先是一个PPT文档,从宏观层面展示Enterprise Soltion的几个功能特色。 Enterprise Solution解决方案安装与配置 将源代码解决方案和演示程序在电脑中进行配置,作为了解Enterprise Solution框架的起点。 框架开发手册 详细介绍Enterprise So
阅读全文
摘要:最近阅读了一套ERP开发框架的源代码,对开发框架的理解又深入一层,也为其将知识点运用的如此灵活而自叹不如。 郎咸平教授说,国际金融炒家对国际金融知识的理解与运用程序,是不可想像的。1997年的亚洲金融危机,国际金融炒家对香港的攻击是卖空港币,但是最后却反应到股票市场,惨败。同理,开发高手将系统的知识点,运用的相当灵活,你完全没有想过可以按这种方式做出程序,灵活简便,维护方便。 1 .NET组...
阅读全文
摘要:整理一下自己经常用到的几个扩展方法,在实际项目中确实好用,节省了不少的工作量。 1 匿名对象转化 在WinForm中,如果涉及较长时间的操作,我们一般会用一个BackgroundWorker来做封装长时间的操作,给它传递一个类型参数。var parm = new { UserId = txtUserId.Text, UserText = txtText.Text, TabIndex = tabCo...
阅读全文
摘要:关于字符串的研究,目前已经有两篇。 原理篇:字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串 实践篇:字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略 今天来讲第三篇,如何应用上面所学内容,设计一个字符串混淆程序。 先设计一个控制台程序,它是将要被我混淆的程序集文件: public static void Main(){ try ...
阅读全文
摘要:代码注入在C++时代很流行,主要是对现有的程序做一些修改,以达到预期的目的。一部分的破解程序,注册机也是借助于此方法,让被注入的程序绕过验证,达到破解的目录。在.NET中,借助于Mono.Cecil程序集,注入代码也相当容易。请看下面的代码,将要被注入的程序: using System;namespace Victim{ class Program { static v...
阅读全文
摘要:因为手头需要使用一个第三方类库,网络上又找不到它的可用的版本,于是只好自己动手。这个类库使用了Dotfuscator 加密,用.NET Reflector加载程序集, 看到的字符串是乱码,如下面的代码例子所示: internal class Program{ // Methods private static void Main(string[] args) { ...
阅读全文
摘要:Visual Studio提供的Dotfuscator保护程序,可以对用户代码中包含的字符串进行加密。比如下面的例子,为了找到这个程序的注册算法,用.NET Reflector加载程序集后,发现代码中的字符串,都变成这种形式的:Assembly executingAssembly = Assembly.GetExecutingAssembly();ArrayList list = new Arra...
阅读全文
摘要:最近一段时间不忙,闲下来的空闲时间,重读了一下CLR的原理,回味一下有关程序集的的知识,顺便练了一下手,学习致用,破解了若干个.NET平台的软件。以此来反观.NET程序开发中,需要注意的一些问题。 基本原理 .NET平台的编译格式是依靠MSIL中间语言,运行时即时编译(JIT)成CPU指令,对Win 32 的PE格式进行了扩展。程序集是自描述的,本身蕴藏了丰富的元数据信息。MSDN中有一段代码...
阅读全文
摘要:自从掌握了单元测试的要领之后,经常写测试,做测试,也非常喜欢做单元测试。我的文章《数据采集:完美下载淘宝Ip数据库 简单的程序节省60元人民币而不必购买数据库》中的代码,也是个测试方法,源代码在QQ群中公布过。 现在把它公开给大家,分享这个Ip地址信息下载功能的测试代码: [TestMethod]public void IPLibraryTest() { string w...
阅读全文
摘要:今天是个特别的日子。上证指数从2200点左右跌到1800多点,中午之后回升到2100来点,最后收盘的时候还是跌破1900点。只要还是低于2000点,十年间的股票市场相当没有发展。地产股和银行股首当其冲,基本上全是跌停。 于是有著名的学者爆出,银行缺钱投资实体经济,需要增加流通中的货币供应量。每天5亿的利润额,我想你不会相信银行真的缺钱。有良知的经济学家分析说,银行在过去把大量的资金用到金融理财产...
阅读全文
摘要:做技术经常要查询资料,也有保存收藏资料的习惯。 博客园是个好地方,资料的质量比较高,整体关注某一个系列的资料,从这边入手会比较好。我自己也经常写博客,收集有用的技术资料。在前年,我设计了一套Data Solution解决方案,后来因多方原因搁浅,没有深入下去。具体内容请参考相关连接,地址是http://www.cnblogs.com/JamesLi2015/archive/2011/11.html。Data Solution中有一个重要的组件是爬虫。从博客园中抓取文章到本地文件,可以保存为DOC,PDF,XPS,EPUB等多种格式。最近在群(QQ群: 1637 21037) 里面有需求是要备份
阅读全文
摘要:在做查询时,经常遇到一类需求。请看下面的SQL语句查询 SELECT * FROM CompanyWHERE CompanyCode='Kingston' AND Suspended='N' AND DbServer='James\SQLEXPRESS'这里有三个条件,在界面中,也就是我们需要增加三个控件来供用户输入值,再拼接成SQL发送到服务器。再来看一下界面中的情况,根据客户名称,下单日期...
阅读全文
摘要:1 读取操作系统和CLR的版本OperatingSystem os = System.Environment.OSVersion;Console.WriteLine(“Platform: {0}”, os.Platform);Console.WriteLine(“Service Pack: {0}”, os.ServicePack);Console.WriteLine(“Version: {0}”, os.Version);Console.WriteLine(“VersionString: {0}”, os.VersionString);Console.WriteLine(“CLR Versi
阅读全文
摘要:著名的NUnit是单元测试的优秀工具,但是要在一个测试方法中启动GUI程序,比如Windows Form界面,这比较难做到。NUnitForms就是为解决这个问题产生的,它是NUnit的一个扩展程序,可用于测试Windows Forms 类型的程序。 首先从NUnitForm网站下载安装程序,地址是 http://nunitforms.sourceforge.net/index.html,并执行...
阅读全文
摘要:曾经做网站类型的程序时,经常需要收集客户端的访问数据,然后加以分析。这需要一个Ip数据库,数据表中显示Ip所在的省份市区等信息。网络上有流传的Ip纯真数据库,一些公开的Web服务也可以查询Ip地址信息,但是24小时内超过查询次数就需要购买商业授权,网站myds.net上提供了Ip数据库下载,不过需要收取60元人民币。 最后一种方法,也就是不花钱的办法,用C#调用淘宝的Ip地址库,准确率高,而且查...
阅读全文
摘要:数据库中设计的表结构,它的定义如下 CREATE TABLE dbo.ADUSER( RECNUM DECIMAL (28) IDENTITY NOT NULL, USERID NVARCHAR (10) CONSTRAINT DF__ADUSER__USERID__13F1F5EB DEFAULT ('') NOT NULL, USER_NAME NVARCH...
阅读全文
摘要:程序中中的注释,一般是有益处的,可以知晓程序的一些逻辑说明,或是参数解释。但是有些程序,因为注释太多,反而引起维护上的不方便,删掉了怕以后不能出现问题不好查找原因,不删除留在代码中,对程序的维护人员,是一种痛苦。以下列举我可以理解的的原因,供分析参考。1 方法调用移动到新的类型中,原方法仍然保留在原来的类型中//public void ExecuteSqlCommand(string sqlCommandText)//{ //this.ExecuteSqlCommand(sqlCommandText, CommandType.Text, null);//}......Execute...
阅读全文
摘要:最近重构一套代码,运用以下几种方法,供参考。1 公共方法尽可能的使用缓存 public static List<string> GetRegisteredCompany() { String sql = "SELECT CompanyCode FROM dbo.Company WHERE Suspended='N' ORDER BY CompanyCode"; DataTable table = SqlHelper.ExecuteDataset(BaseCommon.GetSystemConnectionStringBuilder()....
阅读全文