- 热门文章:
- · Metadata and Reflection in .NET
- · 在.net执行sql脚本的简单实现
- · .Net下WebMethod属性
- · .NET客户端应用程序:.NET应用程序更新组件(6)
- · .NET客户端应用程序:.NET应用程序更新组件(5)
- · 创建分布式应用程序学习心得
- · 基于组件的.NET软件开发(1)
- · .net关于企业Excel报表的生成
- · 使用 Visual C# .NET 在 ADO.NET 中以编程方式构建连接字符串
- · 让用户通过宏和插件向您的 .NET 应用程序添加功能
- · Visual Basic.NET和GDI+共创图标编辑器
- · Visual Basic .NET 中动态加载类 (三)
上一篇:MyCollege.Net系统规划与总体设计 >>
学习笔记《.NET框架程序设计(修订版)》--第三章 共享程序集 (2)
1、第二章里提到用 CSC.exe 的 /reference 命令行开关来指定期望引用的程序集文件名。如果文件名包含了完整路径,则 CSC.exe 加载指定路径下的文件。如果指定的是不带路径的文件,它将在以下目录中查找引用的程序集:
a、当前工作路径;
b、编译器目前使用的CLR所在的目录。MSCorLib.dll总是包含在该目录中(System.Object就定义在这个程序集中)。该目录类似于:
C:\Windows\Micorsoft.NET\Framework\v1.0.3427 ;
c、任何用CSC.exe的 /lib 命令行开关指定的目录;
d、任何LIB环境变量中指定的目录。
安装.NET框架时,微软的程序集文件会被分别拷贝到 CLR所在目录及 GAC目录中。在CLR所在目录中拷贝是使我们能够方便的生成自己的程序集;GAC中的拷贝则是用于运行时加载这些程序集。
CSC.exe 不在GAC 中查找所引用的程序集的原因是因为需要指定的路径比较麻烦。
2、响应文件(response file):是一个包含一组编译器命令行开关的文本文件。执行CSC.exe 命令时,编译器会打开响应文件,并象使用通用命令行传递的开关一样使用响应文件中指定的命令行开关。
例子:
一个响应文件MyProject.rsp 包含下列文本:
/out:MyProject.exe
/target:winexe
为了使CSC.exe利用这些设置,可以象这样调用:
csc.exe @MyProject.rsp CodeFile1.cs CodeFile2.cs
C#编译器支持多个响应文件。
运行CSC.exe时它会自动在当前目录中搜索一个本地的CSC.rsp文件;另外编译器还会在CSC.exe所在的目录中搜索一个全局的CSC.rsp文件。
本地响应文件和全局响应文件中的设置有冲突时,本地响应文件中的设置将覆盖全局响应文件的设置;类似的,显示传递给CSC.exe的设置也将覆盖本地响应文件中的设置。
CSC.rsp包含类似以下的命令行:
/r:Systme.dll
/r:Accessibility.dll
/r:System.Data.dll
等等;
需要的话我们也可以向CSC.rsp文件中添加自己的命令行开关。
3.5 强命名程序集的防篡改特性
1、用私有密钥为程序集签名可以确保该程序集的生产者为对应公有密钥的持有者:
a、当程序集被安装到GAC目录内时,系统将会对包含清单的文件内容进行散列转换,并用得到的散列值来和嵌入在PE文件中的RSA数字签名进行比较。如果相同证明程序集文件的内容没有被篡改,并且可以知道我们拥有着和发布者的私有密钥相对应的公有密钥;
b、系统会对程序集中其他文件的内容进行散列转换,然后将得到的散列值和清单文件中FileDef表内存储的散列值进行比较。如果发现有任何不匹配的情况,则证明至少有一个程序集的文件被篡改了。
2、当应用程序需要绑定一个程序集时,CLR将使用所引用的程序集的一些属性(名称、版本、语言文化及公有密钥)来在GAC中定位程序集。
如果找到被引用的程序集,它所在的子目录被返回,保存清单的那个文件将被加载。这样确保了运行时加载的程序集和编译时生成的程序集总时来自同一个发布者。
如果被引用的程序集不在GAC中:
b、CLR将在应用程序的基目录中查找,如果还没找到则
c、CLR将到应用程序的配置文件中标识的私有路径中查找
d、如果应用程序时使用MSI来安装的,CLR会要求MSI来定位程序集。
如果找不到程序集绑定失败系统抛出一个 System.IO.FileFoundException 异常。
当强命名程序集文件是从一个非GAC的地方加载时CLR会在程序集被加载的时候比较散列值(若是GAC中加载,则在程序安装时比较散列值?)。如果检测到散列值不匹配抛出 System.IO.FileLoadException 异常。
相关文章:
- · Visual Basic .NET 中动态加载类 (二)
- · Visual Basic .NET 中动态加载类(一)
- · 我的.Net下应用程序发布问题的简易解决方案
- · 关于自定义事件的一点体会
- · .net 中的事务总结
- · .net中一些所封装的类
- · .Net 下对SqlServer2000中的存储过程的调用
- · .Net 下对SqlServer2000中的存储过程的调用
- · .NET组件和COM组件之间的相互操作
- · 权限管理工具的使用方法
- · .net关于企业Excel报表的生成
- · .NET Test Driven Development
- · 使用 Visual C# .NET 向 Microsoft Excel 2002 传输 XML 数据
- · Remoting编程知识二
- · Remoting编程知识一
- · 在.net中轻松掌握Windows窗体间的数据交互
- · .NET里面的Interop太烂了
- · .NET中的设计模式五:观察者模式
- · .NET Framework 2.0 beta 新特性
- · 把.NET程序部署到没有安装.NET Framwork的机器上
- · 对使用net程序架构开发的一点点儿
- · 在.NET下获取硬盘序列号的问题
- · 在.net中Oracle日期类型的处理
- · 由C++转向C#:我们需要注意哪些方面的变化?
- · 如何保护我们的 .NET 程序集?
- · 初级:.net框架下的MD5
- · .net下软件的自动升级--上传
- · 针对 .NET 框架的安全编码指南
- · .NET框架类命名空间
- · .Net框架程序设计(一)----进阶
- · .NET中的设计模式二:单件模式
- · .Net的注册表操作
- · [GDI+] ColorMatrix 彩色矩阵
- · 在.NET中实现彩色光标,动画光标和自定义光标
- · .Net框架下的XSLT转换技术简介
- · NET Framework 工具
- · 充分利用 .NET 框架的 PropertyGrid 控件
- · 把.NET程序部署到没有安装.NET Framwork的机器上
