关于程序集生成失败 -- 引用的程序集没有强名称的解决办法

关于程序集生成失败 -- 引用的程序集没有强名称的解决办法 

 我在PetShop4程序中加入了一个业务外观层,然后在业务逻辑层(PetShop.BLL)引用这个程序集,点“生成”,出现以下的错误:“程序集生成失败 -- 引用的程序集没有强名称”,原因是PetShop.BLL是强命名程序集,强命名程序集不能用普通程序集造成的。

        那么什么叫强命名程序集呢?我们知道,以前在Windows下开发程序时常会遭遇著名的“DLL Hell”问题,即动态链接库的向后兼容问题。微软在.Net产生前曾尝试使用COM组件的方式来解决DLL Hell问题,即使用Guid来唯一的标识每一个COM组件。但是,实际上使用COM组件(包括版本升级)也是一件颇为麻烦的事:为了运行COM组件就必须在组册表中对其进行注册,重新编译有可能破坏Guid从而导致原来引用此COM组件的程序不能正确运行,等等。

在.Net中,微软引入了一种新的解决方案:强命名程序集(Strong Name),以及与之配套的全局程序集缓存(GAC)来解决这个问题。

我们知道,.Net使用Name、Version、Culture、PublicToken四个属性来唯一标识一个程序集,而不同产品前三个属性(Name、Version和Culture)完全相同的情况是有可能发生的,如此一来,这唯一标识程序集可重任就落到PublicToken的头上了。强命名的程序集正是使用RSA来保证PublicToken的唯一性,因为在理论上,非对称算法RSA生成的公钥/私钥对不会重复。.Net正是通过在编译项目时将指定的公钥/私钥对写入程序集来保证其唯一性。

对于全局程序集缓存(GAC),MSDN是这样介绍的:安装有公共语言运行库的每台计算机都具有称为全局程序集缓存的计算机范围内的代码缓存。全局程序集缓存中存储了专门指定给由计算机中若干应用程序共享的程序集。

在开发一般的、非共享的程序时,我们不需要使用强命名的程序集,仅将项目(Project)编辑成.DLL或者.EXE即可。但是,如果我们开发的是组件库、框架时,通过对程序集进行强命名,并使用将其部署到GAC中,可以保证我们的程序集不会出现版本问题。

那么,如何创建强命名的程序集呢?以下是其步骤

  1. 使用SN工具来生成密钥对。该工具位于安装.NET Framework SDK的Bin目录中,在命令行中使用“ SN -k [驱动器号]:[放置密钥的目录][密钥名称].snk ”这样的语句可以生成密钥对。如,我们使用 SN -k C:/MySloutionKey.snk,可以把名为MySloutionKey.snk的密钥对文件生成到C盘根目录下;
  2. 此时,该密钥对并未与项目的程序集建立关联,我们需要打开项目(Project)的AssemblyInfo.cs 文件。此文件具有一个程序集属性列表,默认情况下,在 Visual Studio .NET 中创建项目时将包括这些属性。在代码中修改名为“AssemblyKeyFile”的属性,如下所示:

    [assembly:AssemblyKeyFile("C:/MySloutionKey.snk")]
  3. 这样,编译该项目即生成强命名的程序集。

         根据以上的说法,这个错误的解决问题如下:

首先打开visual studio 2005命令提示(开始-->程序-->microsoft visual studio 2005-->visual studio  tools-->visual studio 2005命令提示),在其中输入:sn  -k  PetShop.IBLL.snk回车,这样就生成了 PetShop.IBLL.snk,在路径C:/Program Files/Microsoft Visual Studio 8/VC找到 PetShop.IBLL.snk文件,放在IBLL项目的根目录也就是IBLL目录下,然后打开BLL项目的AssemblyInfo.cs,在里面加入如下代码行:[assembly: AssemblyKeyFile("PetSHop.IBLL.snk")], 然后重新生成PetShop.IBLL项目,这样一个强命名的程序集就生成了。

时间: 2024-10-31 13:35:10

关于程序集生成失败 -- 引用的程序集没有强名称的解决办法的相关文章

引用owc时出现“程序集生成失败 -- 引用的程序集“Interop.OWC10”没有强名称” (在线等)

