如何进行源代码的保护和版本间的维护
摘要:分析:软件版本和强签名的问题。强名称是由程序集的标识、公钥和数字签名等信息组成的,其中程序集的标识包括简单文本名称、版本号、区域性信息等。这些信息都在被包含的程序集清单之中。相对于强签名程序集,弱签名程序集拥有完全一样的元数据、CLR文件头和程序集清单,惟一不同的是弱签名程序集不能进行数字签名,且没有公钥。弱签名程序集只能进行私有部署,不能被放入全局程序集缓存(GAC)中。注意:在现代密码体制中,加密和解密一般采用非对称密钥密码系统,也就是不同的密钥(公开密钥)。这样每个通信方均需要2个密钥,即公钥和私钥,这2把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人持有,并且必须注意保密
阅读全文
posted @
2012-02-23 14:48
IamScree
阅读(1593)
推荐(0) 编辑
.NET的应用程序域是什么
摘要:分析:应用程序域(AppDomain)用于减少运行应用程序的系统开销,是.NET中的一个重要技术改进。有些应用程序需要与其他程序分离开来,但同时还需要彼此通信,这时需要用到应用程序域。应用程序域可以做到分离组件,它不会导致因在进程之间传送数据而产生性能问题。主要的操作方法是将任何一个进程分解到多个应用程序域中,而每一个应用程序域均对应一个应用程序,执行的每个线程都运行在一个具体的应用程序域中。倘若不同的可执行文件都运行在同一个进程空间中,因理论上应用程序需要与其他程序可以直接访问彼此的数据,所以它们之间能够轻松地共享数据。虽然在理论上这是可以实现的,但是CLR依然会检查每个正在运行的应用程序的
阅读全文
posted @
2012-02-23 14:42
IamScree
阅读(665)
推荐(0) 编辑
解决方案下的一个项目是否就代表一个程序集
摘要:分析:程序集(Assemble)是指包含编译好的、面向.NET Framework的代码的逻辑单元,是完全自我描述性的一个逻辑单元(而不是物理单元)。程序集可以存储在多个文件中,但动态程序集不是存储在文件中,而是存储在内存中。如果某一个程序集存储在多个文件中,则会有一个主文件包含入口点,该主文件描述了程序集中的其他文件。可执行的程序集代码和库程序均使用相同的程序集结构,惟一的区别是可执行的程序集包含一个主程序入口点,而库程序集则不包含。简而言之,程序集就是几个彼此有关联程序文件的集合。程序集包含程序的元数据,程序集的一个重要特性是它们包含的元数据描述了对应代码中定义的方法和类型。程序集也包含描
阅读全文
posted @
2012-02-23 14:06
IamScree
阅读(1159)
推荐(0) 编辑
.NET程序的开发和运行基本环境是什么
摘要:分析:(1).NET程序的开发这个问题很简单,大部分.NET程序员都在使用微软公司提供的产品Visual Studio平台上开发.NET程序。但需要注意的是,Visual Studio IDE环境并不是惟一的、必须的工具,理论上可以使用任何一个文本编辑器编写.NET的代码,但是由于文本编辑器并不提供代码的编译调试以及语法提示等功能,所以基本上没有程序员仅仅使用文本编辑器来编写.NET代码。(2).NET的运行运行.NET程序的基础毋庸置疑是.NET Framework,可以在Microsfot的官方网站上免费下载.NET Framework。运行.NET程序必须具备的组件也是.NET Fram
阅读全文
posted @
2012-02-23 13:51
IamScree
阅读(8564)
推荐(0) 编辑
解决因共享组件而导致的应用程序之间的冲突
摘要:分析:.NET中的版本策略是一个比较重要的概念,可以解决因共享组件而导致的应用程序之间的冲突。.NET Framework中部署系统的一个主要目的是:消除由共享状态和共享组件所导致的应用程序之间的冲突(或DLL冲突)。解决冲突问题的关键是可靠的版本控制系统。.NET Framework在程序集清单中记录有关应用程序依赖项的详细信息,该依赖项信息包括其版本号,可在运行时使用该版本号来加载依赖项的正确版本。.NET Framework 提供以下3个版本策略级别:1、应用程序策略:在默认情况下,公共语言运行库负责加载清单中指定的依赖项的版本。可以在应用程序配置文件中进行应用程序策略配置,应用程序配置
阅读全文
posted @
2012-02-22 16:12
IamScree
阅读(2054)
推荐(0) 编辑
NET中的共享程序集
摘要:分析:共享程序集与私有程序集相对,使用共享程序集时需注意一些事项共享程序集(Shared Assembly),与私有程序集相对,它提供多个应用程序域访问同一个程序集的能力,在内存中只存在该程序集的同一份副本,这种非特定于域的代码共享可以极大地节省占用内存资源。并且在大多数情况下,共享程序集安装在全局程序集高速缓冲存储器(Global Assembly Cache)中,而不存在于应用程序相关目录下。对共享程序集的引用不会产生文件复制,同时也不会产生额外的副本。使用共享程序集时需要避免共享程序集命名的冲突,以及共享程序集因版本升级带来的不兼容问题。解决这类问题常见的办法是创建强命名,或者在全局程序
阅读全文
posted @
2012-02-22 15:22
IamScree
阅读(235)
推荐(0) 编辑
.NET中的私有程序集
摘要:分析:程序集(Assembly)是包含编译好的、面向.NET Framework的代码的逻辑单元。私有程序集是相对简单的一种程序集类型。私有程序集一般附带在某些软件上,并且也只能用于该软件中。比如,程序员创建本地应用程序项目(或组件),编译后可以生成DLL或EXE类型的私有程序集。当程序员在其他客户应用程序中使用这类程序集时,只需要添加引用即可进行调用。当这样的程序集被多个应用程序域使用时,每个应用程序域均需要复制该程序集,通常进程中也将存在该程序集的多个副本。注意:因为应用程序只能加载位于主执行文件所在文件夹或其子文件夹中的程序集,所以系统可以保证私有程序集不被其他软件使用。总结:私有程序集
阅读全文
posted @
2012-02-22 15:16
IamScree
阅读(325)
推荐(0) 编辑
使用实时编译进行代码优化
摘要:分析:实时编译,也就是JIT,具有跨平台的优点,实时编译也保证了在新的硬件技术推出后,原先写的代码可以不需要重新编译就直接享用新的技术带来的优点。 但JIT本身作为一种技术,当然存在执行效率低、第一次启动时间长的缺点。目前有两种方式可以产生本机的机器代码:实时编译(JIT)和预编译方式(产生Native Image)。JIT的全称是实时编译(Just-In-Time),程序员掌握JIT工作原理是很有必要的。当需要校调对性能要求很高的代码时,MSIL通常不是最好的做法,JIT优化器会默认地优化程序代码。使用过ildasm或Reflector工具的程序员会发现在Release和Debug模式下产生
阅读全文
posted @
2012-02-22 15:04
IamScree
阅读(1144)
推荐(0) 编辑
IL语言如何在.NET下运行
摘要:所有.NET程序都必须运行在.NET Framework上,而程序最终均将在CLR(Common Language Runtime)上运行。.NET程序编译后并不是直接生成机器代码,而是生成中间代码(MSIL)简称IL。分析:在.NET框架中,公共语言基础结构使用公共语言规范来绑定不同的语言。公共类型系统(CTS)包含在公共语言规范中的部分要求不同的语言均需要实现,因此公共语言基础结构允许不同的语言使用.NET框架。在.NET框架中,所有的语言(C#,VB.NET,Effil.NET等)最后都被转换为了一种通用语言,即微软中间语言(MSIL)。看一段简单的示例代码,以及第一次编译后生成的MSI
阅读全文
posted @
2012-02-22 14:54
IamScree
阅读(922)
推荐(0) 编辑
C#中的非托管代码是什么
摘要:分析:非托管代码(Unmanaged Code)是指直接编译成目标计算机的机器码,这些代码只能运行在编译出这些代码的计算机上,或者是其他相同处理器或者几乎一样处理器的计算机上。非托管代码不能享受公共语言运行库所提供的一些服务,例如内存管理、安全管理等。如果非托管代码需要进行内存管理等服务,就必须显式地调用操作系统的接口,通常非托管代码调用Windows SDK所提供的API来实现内存管理。非托管程序也可以通过调用COM接口来获取操作系统服务。注意:C#跟Visual Studio平台的其他编程语言不一样的是,C#可以创建托管程序与非托管程序。当创建的项目选择名字以MFC,ATL或者Win32开
阅读全文
posted @
2012-02-22 14:41
IamScree
阅读(1541)
推荐(0) 编辑
C#中的托管代码是什么
摘要:分析:托管代码(Managed Code)实际上就是中间语言(IL)代码。代码编写完毕后进行编译,此时编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。程序集(Assembly)的文件负责封装中间语言,程序集中包含了描述所创建的方法、类以及属性的所有元数据。托管代码在公共语言运行库(CLR)中运行。这个运行库给运行代码提供了多种服务,通常来说,公共语言运行库可以加载和验证程序集,并以此来保证中间语言的正确性。当某些方法被调用时,公共语言运行库把具体的方法编译成适合本地计算机运行的机器码,并且将编译好的机器码缓存起来,以备下次调用时使用。这个过程就是即时编译。注意:程序实
阅读全文
posted @
2012-02-22 14:28
IamScree
阅读(5309)
推荐(0) 编辑
ASP.NET一个页面的生命周期
摘要:分析:页面从创建到处理结束的过程中ASP.NET Engine要执行10个事件。 (1)对象初始化页面自身以及页面中的控件,都是在Form中被首次初始化的,初始化事件可以通过OnInit方法重载。通过在ASPX页面的后台代码文件的构造器中声明对象,页面将知道对象的类型,并知道需要创建多少个这样的对象。一旦在构造器中声明了控件,就可以在其任何子类、事件、方法或属性中访问到它们。但是,如果对象是在ASPX文件中指定的控件,由于这样的控件是没有属性的,并且这样做对从代码中访问它们是危险的,所以无法保证这些控件实例是按照怎样的顺序被创建的。 (2)加载视图状态数据初始化以后,因为还没有建立用于相对引用
阅读全文
posted @
2012-02-22 14:20
IamScree
阅读(251)
推荐(0) 编辑
ASP.NET的页面运行机制
摘要:分析:ASP.NET的基本运行机制如下图所示:说明:(1)当第一次访问页面时,页面请求首先依次经过HttpModuls和HttpHandler的处理,服务器接收到HttpHandler的请求后将跳转到需要访问的页面,然后ASP.NET Engine负责找到这个页面后台的类,并实例化为一个临时对象,在此过程中会触发一系列的事件,其中一部分事件需要经过对象中的方法进行处理,之后服务器会将这个处理后页面移交给Response对象,然后由Response对象将这个页面发送到客户端。这就是第一条路线。(2)因为服务器之间的会话已经建立,在服务器中的临时对象已经建立,所以在这个页面上重新提交一些信息并再次
阅读全文
posted @
2012-02-22 14:08
IamScree
阅读(1880)
推荐(0) 编辑
ASP.NET的Application特性
摘要:分析:Application是用来保存所有用户共用的信息,在ASP时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Application是理想的选择。但是在ASP.NET开发环境中,程序员通常把类似的配置数据放在Web.config中。如果要使用Application的话,要注意的是所有的写操作都要在Global.asax文件中的Application_OnStart事件中完成。如以下示例代码所示:/*下面的代码在Global.asax文件中设置*/Application.Lock(); //将Application对象加锁操作。Application[“UserID”]
阅读全文
posted @
2012-02-22 13:57
IamScree
阅读(433)
推荐(0) 编辑
ASP.NET和ASP的区别是什么
摘要:分析:ASP与ASP.NET是Microsoft公司在Web应用程序开发上的两项重要技术。ASP与ASP.NET区别如下:(1)开发语言不同:ASP的开发语言仅局限于使用non-type脚本语言,给客户端脚本添加代码和给页面添加ASP代码的方法是一样的。ASP.NET的开发语言更为广泛,可以使用符合.NET Framework规范的任何一种功能完善的strongly-type编程语言(比如Visual Basic、C#)。(2)运行机制不同:ASP是解释型的编程框架,因没有事先编译,而是一边解释一边执行,故而页面的执行效率相对比较低。ASP.NET是编译型的编程框架,服务器上运行的是已经编译好
阅读全文
posted @
2012-02-22 09:13
IamScree
阅读(19023)
推荐(3) 编辑
ASP.NET是什么
摘要:分析:ASP.NET不是一种语言,而是创建动态Web页的一种强大的服务器端技术,它是Microsoft .NET Framework中一套用于生成Web应用程序和Web服务的技术。ASP.NET页在服务器上执行,并生成发送到桌面或浏览器的标记(如 HTML、XML或者WML)。可以使用任何.NET兼容语言(比如Visual Basic、C#)编写Web服务文件中的服务器端(而不是客户端)逻辑。ASP.NET页使用一种由事件驱动的、已编译的编程模型,这种模型可以提高性能并支持将用户界面层同应用程序逻辑层相隔离。注意:Web应用程序和Web服务可调用公共语言运行库的任意功能,例如类型安全、继承、语
阅读全文
posted @
2012-02-21 13:47
IamScree
阅读(3997)
推荐(0) 编辑