频道栏目
读书频道 > web开发 > .NET > .NET安全揭秘
2.1.1 模块的操作
2012-10-24 15:00:11     我来说两句
收藏   我要投稿

本文所属图书 > .NET安全揭秘

全书共分为五个部分。第一部分:.NET安全基础,透彻讲解了.NET体系结构、程序集与反射、应用程序域和CLR寄宿等核心技术,这部分内容是.NET架构的核心,同时也是理解.NET底层安全机制的基础;第二部分:.NET平台安...  立即去当当网订购

2.1程序集

CLR运行程序总是首先加载程序集,然后根据程序集中的清单加载并初始化其他内容。程序集由一个或者若干个模块组成,每个模块就是一个PE文件。开发人员可以通过命令行调用编译器,从而合并多个模块到程序集中。程序集共享和强名称是代码访问安全里的两个重要概念,通过程序集可以实施代码级别的安全策略。

2.1.1模块的操作

程序集由模块组成,每个程序集可以包含至少一个模块。每一个模块就是一个标准的PE文件(见第1章)。接下来,我们学习如何使用编译器来进行模块的生成、设置等基本操作。

首先创建一个hello.cs文件,如代码清单2-1所示。


 

代码清单2-1hello.cs代码

using System;
public class Hello
{
public Hello()
{
}
public static void Main(string[] args)
{
Console.WriteLine("hello world!");
Console.Read();
}
}

C#编译器,输入如下命令:

csc /out:hello.exe /t:exe /r:MSCorLib.dll hello.cs

编译器首先打印的是版本信息,如图2-1所示。

然后启动生成的hello.exe,可以看到程序输出的“hello world!”(如图2-2所示)。


 

上面的代码虽然很简单,但仍然有必要做细致的分析。首先,创建一个名为Hello的类型、一个Hello()方法、一个Main(string[] args)静态方法。然后添加类型引用,引用MSCorLib.dll中的Console.WriteLine(string)、Console.Read()方法。当编译器把上面的C#代码编译成MSIL代码,且遇到Console.WriteLine(string)和Console.Read()时,会在指定的程序集(MSCorLib.dll)中寻找Console类型并判断相应方法的调用是否正确。

说明对于C#编译器来说,默认会自动引用MSCorLib.dll,并设置/out:hello.exe /t:exe命令,所以该生成exe文件的命令可直接为:csc hello.cs。

这个hello.exe文件究竟是什么呢?首先可以肯定的是,它是一个托管PE文件,是一个模块,事实上,它还是一个程序集。第1章已经介绍过PE文件了,这里不再重复。通过csc的/t:exe、/t:winexe或者/t:library命令行开关得到文件,然后通过ILDasm查看就会发现程序集清单(也就是说该模块同时也是一个程序集),那么可不可以生成不包含程序集清单的模块呢?答案是可以,即通过csc的/t:module命令行开关生成一个.netmodule文件。新建一个hh.cs文件,如代码清单2-2所示。

代码清单2-2hh.cs源码

public class Hh
{
public string Hello()
{
return "hello";
}

}

对hh.cs使用如下命令:

csc /t:module  hh.cs

该命令生成的hello.netmodule文件是一个标准的DLL PE文件,但是它不能被CLR加载,使用的时候必须将它嵌入程序集中。后文将介绍如何把模块添加到程序集中。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:概述
下一篇:2.1.2 程序集概念
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站