- 博客(23)
- 资源 (1)
- 收藏
- 关注
翻译 2.8 在程序集中包含资源文件
当使用AL.exe创建程序集时, 你可以把一个文件作为资源加入到程序集中, 通过使用/embed[resource]开关. 这个开关接受一个文件(任何文件), 并把文件的内容嵌入到PE文件中. Manifest的ManifestResourceDef表会被更新来反映这个资源的存在.AL.exe也支持/link[resource]开关, 它也是接受一个包含资源的文件, 然而/link[resou
2009-04-02 19:59:00
664
翻译 2.7 使用程序集连接器
除了C#编译器, 你可以想用程序集链接器工具AL.exe来创建程序集. 如果你想创建一个包含着不同编译器构建的模块的程序集(如果你的编译器不支持相应的C# /addmodule开关), 或者你不知道你的程序集打包要求, 这个程序集链接器是很有用的. 你可以使用AL.exe来构建只包含资源的程序集, 成为附属(satellite)程序集, 它主要是用于本地化的目的. 我将在本章的后面讲述附属程序集.
2009-04-01 16:54:00
712
翻译 2.6 使用Visual Studio IDE把程序集加入到一个项目中
如果你使用Visual Studio IDE来构建你的项目, 你必须把你要引用的程序集加入到你的项目中. 为了做这件事, 打开Solution Explorer, 对你想增加程序集引用的项目点击右键, 然后选择Add Reference菜单项, 这回弹出Add Reference对话框, 如图2-2所示:图2-2 在Visual Studio中添加引用的对话框为了让你的项目引用一个
2009-04-01 15:33:00
1083
1
翻译 2.5 将模块合并成一个程序集 - 2
当你指定下面任何一个命令行开关时, C#编译器都产生一个程序集: /t[arget]:exe, /t[arget]:winexe, 或者/t[arget]:library. 这些开关都会使得编译器产生单独的PE文件, 其包含着manifest metadata表, 产生的文件或者CUI可执行程序, 或者是GUI可执行程序, 或者是一个DLL.除了这些开关, C#编译器支持/t[arget]:m
2009-03-27 10:18:00
1758
翻译 2.5 将模块合并成一个程序集 - 1
前面讨论的Program.exe文件不止是一个带有metadata的PE文件, 它也是一个程序集(assembly). 程序集是一个或多个包含类型定义和资源的文件的集合体. 组成一个程序集的文件被放到manifest中, manifest是另一组metadata表, 其包括着组成程序集的文件的名字, 他们也描述着程序集的版本, 语言, 发行者, 公开暴露的类型, 以及组成程序集的所有文件.CL
2009-03-27 10:13:00
866
翻译 2.4 简单看一下Metadata
现在我们知道了我们创建的是什么类型的PE文件了, 但是在Program.exe中真正是什么? 一个托管PE文件有如下四个主要部分: PE32 (+) header, CLR header, metadata和IL. PE32(+) header是Windows需要的标准信息, CLR header是用于那些需要CLR才能运行的模块(托管模块)的一小块信息, 这个header包括CLR的主版本和次版
2009-03-26 13:32:00
1412
翻译 2.3 响应文件(Response File)
在讨论完编译器开关之前, 我愿意讨论一下响应文件(response file), 一个响应文件是一个文本文件, 它包含着一组编译器命令行开关, 当你执行CSC.exe时, 编译器打开这个响应文件并使用每一行开关, 就像这些开关是传递给CSC.exe的命令行一样. 你可以在命令行中通过指定响应文件的名字来命令编译器使用这个文件, 例如, 你可能有如下的响应文件: MyProject.rsp, 它包含
2009-03-25 16:14:00
2102
翻译 2.2 将类型构建到模块中
在这一节中, 我将给你展示如何将你的包含各种类型的源文件变成可以部署的文件, 让我们从检查如下的简单应用程序开始吧:public sealed class Program {public static void Main() {System.Console.WriteLine("Hi");}}这个应用程序定义一个类型Program, 这个类型只有一个公开静态的函数Main,
2009-03-09 13:24:00
478
翻译 2.1 .NET Framework的部署目标
在过去的几年里, 微软的Windows操作系统得到了不稳定和复杂的口碑, 这个口碑, 不管是不是应得的, 它是由很多不同的因素导致的. 第一, 所有的应用程序使用微软和其他公司的动态链接库(DLL), 因为应用程序要执行很多公司的代码, 任何一段代码的开发者不可能100%地知道其他人是如何使用它的. 尽管这种交互可能潜在地造成各种问题, 但实际上, 这些问题不会总发生, 因为应用程序在部署之前经
2009-03-06 17:45:00
623
翻译 第二章 构建, 打包, 部署及管理应用程序与类型
在我们开始解释如何为微软.NET Framework开发程序之前, 让我们讨论一下构建, 打包和部署你的应用程序和它们的类型所需要的步骤. 在这章, 我将主要讲述如何构建程序集. 在第三章, 我将覆盖更高级的概念, 包括如何构建和使用包含类型的程序集, 这些程序集将被多个应用程序所共享. 在这两章, 我也讨论管理员能够影响应用程序和类型的执行方式.今天的应用程序是由几个类型组成的, 这些类型由
2009-03-06 17:43:00
636
原创 CLR via C#的第一章终于翻译完了, 纪念贴
到目前为止, 终于把这本书的第一章翻译完了, 虽然这本书有对应的中文版, 但是还是看英文版容易懂.话说回来, 我翻译的也不一定比中文版的那本书好, 目的就是为了自己能多记住一些东西. 如果有其他人想看, 那就更好了. 我奢求的不多!
2009-03-04 18:25:00
754
1
翻译 1.11 与非托管代码进行交互
.NET Framework比其他开发平台多提供了很多先进技术, 然而, 很少公司能承受起重新设计和重新实现所有的代码. 微软意识到这点, 因此构建了CLR来提供一种机制允许应用程序可以包含托管代码和非托管的代码. 特别地, CLR支持三种交互场景: 托管代码可以调用DLL中的非托管的函数: 托管代码可以很容易地调哟哦能够包含在DLL中的函数, 这是通过使用一种称为P/Invoke (P
2009-03-04 18:22:00
1717
翻译 1.10 通用语言规范
COM允许不同语言创建的对象彼此通讯, 而CLR继承了所有语言并允许一种语言创建的对象可以作为另一种完全不同的语言中等同的对象. 这种集成是可能的, 因为CLR中的标准类型集合, metadata(字描述类型信息), 以及通用执行环境.当这种语言集成是奇异的目标时, 问题出现在编程语言彼此之间有着很大的差异. 例如, 一些语言不能区分大小写的字符, 一些语言不能提供无符号整数, 操作符重载,
2009-03-03 17:23:00
970
翻译 1.9 通用类型系统
现在, 你应该知道CLR的所有内容都是围绕类型展开的, 类型给你的应用程序和其他类型提供了所需要的功能. 类型也作为一种机制使得一种语言编写的代码可以和另一种语言编写的代码进行无缝地集成. 因为类型是CLR的根基, 微软创建了正式的文档说明——通用类型系统(CTS)——来表述类型是如何定义的, 以及它们的行为是什么样的.>>注意: 实际上, 微软已经将CTS和.NET Framework的
2009-03-01 21:25:00
826
翻译 1.8 框架类库(FCL)介绍
.NET Framework包括了FCL, FCL是一组DLL程序集, 包含着几千个类型定义, 每个类型都暴露出一些功能. 微软正在生成额外的程序库, 例如WinFx和DirectX SDK. 这些额外的程序库提供了更多的类型, 暴露出更多的功能供你使用. 我希望微软将来能提供更多的程序库, 这里是开发者使用这些程序集能够创建的几类应用程序: Web服务: 能处理基于XML的信息通过In
2009-03-01 10:11:00
5705
翻译 1.7 Native代码产生器: NGen.exe
随.NET Framework发布的NGen.exe工具可以将IL代码编译成native代码, 当应用程序安装在用户的机器上时. 因为代码是在安装的时候编译的, CLR的JIT编译器不需要在运行时刻编译IL代码, 这能提高应用程序的性能. NGen.exe工具在下面两个场合很有趣: 提高了应用程序的启动速度: 运行NGen.exe能提高启动速度, 因为代码已经编译成native代码, 所
2009-02-28 18:02:00
8329
1
翻译 1.6 不安全的代码
默认情况下, 微软C#编译器产生的代码都是安全的, 安全的代码可以通过验证的代码. 然而, 微软C#编译器允许开发者编写不安全的代码, 不安全的代码允许直接访问内存地址, 能直接操作这些地址对应的字节. 这是非常强大的功能, 当与非托管的代码互操作或者你想提高实时算法的性能时, 这是非常有用的功能.然而, 使用不安全的代码将会导致重大的风险: 不安全的代码会破坏数据结构, 产生或者打开安全漏洞
2009-02-26 17:32:00
989
翻译 1.5 IL和验证
IL是基于栈的, 这意味着所有的指令都将操作数放到执行栈上, 然后从栈弹出结果. 因为IL没有提供操作寄存器的指令, 编译器开发者很容易产生IL代码, 他们不需要考虑管理寄存器, 只需要很少的IL指令(因为不存在寄存器操作).IL指令也是无类型的, 例如, IL提供一个add指令, 它对栈上的最后两个操作数进行加法操作, 没有单独的32位和64位版本的add指令, 当执行add指令时, 它要确
2009-02-24 14:46:00
538
翻译 1.4 执行你的程序集代码
前面提到, 托管的程序集包含着metadata和中间语言(IL), IL是一个独立于CPU的机器语言, 是微软与几家外部商业和学术的语言/编译器作者协商之后开发的. IL是比绝大多数CPU机器语言高级的语言, IL能够访问和操作对象类型, 能够创建和初始化对象, 调用对象的虚函数, 能直接操作数组元素, 它甚至还能为错误处理抛出和捕获异常. 你可以把IL想象为一个面向对象的机器语言.通常, 开
2009-02-23 12:50:00
550
翻译 1.3 载入公共语言运行时
你所构建的每个程序集可以是一个可执行程序, 或者一个包含一组类型的DLL, 这个DLL被其他可执行程序使用. 当然, CLR负责管理这些程序集中的代码的执行, 这意味着.NET Framework必须安装在宿主机器上. 微软已经创建了软件包, 你可以免费地将.NET Framework安装在客户的机器上, 一些版本的Windows在发布时就已经安装了.NET Framework.你可以通过在%
2009-02-22 22:34:00
1028
翻译 1.2 将托管模块组合成程序集
CLR不是直接与托管模块打交道, 而是和程序集(assembly)打交道. 一个程序集是一个抽象的概念, 开始的时候很难掌握. 首先, 一个程序集是一个或多个托管模块或者资源文件的逻辑上的组合. 第二, 一个程序集是重用, 安全性, 版本控制的最小单元. 依赖于你选择的编译器或工具, 你能产生单文件或者多文件的程序集. 在CLR的世界中, 一个程序集就称为一个组件(component).在第2
2009-02-22 20:30:00
657
翻译 1.1 编译源代码为托管模块
非托管 C/C++可以在底层控制系统,能精确地按照自己的需要来管理内存, 很容易创建线程, 等等.VB6允许你快速地构建UI应用程序,很容易控制COM对象和数据库.CLR正像其名字那样, runtime被很多不同的编程语言使用, CLR的feature对任何以CLR为目标的编程语言都是使用的.例如, runtime使用异常来报告错误, 因此所有的语言都是通过异常来报告错误的. 另外一个例子是r
2009-02-21 20:16:00
1111
2
IT从业者健康指南,对IT工作者很实用
2008-12-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人