随笔分类 - 个人文章
摘要:知道了如果构建代码文档,知道了如何生成代码,那么编译程序集就很简单了。 CodeDomProvider 类提供了三个可以执行编译的方法: 1、CompileAssemblyFromSource——这个好懂,也好办,就是用字符串直接构建代码,然后传给这个方法,就可以把源代码编译了。 2、Compile
阅读全文
摘要:有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类。要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的。如果用.net的“反编译”工具的朋友会知道,你用while语句写了一段代码,然后编译生成程序集,再用工具把代码“反”出来,此时你会
阅读全文
摘要:在开始正题之前,先补充一点前面的内容。 在方法中,如果要引用方法参数,前面的示例中,老周使用的是 CodeVariableReferenceExpression 类,它用于引用变量,也适用于引用方法参数。除了这个类,还可以使用 CodeArgumentReferenceExpression 类,这个
阅读全文
摘要:本文老周就给大伙伴们介绍一下方法参数代码的生成。 在开始之前,先补充一下上一篇烂文的内容。在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作,后来发现是可以的。不过啊,MemberAttributes 枚举有些情况下不那么好弄,最典型的就是
阅读全文
摘要:前文中,老周已经厚着脸皮介绍了类型的声明,类型里面包含的自然就是类型成员了,故,顺着这个思路,今天咱们就了解一下如何向类型添加成员。 咱们都知道,常见的类型成员,比如字段、属性、方法、事件。表示代码成员的类型与 CodeTypeDeclaration 类有着共同的基类—— CodeTypeMembe
阅读全文
摘要:上一篇文章中说了命名空间,你猜猜接下来该说啥。是了,命名空间下面就是类型,知道了如何生成命名空间的定义代码,之后就该学会如何声明类型了。 CLR的类型通常有这么几种:类、接口、结构、枚举、委托。是这么几个,应该没有漏掉的吧。 定义类型,除了委托外都可以用 CodeTypeDeclaration 类完
阅读全文
摘要:在上一篇文章中,老周介绍了表达式和语句,尽管老周没有把所有的内容都讲一遍,但相信大伙至少已经掌握基本用法。在本文中,咱们继续探讨 CodeDom 方面的奥秘,这一次咱们聊聊命名空间。 在开始之前,老周先厚着脸皮回答一位朋友的问题,有朋友问,我有一个代码文件,或者我直接把代码弄成文本,而不是生成的文档
阅读全文
摘要:在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系。 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下。严格上说,Emit并不是针对代码文档生成和编译而设计的,Emit一方面可以实时发出 IL 指令,另一方面也支持动态程序集,即可以在
阅读全文
摘要:CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧。DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了。如果你从来没接触过 CodeDom,你大概可以根据这个名字,推断它应该和代码文档模型有关。 这推断是靠谱的,CodeDom的功能,老周厚着脸皮
阅读全文
摘要:假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据。 看看下面两个类。 假设 ContactInfo 表示联系方式,帅哥有两个联系方式。 在上面代码中,帅哥实例的两种联系方式都引用了同一个 ContactInfo 对象。如果把该帅
阅读全文
摘要:欢迎收看本期的《老周吹牛》节目,由于剧组严重缺钱,故本节目无视频无声音。好,先看下面一个类声明。 这个类是老周随便瞎写的,没有特别内涵,只是用来做做实验而已。注意类型上应用的attribute,它被定义为数据协定。 下面是重点,对这个类的实例进行序列化,所以,我们先得new一个实例。 然后,可以序列
阅读全文
摘要:前面好几篇文章,老周都跟大伙伴们聊了跟应用程序域有关的话题,干脆咱们一聊到底吧,做学问就应该这样,有恒心。 App Domain的创建新应用程序域的方法中,有一个特殊的重载: 这个重载比较特殊,它与咱们今天扯的话题接近,因为它的参数列表中有一个是 PermissionSet 类型的,它表示一个权限的
阅读全文
摘要:当一个程序集被加载使用的时候,出于数据的完整性和安全性考虑,程序集文件(在99.9998%的情况下是.dll文件)会被锁定,如果此时你想更新程序集(实际上是替换dll文件),是不可以操作的,这时你得把应用程序退出,替换文件后再启动程序。 多数情况下这样做是可行的,只是有时候,比如ASP.NET或一些
阅读全文
摘要:我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”。以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然后在服务器端自定义一个消息拦截器来验证用户名和密码。 以老周不靠谱的学识水平认为,这样做不好,直接把
阅读全文
摘要:所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了。在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示用户界面。在预启动时,可以事先初始化一些数据,等到用户正式启动应用时,呈现界面的效率就有所提升。 预
阅读全文
摘要:在以往版本中,后台任务都是以独立的专用进程来运行,因此,定义后台任务代码的类型都要位于 Windows 运行时组件项目中。 不过,在14393中,SDK 作了相应的扩展,不仅支持以前的独立进程中运行后台任务,也允许后台任务与应用程序位于同一个进程中执行,即单进程后台任务(Single – Proce
阅读全文
摘要:这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用。激活远程应用需要以下前提: 系统必须是build 14393或以上版本,UWP应用必须使用14393或以上版本的SDK开发。 被启动的应用应当支持协议激活,比如
阅读全文
摘要:地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程。在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了。 但是,在某些情况下,启动新进程后,还希望能向目标进程传送数据,或者实时读取来自新进程的信息。比如,启
阅读全文
摘要:在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定。 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们是把自己实现IErrorHandler接口的类型添加到ChannelDispatcher中的,也就是
阅读全文
摘要:当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端。在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1、Action:在服务调用中,action标头比较重要,它是塞在SOAP消息的Headers元素下面的,是消息头的一部分,a
阅读全文