.Net:什么是强程序集,什么是弱程序集?

作者&投稿:韩晏 (若有异议请与网页底部的电邮联系)
什么是.NET 程序集强签名~

用强名称来给程序集签名即谓之程序集强签名!Visual Studio.NET 和 .NET Framework SDK 中有工具能够将强名称分配给一个程序集!强名称相同的程序集一般也是相同的!通过签发具有强签名的程序集合,可以确保名称的全局唯一性!因为强名称是依赖于唯一的密钥对来确保名称的唯一性,其他人不会生成与你相同的程序集名称(不同的私钥产生的名称不同)强名称保护程序集的版本沿袭,因为强名称的唯一性能够确保没有其他人能够生成你的程序集的后续版本强名称提供可靠的完整性检查,通过.NET Framework安全检查后,可以确保程序集内容在生成后未被更改过!要注意的是,具有强名称的程序集引用其他程序集,如果这个程序集没有强名称,那么具有强名称的程序集所带来的好处,并依旧会产生DLL冲突!因此具有强名称的程序集只能引用其他具有强名称的程序集。

你编写的程序如果没有进行 签名 不具备 公匙 文化 版本属性的程序集为私有程序集。该程序集只能在程序所在的目录使用。
像.net框架的程序集就是公有程序集。

可以向程序集分配称为强名称的加密签名,它为程序集提供名称的唯一性并防止他人借用您的程序集名称(名称欺骗)。如果您正在部署一个将被同一台计算机上的多个应用程序共享的程序集,则该程序集必须有强名称。即使只在您的应用程序中使用该程序集,使用强名称也可确保加载该程序集的正确版本。

生成具有强名称的程序集的第一步是获得加密密钥对。.NET 框架 SDK 包括一个可用来生成密钥对的“强名称”工具 (Sn.exe)。由“强名称”工具生成的密钥对可以保留在文件中,您也可以将它存储在本地计算机的“加密服务提供程序”(CSP) 中。下面的命令使用“强名称”工具生成一个新的密钥对并将它存储在名为 TestKey.snk 的文件中:

sn -k Testkey.snk

在获得密钥对后,需要向源文件中添加正确的自定义属性,以便编译器发出带有强名称的程序集。根据用于签名的密钥对是包含在文件中还是 CSP 内的密钥容器中,正确地选择属性。对于存储在文件中的密钥,请使用 System.Reflection.AssemblyKeyFileAttribute。对于存储在 CSP 中的密钥,请使用 System.Reflection.AssemblyKeyNameAttribute。 NET组件和COM组件之间的相互操作

.NET技术是微软大力推广的下一代平台技术,自从.NET技术架构Beta2版本的正式发布,此项技术也逐渐走向成熟和稳定。按照微软的平台系统占有率,我们不难想象得到,在未来的一两年内.NET技术必定会势如破竹一般的登上主流的技术平台,而一个新的技术平台得以快速发展的最重要的前提是:他不会彻底的摒弃以前的技术,这一点对于.NET技术来说指的就是COM/COM+技术了。

一般来说,在IT技术界以及硬件产业,技术的更新换代速度非常得惊人,而惯例是所有的新技术都会遵循向下兼容的原则,但是.NET技术不仅仅做到了这一点,.NET甚至实现了相互之间的各自调用,这一点是非常难能可贵的。也就是说,不但我们可以在.NET组件中调用COM组件,同时也可以在COM组件中正常的调用.NET组件。这点带来的好处是显而易见的,一方面我们可以保持现有的技术资源,另一方面,在现有资源中可以利用.NET所带来的各种新技术。

在开始之前我们先来看一下.NET组件和我们目前常使用的COM组件之间有何不同之处吧。

.NET组件可以分为两大类:共享的.NET组件和私有的.NET组件。

共享的.NET组件需要通过标准公开关键字密码技术来保证自身的唯一性,在这一点上面比较类似于COM的全球唯一ID号码GUID。但是,我们在可能的情况下应当尽量避免使用共享的.NET组件,因为这样将会有可能再一次的陷入目前在视窗系统下长期困扰开发人员的“DLL地狱”。