问题描述 引用owc时出现"程序集生成失败--引用的程序集"Interop.OWC10"没有强名称"(在线等) 解决方案 解决方案二:该回复于2007-12-04 11:20:09被版主删除解决方案三:你自己的项目是不是强名称的,如果是先不要搞成强名称的.解决方案四:mark解决方案五:友情顶一下解决方案六:owc控件是microsoftoffice图表控件(owc10为ofiiceXP的组件.owc11为office2003的组件,组件的路径为C:ProgramF

引用owc时出现“程序集生成失败 -- 引用的程序集“Interop.OWC10”没有强名称”

问题描述 引用owc时出现"程序集生成失败--引用的程序集"Interop.OWC10"没有强名称"在线等 解决方案 解决方案二:该回复于2007-12-04 11:20:09被版主删除解决方案三:相关资料:

程序集生成失败 -- 引用的程序集“Interop.JRO”没有强名称

问题描述 程序集生成失败--引用的程序集"Interop.JRO"没有强名称这个怎么解决了,查了很多资料就是没有解决

关于dll文件的生成以及找不到jni.h的解决办法(fatal error C1083: Cannot open include file: 'jni.h':)

引用 环境:Winxp+VC6.0  过程:编绎生成Dll文件时出错 首先是关于dll文件的生成:  方法如下:  打开VC++6.0,新建->; 工程 ->; win32 Dynamic-Link Library在向导中选择空工程  添加如用javah生成的头文件和自己写的一个cpp文件,然后编译运行,如果没有出现错误,既可以在编译成功的debug文件夹中找到dll文件,如果出现找不到jni.h的错误,那么用如下方法解决:  fatal error C1083: Cannot open in

win7自动更新失败无法进入系统的两种解决办法

  win7是现在的主流操作系统,在使用过程中,很多人都会遇到开机或关机提示"配置windows update失败,还原更改请勿关机"的提示. 其实这是win7在联网的情况下,自动更新造成的,在开机或关机的时候会提示,一般正常更新完成即可,但可能是用户没有耐心到系统更新完成,而强行关机造成的.如果遇到这种情况,我们可以尝试以下方法进行处理. 第一种方法 1.重新开机启动,按F8键,选择安全模式进入系统. 2.进行安全模式后,指向计算机机,右键属性.在左下角,打开"window

aspx引用public string getPicurl(string picurl)解决办法

刚才在论坛上看到一帖:   于是尝试做了一下,直接使用一个Img标签是无法实现.因为函数中返回的即是一个img html标签,因此在aspx页再不能使用Img了.   现在可以回到网友的问题,那在xxx.aspx网页怎样应用这个函数?显示html代码,可以使用一个Literal控件实现:   浏览(图片来自Internet,图片版权归原作者所有!):   查看生成的源代码:   注,本篇还让你了解到,在没有使用Repeater,GridView或DataList数据控件,还是可以使用Eval("

迅雷下载提示 “下载失败,文件被其他程序占用”解决办法

[方法1] 如果是windows 7 系统可以是权限问题,我们选择退出迅雷,然后再找迅雷快捷方式,右击它在弹出菜单点击"以管理员身份运行迅雷再下载"试一一可以解决不.     [方法2] 有可能是杀毒给占了,我们退了杀毒软件试一下.   [方法3] 也可能是资源自身的问题,请任意下载一个安装包测试看下是否正常,如果下载这里的资源正常,那这个就是您当前下载的资源问题了.   [方法4] 如果你下载所有软件都是提示 下载失败,文件被其他程序占用 那有可能是迅雷问题我们退出重启电脑试一下.

SSH登录失败:Host key verification failed.的解决办法

今天在SSH登录时候显示登录失败,Host key verification failed. 错误提示如下: ~ zfs$ ssh root@192.168.1.103 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

三星E7009安装软件失败怎么办?E7安装软件被阻止解决办法

1.打开未知来源的位置在手机下面的[设定] [安全] [未知来源]现在我们找到它点击它.   2.之后会弹出一个相关提示了,意思就是"未知来源"提示,阅读后,点击[确定]然后我们的未知源即被勾选,就可以安装软件了.   注意:如果还是无法成功安装软件我们可以从下面几个方法来排除 1.E7009手机只支持APK格式的安卓文件 2.软件下载到手机过程中损坏了或非官方下载的安装包 3.上面都有问题可以恢复手机出厂设置了 4.如果上面方法全部不行可能是手机有问题可以送出维修了.