(转)程序集清单定义与程序集引用不匹配- 分析及解决

原文: http://blog.chinaunix.net/uid-576762-id-2733741.html

上午在打开一个Asp.net网页时出现了这样的错误信息:

找到的名为“Infragistics.WebUI.UltraWebGrid.ExcelExport.v3.1”的程序集清单定义与程序集引用不匹配。

其中Infragistics.WebUI.UltraWebGrid.ExcelExport.v3.1是我们程序中用到的第三方控件。我自己也是第一次遇到这样的问题,咋一看估计是版本问题。但也不知道真正原因是什么以及该如何解决。上午查找了相应的资料将该“报错”成功解决。

既然是“程序集清单”和“程序集引用”不匹配。那让我们先来看看什么是“程序集清单”。

什么是程序集清单(Assembly Manifest)?

我们知道,在.net中。程序是以程序集为单位进行打包的,通常一个.exe文件或一个.dll文件就是一个程序集。程序集一般包含了以下几个部分:

1,程序集清单(或者叫程序集元数据);

2,类型元数据;

3,MSIL代码;

4,资源(可选项).

如此说来,一般情况下一个.exe或.dll都会包含这此内容。

具体请参考:http://msdn2.microsoft.com/zh-cn/library/zst29sk2(VS.80).aspx

在程序集中,程序集清单(manifest)是比较重要的,简单地讲它包含了一个程序集需要引用的外部分文件及程序集所包含的内容。其实也就是微软说的“自我说明”。我们可以通过Visual Studio2003自带的ILDASM工具查看该清单:

1,打开ILDASM,一般位于:VS2003安装目录\SDK\v1.1\Bin\目录下。

2,打开ILDASM,后选择文件->打开,将想要查看的程序集加进来。

3,双击“MANIFEST”;

打开后会看到如下内容:

上图的MANIFEST就是程序清单,像红线部分标出的是该程序集需要引用到外部文件Infragistics.WebUI.UltraWebGrid.ExcelExport.v3.1,同时也标识了版本号和密钥。

至此,我们知道是什么是程序集清单以及怎么样查看一个程序集清单了。下面我们再看看什么是程序集引用。

什么是程序集的引用?

在VS2003下编程的朋友们都知道,当我们用第三方控件,或是别人写的DLL时,我所要做的就是将其引用进来。引用一个程序集的动作分为两步:

首先,在项目中将需要的引用的程序集“添加至”引用中。

其次,在源文件件引入(using namespace)别人的命名空间;

如下:

如此将其引用进来以后,我们就可以使用该第三方控件提供的类、方法、资源等功能了。比如我们将“System.Data.SqlClient”引入以后,我们就可以通过其提供的类进行数据库的连接及操作了。

现在知道什么是“程序集清单”了,知道什么是“程序集引用”。问题也相对明了了。程序引用中的第三方控件的版本号(我这边是路径导致的)和最终生成的程序集清单所需的版本号并不相符。

.net的CLR在执行一个程序时(如.exe)时或使用一个.dll时,他会首先查看其程序集(.exe或.dll)的程序集清单,找到运行该程序所引用的程序集并加载。.net会按一定的路径搜索,加载.若加载的版本和程序清单中的不一致时就会出现类似"程序集清单定义与程序集引用不匹配"报错。

时间: 2024-11-06 11:12:00

(转)程序集清单定义与程序集引用不匹配- 分析及解决的相关文章

[程序集清单定义与程序集引用不匹配]分析及解决

引用自这里 什么是程序集清单(Assembly Manifest)? 我们知道,在.net中.程序是以程序集为单位进行打包的,通常一个.exe文件或一个.dll文件就是一个程序集.程序集一般包含了以下几个部分: 1,程序集清单(或者叫程序集元数据): 2,类型元数据: 3,MSIL代码: 4,资源(可选项). 如此说来,一般情况下一个.exe或.dll都会包含这此内容. 具体请参考:http://msdn2.microsoft.com/zh-cn/library/zst29sk2(VS.80).