私有的.NET组件是我们将会经常使用的.NET组件方式,在这种方式之下,我们发布.NET组件需要做的只是简单的进行拷贝操作就可以了,仿佛回到了远古的DOS时代了,在也不必关心纷繁复杂的系统注册表了,也不必担心DLL的版本被覆盖等等的问题了。

而COM组件是微软曾经力推了很多年的一种代码复用的技术框架,在这些年里也得到了极大的发展和应用,但它的弊端却也日益明显,我们不得不面对众多的COM组件之间的版本控制和令人恐怖的DLL地狱,还有注册表、GUID等等。在我们安装一个软件的同时,也带来了大量的我们所未知的版本繁多的COM组件到我们的操作系统中。

但是,COM组件的技术优势也是明显的,在很大的程度上实现了Windows平台下的代码复用,所以我们才会提出这样的一个话题,如何才能在.NET技术日臻成熟的情况下,保护和利用已经存在的大量的采用COM技术的软件和产品呢?

下面我们就探讨一下,如何实现.NET组件和COM组件之间的相会调用和操作。

首先,我们来看看在现有的COM组件中如何调用.NET编写的组件吧:
在这里我们使用C#编写一个最简单的组件,仅仅实现返回一个字符串,详细的代码如下:

在上面的.NET组件当中我们实现了一个类成员:say。他的用途是简单的返回一段字符串。

切换到MS-DOS命令行下面,运行:
C:\>csc /t:library /out ClassLibrary1.DLLClassLibrary1.cs

上面的编译器参数/t:library 告诉C#编译器我们现在是在建立一个库应用程序。这样,我们就得到了一个名称为ClassLibrary1.DLL的.NET组件了。
但是想要在现有的COM组件中使用这个组件,我们还有进行如下步骤:

切换到MS-DOS命令行下面,运行:
C:\>regasm out ClassLibrary1.DLL /regfile:ClassLibrary1.reg

上面的命令行是注册我们的.NET组件,并且产生了一个备用的注册表文件。大家一定会记得在以前我们的win9x/NT/2000下面注册COM组件使用的命令是:
regsvr32 c:\test.dll

在.NET下面,注册.NET组件就需要上面的regasm命令了,值得注意的是,这个方法仅仅是为了可供COM组件来调用,.NET本身之间相互调用组件是不需要任何注册的!

还没有结束呢,接下来我们需要:

切换到MS-DOS命令行下面,运行:
C:\>tlbExp ClassLibrary1.dll /out:ClassLibrary1.tlb

上面的命令行表示将会产生一个.NET组件的类型库,目的是为了我们在COM组件中进行提前绑定操作。

好了,接下来我们就可以在自己的基于目前COM技术的代码中方便的使用上面我们使用C#编写的.NET组件了。在这里,我们使用VB6.0编写一个小小的测试代码,在开始之前我们需要在VB的集成环境中使用菜单中的“引用”选项,选择我们刚才产生的类型库文件ClassLibrary1.tlb。

VB测试的代码如下:
Private Sub Form_Load()
Dim test As New ClassLibrary1.hello
Dim str As String

str = test.say("dddd")
MsgBox str
End Sub

接下来,我们就来看看,如何在.NET组件中使用目前存在的COM组件吧。

对于.NET来讲,使用COM组件要想对简单一些。.NET在设计之初就考虑到了如何方便的利用现有的各种技术资源,这也是微软的一贯作风,.NET的强大之处也可见一斑。.NET提供了大量的类库来方便的实现同COM的相互操作,其中很重要的一个名称空间就是:System.Runtime.InteropServices。通过这个名称空间的名字我们也可以从字面上看出,“互操作服务”。System.Runtime.InteropServices这个名称空间提供了一系列的类来对COM对象进行操作。

下面的例子中,我们来调用一下系统自带的Win32函数MessageBoxA,这个函数位于系统的COM组件user32.dll当中,我们调用的代码如下:
using System;
using System.Runtime.InteropServices;

class Test
{
[DllImport("user32.dll")]
public static extern int MessageBoxA(inthWnd,string strMsg,string strCaption,intnType);

public static void Main()
{
int myMsg;
myMsg=MessageBoxA(0,"Hello!","test",0);
}
}

切换到MS-DOS命令行下面,运行:
C:\>csc Test.cs

