利用AssemblyResolve事件加载任意位置的程序集

随着项目规模的逐渐扩大,项目引用的dll也越来越多,这些dll默认情况下全部都需要放在跟主程序相同的目录下,dll一多,主程序的目录就会显得非常凌乱。那么有没有什么办法可以把dll放到其他目录下也能正确加载呢,答案是肯定的,就是利用AppDomain的AssemblyResolve事件。
继续阅读“利用AssemblyResolve事件加载任意位置的程序集”

[未找到反序列化“XXX”类型对象的构造函数。]的解决办法

出现[未找到反序列化“XXX”类型对象的构造函数。]错误一般是由于要反序列化的类或者它的父类(如:继承了Dictionary类)实现了ISerializable接口而该类没有定义序列化构造函数,这时候只要把序列化构造函数加上去就可以反序列化了。需要注意的是,一个类或者它的父类实现ISerializable接口就表示启用了自定义序列化,需要按照自定义序列化的规则编写序列化构造函数和GetObjectData函数,像下面的两个例子。

继续阅读“[未找到反序列化“XXX”类型对象的构造函数。]的解决办法”

使用ICSharpCode.SharpZipLib在现有Zip文件中添加文件的方法

ICSharpCode.SharpZipLib是一个操作压缩文件的类库。网上使用这个类库在Zip文件中添加文件的方法主要都是使用ZipOutputStream类在Zip中添加文件,可是使用这种方法有个很大的缺点,就是会把Zip文件原有的内容覆盖掉,只适合新建Zip文件。昨天需要把内存中的内容写到一个Zip文件中的一个文件里,所以研究了一下,发现ZipFile.Add方法可以满足这个需求,这个方法有8个重载,我用的是void Add(IStaticDataSource,string)这个重载。 继续阅读“使用ICSharpCode.SharpZipLib在现有Zip文件中添加文件的方法”

时区设置导致的奇怪问题

公司最近正在做一个项目,这个项目有一个服务端和若干个客户端。服务端主要负责根据客户端提供的参数从数据库查询数据放到DataTable里,然后把DataTable序列化后传给客户端。客户端负责把从服务器传送过来的数据显示出来。

今天做这个项目的时候遇到一个非常奇怪的问题:服务端从数据库里查出来的DateTime类型的数据在服务端是正常的,传到客户端后全部都多了8个小时;而如果由客户端直接查数据库的话,得出的结果是正确的。检查服务端和客户端的时区后发现服务端的时区设置于客户端的不一致,因此,.Net自作主张地把DateTime中保存的时间改了。后来把服务器与客户端的时区设置改成一样就恢复正常了。