MVC框架中,遇到 [程序集清单定义与程序集引用不匹配]怎么办?

项目里有一个WinForm程序,它需要使用一套第三方控件.而我的机器上存有这套控件的两种版本(一个是源码版,一个是演示版).结果经常出现“程序集清单定义与程序集引用不匹配的问题”的异常.最要命的是有时候啥都没改,重新编译几次就没问题了,然后改了些东西之后再重新编译就又会报那个异常. 解决方法:首先,确保程序所引用的第三方控件的DLL都是同一个版本的,然后,把程序的bin\Debug和obj\Debug里的所有文件全部删除(如果提示文件正被占用无法删除则重启机器,总之一定要一个不留地全删除),然后

未能加载文件或程序集Office, Version=2.2.0.0, Culture=neutral, PublicKeyToken=null或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

未能加载文件或程序集Office, Version=2.2.0.0, Culture=neutral, PublicKeyToken=null或它的某一个依赖项.找到的程序集清单定义与程序集引用不匹配. (异常来自 HRESULT:0x80131040) 1.导出Excel程序调试起来很正常,发布到服务器上却出错. 错误:未能加载文件或程序集“Office, Version=2.2.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项.找到的程序

未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。

未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项.找到的程序集清单定义与程序集引用不匹配. (异常来自 HRESULT:0x80131040)的错误解决方案 在web.config中加以下代码 <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v

解决未能加载文件或程序集“Newtonsoft.Json ....&quot;或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

今天遇到了一个比较坑的问题,琢磨了好久... 因为需要引用一个第三方的类库,三方的类库引用的是Newtonsoft.Json.dll 版本7.0.0而我的项目中引用的是Newtonsoft.Json.dll 版本4.5.0,这样两个引用造成了冲突.所有的引用都OK,编译时提示" Newtonsoft.Json.Linq"未引用,可是这明明已经引用了.尝试使用nuget更新,更新到最新版9.0.0,更新成功后可以一成功编译,但是访问时又出现这个样的问题. 最终解决方法,修改web.con

关于.net程序集引用不匹配的问题

今天启动asp.net mvc 程序,其中也用到了web api ,autofac等,为了版本兼容性问题,将mvc和 web api 的版本控制到5.2.0.0,Newtonsoft.Json 的版本是6.0.0.0,但结果还是报错了 未能加载文件或程序集"Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"或它的某一个依赖项.找到的程序集清单定义与程序集引用不匹配. (异

vs2013转换vs2010的项目导致程序集引用不匹配的解决方法

今天在用VS2013打开VS2010的一个MVC2的项目时失败,遂重新安装VS2010,可是问题来了: 在用VS2010编译时报错 找到项目引用的newtonsoft.Json,发现版本是4.5.11.15520,于是重新引用4.0.8.0,再次编译,奇怪的是,编译后版本再次从4.0.8.0变成了4.5.11.15520,报相同的错误. 实在找不到原因,于是死马当活马医,项目中用nuget更新了Json.net,再次查看引用版本,发现变成了6.0.0.0,编译,通过. 自己总结原因如下: 用VS

命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)

从SVN中检出新项目之后本地编译可以通过,但是运行一直报错,错误提示信息:命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?) 后来发现"System.Web.Mvc"这个dll文件的引用路径在本地,而我本地对应的路径下面没有这个dll,所以报错了,引用的具体路径为:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Web.Mvc\v4.0_4.0.0.1__31bf3856ad364e

解决T4模板的程序集引用的五种方案

在众多.NET应用下的代码生成方案中,比如CodeDOM,BuildProvider, 我觉得T4是最好的一种.关于T4的基本概念和模板结果,可以参考我的文章<基于T4的代码生成方式>.如果要了解T4具体的应用,则可以参考我的文章<创建代码生成器可以很简单:如何通过T4模板生成代码?>(上篇)(下篇).如果你编写T4模板,你不得不面对一个问题——如何引用一个程序集?VS 2010采用了与VS2008不同的程序集引用的解析机制.本篇文章为你介绍在VS2010下5种不同的程序集引用的方