编译完毕我们的C#应用程序之后,直接运行就可以看到对话框了!

需要注意的是,在调用COM组件之前,我们需要在.NET程序中引用名称空间:System.Runtime.InteropServices。因为我们需要使用这个名称空间所提供的一个方法:DllImport。

怎么样,在.NET中使用COM组件是非常的方便的吧。上面是我们调用的系统本身自带的DLL组件,同样的,也可以使用这种方法来调用我们自己使用VB/VC编写的COM组件。

好了,我们已经探讨完了如何在.NET和COM之间相互操作了,我们也很显然的看到了.NET技术的强大,现在越早掌握.NET技术就会在未来越容易的占领领先的位置,让我们共同努力掌握强大的.NET平台技术吧。

(以上程序在Windows2000 server+VS.NET Beta2下测试通过)


ASP.NET是什么
ASP.NET又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。ASP.NET基于.NET Framework的Web开发平台,不但吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。ASP.NET就是属于WebForm,也就是平时说的B\/S模式的...

用于windows7的microsoft net framework 4.5.2有什么用
NET Framework 是用于windows的新托管代码编程模型。简单来说,Microsoft .NET Framework是一个运行环境 ,有些应用程序必须在安装microsoft net framework的情况下才可以正常运行。NET Framework 官方版将强大功能与新技术结合起来,用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信。

软件技术专业都学什么技能?
软件技术专业主要学习C#程序设计,java程序设计,数据库技术与应用,计算机专业英语,IT职业英语,JSP,ASP,NET等。软件技术专业培养具有一定的计算机软件专业理论知识,掌握至少一种主流软件开发平台(初学者可用TexPad编写代码。而后可用Eclipse、MyEclipse、AndroidStudio、VisualStudio等工具开发编写代码),具有较强...

软件技术学什么
学软件技术出来干什么具体如:1、Java方向:JAVA初级程序员、JAVA计算程序员、JAVA工程师、J2EE系统工程师等。2、Net方向:.Net程序员网站开发工程师.Net工程师等。3、其它方向:简单的管理信息系统开发和维护人员、网页制作和客户端脚本程序编写人员、初级数据库管理和维护人员、数据库开发工程师、系统分析...

编程学习哪家强?
编程猫课程还可以。但是更推荐选择童程童美。其实,对于孩子们来说,学编程并不是将来当一名程序员,可以说这没有任何关系,少儿学编程,学的是一种思维方式,对他们今后的学习和创造力都有很大的帮助。少儿编程学什么:编程语言有很多种,比如C\/C++、Java、Python、.NET、PHP等等,所有的编程语言就像...

现在学java好还是.net好?
Java更好一点,因为Java应用广泛,除非有一项很大的技术突破能够替代Java。在当下,Java被使用的场景非常多,网站、游戏、办公软件、新零售、云计算、芯片技术、数字经济等多个互联网领域都不开Java,拥有很好的就业前景。就算是小白也可以学会,先学习Java基础,从入门到可以进入项目大概需要好好学习将近一年...

什么具有突击力强航程远的特点
具有突击力强航程远的特点的军事装备通常是战略轰炸机。相关内容如下:1、战略轰炸机是军用飞机之一,除了投常规炸弹外,它还能投掷核弹、核巡航导弹或发射空对地导弹。轰炸机可以分为战术轰炸机、战役轰炸机和战略轰炸机三种类型。战术轰炸机一般能装载炸弹3~5吨,战役轰炸机能装载炸弹5~10吨,战略轰炸...

什么是空连接,计算机怎样禁止空连接?
在Windows 下,它是用 Net 命令来实现的.在检测报告中我们很常可以看到 空连接 的字样,很多人不知道什么是空连接,他其实就是不用密码和用户名的IPC连接.具体为 net use \\\\IP "" \/user:""下面是 NET 命令的基本用法 综合了WINDOWS 98,WINDOWS WORKSTATION和WINDOWS SERVER 三个操作系统关于NET...

什么是互联网
互联网是由一些使用公用语言互相通信的计算机连接而成的网络,即广域网、局域网及单机按照一定的通讯协议组成的国际计算机网络。互联网(internetwork,简称internet),始于1969年(己酉年)的美国,又称因特网,是全球性的网络,是一种公用信息的载体,这种大众传媒比以往的任何一种通讯媒体都要快。

