在.net中使用GAC

GAC

GAC是什么?是用来干嘛的?GAC的全称叫做全局程序集缓存,通俗的理解就是存放各种.net平台下面需要使用的dll的地方。GAC的具体目录在windows/ assembly。

喜欢使用破解软件的朋友可能会经常使用替换DLL这招,这个DLL虽然和.net下面的DLL有所不同,但大致起的作用还是一样的:使用共同的动态链接库来提高库复用 ,减少文件体积。在.net平台之前,程序们都把可能用到的公共DLL存放到system32文件夹下。由于版本的不一致及其他原因(将控制信息存放到注册表),造成 了很有名的DLL Hell

最近在读俞甲子的《程序员的自我修养》,中间花了很大的篇幅描述程序编译中 的链接这个过程。而比较巧合的是,我的《C#与.NET 3.5高级程序设计》也正好读到程序集这一块。微软使用了GAC来避免DLL重蹈覆辙。现在,我就来部署一个简单的通用类库到GAC中。

获取强名称(签名)

并不是随便一个DLL都可以放到GAC中,如果这样的话,和之前的DLL Hell也没什么区别了。GAC使用一个强名称(签名)的方式来区分不同的DLL。每个签名 都是独一无二的公钥私钥对。现在我们使用SDK的sn工具为我的DUtil库生成一个snk签名 ...

more ...

正则表达式抓捕替换

问题情境

需要将RDL报表里的GetComment( Parameters!F0001.Value , Parameters!F0002.Value ,"total", Parameters!Language.Value)函数修改为GetCommentForComment( Parameters!F0001.Value , Parameters!F0002.Value ,"total", Parameters!Language.Value, "ReportConnection0107")。

思路

使用正则表达式里面的分组进行抓获,再用1将中间固定的参数取出,组成新的字符串。

Vim实现

%s/GetComment(((sw+!w+.w+s,){2}s"w+"s,sw+!w+.w+s))/GetCommentForReport(1 , "ReportConnection0107")/gc&nbsp_place_holder ...

more ...

男人袜1元体验活动

从Louis Han那里看到一篇文章介绍了一个适合宅男的网站,想想我自己宅属性日益增加,就抄文推广一下。

-Update 20110113

收到男人袜客服的来信,说我文章"我们发现您的文章基本上是引用的网站内容,建议您用自己的文字来评价一下我们的网站或服务。",我郁闷了一下,回了一封信说我还没体 验到,怎么来评价。何况下面文章那些文字虽然是Louis Han整理发文,但源头其实来自男人袜网站的介绍内容。

怪就怪我偷懒了吧,男人袜建议我修改文章再发,算了~拉不下这个脸~

看来我是无福享受送货上门的男人袜服务了,还是乖乖去超市买吧。好吧,我承认,这个活动让我很郁闷。我最后回复客服"算了,那我就不要体验码了。按照你们的要求来看, 我的博文的确不合格,我也能够理解。不过,作为顾客,这真是一次糟糕的体验。"


男人袜是一个专业的男袜寄送服务,专门给那些不喜欢穿有洞的袜子,而又没时间去买新袜子的男人们准备。您下单后,将 会定期收到寄送的新袜子,新袜子会根据您所在的季节和天气情况自动调整。

image

男人袜标准套装是每 3 个月寄送一次。如果您希望更灵活的寄送方式,可以选择我们的自选套装,来自由的 ...

more ...

最简陋的GAE代理

年前换了一次服务器,之后发现Lifestream的Errors飙升到1000+错误,检查一下,发现是获 取不了豆瓣的rss链接。正好这台主机支持SSH,连入之后CURL了一下豆瓣服务器,发现Time out。

紧接着发现中国内的所有域名都无法使用CURL获取,联系小张之后,得知该主机曾经被入侵过,于是屏蔽了中国大陆的ip段(囧~入侵和中国ip有毛关系)

遂想用GAE做个代理服务器,反正获取RSS也只要Get一下,代码没几句。把这项任务放入Toodledo之后,就一直没去弄,今天发现GAE Laucher升级了,就部署到自己GAE上了。

地址格式如&nbsp_place_holder;http://jasontiproxy.appspot.com/proxy?url=www ...

more ...

LavaVPN推广链接

以前一直使用SSH进行翻墙,后来在人人看到一位朋友推荐LavaVPN,就过去试用一下,效果的确不错。

LavaVPN

LavaVPN支持各种系统,在Windows下面有专用的客户端接入程序,通过这个客户端可以实现选择性加速,而不需要全局加速。在Android和Linux上面 测试都可以。

官方的介绍如下:

LAVAVPN网络加速器是专为各类网游玩家、软件发烧友、网络办公、影音冲浪网虫等个人用户提供网络加速服务的新型产品,能有效减少网络延时,使网络互访再无拥 挤的感觉,让您在任何情况下都能体验上网加速的快乐!多地服务器节点可以选择,一个账号即可使用全部节点,随时任意切换,软件自带服务器测速工具,自动选择最快的节点 。

服务器目前有大陆、台湾、香港和美国,我个人比较喜欢香港的服务器,速度快,畅游无限。根据我的实际使用,速度都不错,几乎都可无延迟的看Youtube。国内的服务 器则是我在上班时候听音乐用的。