机器人编程和计算机编程有什么区别
机器人编程和计算机编程区别为:知识不同、操作不同、适合人群不同。一、知识不同 1、机器人编程:机器人编程不仅涉及编程的知识,还需要了解学习机械、工程、信息等方面的知识。2、计算机编程:计算机编程需要的是编程相关的知识。二、操作不同 1、机器人编程:机器人编程要用机器人组件做出实体模型,...

扬中市13043444805: 什么是.NET 程序集强签名 -
仝残八正: 用强名称来给程序集签名即谓之程序集强签名!Visual Studio.NET 和 .NET Framework SDK 中有工具能够将强名称分配给一个程序集!强名称相同的程序集一般也是相同的!通过签发具有强签名的程序集合,可以确保名称的全局唯一性!因为...

扬中市13043444805: .net中什么是程序集?一个程序集中包含有哪些内容? -
仝残八正: 程序集是 .NET Framework 的生成块,它们构成基本部署单元、版本控制、重新使用、激活范围和安全权限.程序集向公共语言运行时提供了解类型实现所需要的信息.它是为共同运行和形成功能逻辑单元而生成的类型和资源的集合.对于运行...

扬中市13043444805: 什么是程序集 -
仝残八正: 1.程序集(assembly)是一个或多个托管模块,以及一些资源文件的逻辑组合. 2.程序集是组件复用,以及实施安全策略和版本策略的最小单位. 3.程序集是包含一个或者多个类型定义文件和资源文件的集合.在程序集包含的所有文件中,有一...

扬中市13043444805: 在.NET Framework框架中的程序集具体指的是什么?跪求详细讲解... -
仝残八正: 用.NET编译应用程序时,先生成一些类文件,再由编译器进行二次编译;第一次编译产生的代码叫MSIL(中间语言),中间语言经过第二次编译就变成机器语言.创建的中间语言代码就存放在程序集中,程序集包括可执行的文件,和其他相关的动态链接库.

扬中市13043444805: 什么是强类型? -
仝残八正: 为所有变量指定数据类型称为“强类型”.在.NET中使用强类型有以下优点:1.它为变量启用 IntelliSense® 支持.这允许您在输入代码时看到变量的属性和其他成员.2.它会运用编译器类型检查.这将捕捉到因溢出等错误而在运行时失败的语句.这也可以在不支持方法的对象上捕捉对方法的调用.3.使代码的执行速度更快.

扬中市13043444805: .NET中什么叫私有程序集?????? -
仝残八正: NET组件可以分为两大类:共享的.NET组件和私有的.NET组件. 共享的.NET组件需要通过标准公开关键字密码技术来保证自身的唯一性,在这一点上面比较类似于COM的全球唯一ID号码GUID.但是,我们在可能的情况下应当尽量避免使用共享的.NET组件,因为这样将会有可能再一次的陷入目前在视窗系统下长期困扰开发人员的“DLL地狱”. 私有的.NET组件是我们将会经常使用的.NET组件方式,在这种方式之下,我们发布.NET组件需要做的只是简单的进行拷贝操作就可以了,仿佛回到了远古的DOS时代了,在也不必关心纷繁复杂的系统注册表了,也不必担心DLL的版本被覆盖等等的问题了.

扬中市13043444805: 程序集到底是一个什么概念? -
仝残八正: dll或exe都可以程序集 开放分类: 编程作为一个单元进行版本控制和部署的一个或多个文件的集合.程序集是 .NET Framework 应用程序的主要构造块.所有托管类型和资源都包含在某个程序集内,并被标记为只能在该程序集的内部访问,或者...

扬中市13043444805: vb.net是什么
仝残八正: VB.net是微软最新平台技术,是.netframeworkSDK的一种语言.VB.net和VC#.net在功能上没有区别.编译以后生成的可执行文件被称为Assembly,即程序集.

扬中市13043444805: .net中为什么要引入程序集这一概念?使用它有什么好处呢? -
仝残八正: 引用程序集 就可以调用程序集内的函数. 好处就是它的封装性,多态性,继承性

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网