由于VPN的全局性,导致连接上VPN后无法连接上内网数据库等服务器,我的解决方案是在虚拟机上跑VPN,采用Bridge桥接接入网络。

目前LavaVPN在推广阶段,包月是16元,包3月是44元,半年80元,还是很超值的。

最后分享3个推广链接,使用邀请码注册可以获得额外1天的免费使用时间。首次充值(30天及以上)可获额外3天时间赠送 ...

more ...

半年

去年10月份时候,进入了一家做信息化的上市公司,带着对未来的憧憬奔向了广州,半年中,历经数个小项目,发现其实是小作坊开发模式。虽说能学到一些编程之外的东西, 但毕竟不是系统的开发模式,今年5月回了学校就辞职了。

7月份时候,工作机会似乎已经趋向饱和,我急急忙忙拿了一份Offer,从事.net的企业信息化开发。虽然我志在Web 2.0方面的开发,但是权衡再三,还是到南京的研发中心。

新岗位是.net Web开发,我由Java开发人员转为.net开发人员。我对语言的选择本身不是很在意,甚至那时候认为语言其实是工具,思想和设计才是核心。我所 就职的部门负责产品之外的特殊需求专案开发,基于.net平台开发ERPII产品,包括工作流、CRM等等。

从事.net开发之后,才感觉到Java开发的各种好处:各种开放的框架提供了自由选择发挥的平台,实现一种需求的方法有N+1种方式,并且能够跟进较新的技术,满足 自己学习的渴望。.net虽然也很强大,但我总觉得微软提供的工具想让开发人员傻瓜化(在ASP.NET MVC出来之前,Web Form的开发模式让我很不爽)。

公司的Web产品只能在IE6下运行 ...

more ...

C#+VBA操作Excel总结

Excel在日常办公中应用非常广泛,这次我接到一个案子,需要往Excel中写入数据并能够打印出固定格式,前前后后大概花了将近2星期才搞定,现在做一些分享。

一、关于操作Excel的几种方式

我们导出Excel,大抵是有两种方法,一种是在服务器端用一些类库或者COM组件直接生成Excel成品,其二是在后台只写入数据,而不写入具体格式,等用户下载完 Excel之后再在客户端上利用vba生成Excel成品。

1.1使用"自动化"功能-后台生成成品

微软把后台使用COM组件称之为"自动化",其实它本身是不建议这种用法,在257757 号文章(服务器端 Office 自动化注意事项)也明文标出"Microsoft 目前建议不要从任何无人参与的、非交互式客户端应用程序或组件(包括 ASP、DCOM 和 NT Service)中进行 Microsoft Office 应用程序的"自动化",也不为此提供支持,因为 Office 在这种环境中运行时可能会出现不稳定的现象并且/或者会死锁。"

这种方法的优点是给用户更简洁的展现,毕竟原生的Excel成品比半成品来更容易接受,而且可以避免宏安全问题 ...

more ...

脑袋大,脖子粗~

不是大款就伙夫~

昨天几个同事过来玩,我就下厨做菜了,哈哈,上两张图。

原料哈

大功告成

依次为:油面筋掐肉、番茄鸡蛋、韭黄鸡蛋、地三鲜、红烧鱼、番茄酱黄瓜,还有一个煨的排骨汤没端上来~累死我了~从来没烧过这么多菜~

话说地三鲜原来这么麻烦,在文静童鞋指导下面,依次食材过油,费了将近半小时才弄好~

more ...

一周Python小记

上个星期以来忙里偷闲一直在写一系列小型的代码生成器,完成一些从需求到结构化代码生成和验证作业。这个小东西是用Python写的,我简单分享一下中间所得。

一、配置文件

1、YAML格式

数据库连接信息和作业相关信息是存放在数据库中的,配置文件形式可以有很多种选择:XML / ini / txt,我这里选择YAML作为存放。

YAML使用起来相当方便,能够自动解析成对应语言中的变量,比如列表解析为列表,数字文字分别解析成对应的格式变量。

之所以选择YAML,是看中它对语言的亲和性和可读性,GAE的配置文件就是YAML格式。YAML的语法相当简单,用:来分隔key: value,用 - 来分隔列表,注意点是缩进需要用空格,关键符号和内容之间要加上一个空格。我的配置文件如下:

taskId: PQMI06
taskName: 测试建制作业
author: alswl
confirmId: 20101025xxx

headFiles:

  • head1.txt
  • head2.txt
  • head3.txt
    bodyFiles:

  • body1.txt

  • body2 ...
more ...

Python读写剪贴板

最近在写一个CodeGenX代码生成器,说是生成器,其实是目前只完成一堆零散的脚本。这些脚本的调用方式一般是从某个txt中读取数据,再写到另外一个txt中。

由于某些数据变动频繁,导致我操作txt次数大增,我怒了,就找了一个脚本自动读写剪贴板。

#coding=utf-8
'''
读写剪贴板
'''
import win32clipboard as w
import win32con

def getText():
  w.OpenClipboard()
  d = w.GetClipboardData(win32con.CF_TEXT)
  w.CloseClipboard()
  return d

def setText(aString):
  w.OpenClipboard()
  w.EmptyClipboard()
  w.SetClipboardData(win32con.CF_TEXT, aString)
  w.CloseClipboard()

别说有了这个脚本用起来还是蛮方便的,建议丢到Python的lib下面,然后可以方便调用。

如果双击 .py ...

more ...