首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.Net挑选错误的引用程序集版本

.Net挑选错误的引用程序集版本
EN

Stack Overflow用户
提问于 2010-11-16 03:13:26
回答 22查看 219.6K关注 0票数 154

我刚刚将一个现有的项目复制到一台全新的机器上开始开发,并且遇到了我引用的一个程序集(碰巧是telerik DLL )的版本问题。

该项目最初引用了较旧版本的程序集(让我们称其为v1.0.0.0)。我的新机器安装了最新版本的程序集,所以我想我已经更新了它(让我们称之为新版本v2.0.0.0)。

现在的问题是:如果我将旧的v1.0.0.0dll复制到项目文件夹并将其添加为引用,则网站启动时没有任何问题。如果我删除了该引用(还从系统中删除了旧DLL )并添加了新版本(v2.0.0.0),页面将显示以下异常:

无法加载文件或程序集“XXXXXX,Version=1.0.0.0,Culture=neutral,PublicKeyToken=121fae78165ba3d4”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT异常: 0x80131040)

显然,代码正在寻找过期的版本,但找不到它。但是为什么呢?

我在solution文件夹中查找了该版本号,但找不到任何参考资料。我仔细检查了.csproj文件的文本,发现版本正确地显示了最新版本,并且HintPath正确地显示了新DLL的路径。此外,因为我没有在系统上安装旧的DLL,所以它不会显示在我的GAC中(尽管v2.0.0.0会,正如预期的那样)。

然后,我启用了融合日志查看器,试图找出为什么它要查找那个旧版本,但没有成功:

代码语言:javascript
复制
Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.


=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
 (Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

它所说的一切都是从寻找旧的程序集开始的。我试着在网上找到一个解决方案,看到了这个类似的SO question,但它似乎与我的问题完全相反。提问者的程序正在查找错误的DLL,而不是引用的DLL。而我的问题是,程序神秘地寻找错误的DLL,并且无法找到它,而正确的DLL可以在本地的bin文件夹和GAC中找到。

为什么我的要找旧版本?我还可以在哪里搜索到这个糟糕的参考资料?

EN

回答 22

Stack Overflow用户

回答已采纳

发布于 2010-11-16 03:43:48

我猜测您正在使用的另一个程序集正在引用旧的dll。您是否熟悉正在使用的所有其他项目引用,其中是否有对Telerik dll的引用?

你能像这样在你的web.config文件中放一个绑定重定向吗?

代码语言:javascript
复制
<dependentAssembly>
 <assemblyIdentity name="Telerik" publicKeyToken="121fae78165ba3d4"/>
 <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
票数 166
EN

Stack Overflow用户

发布于 2013-06-29 01:14:35

我尝试了大部分的答案,但仍然不能让它工作。这对我很有效:

右键单击reference -> properties -> 将'Specific Version‘更改为false。

希望这能有所帮助。

票数 27
EN

Stack Overflow用户

发布于 2010-11-16 03:56:01

在这一点上,我和Chris Conway (支持他)是一致的。问题是,您在项目中引用了一个telerik程序集,而该程序集引用了另一个不存在的程序集。

第一件事:我不会在GAC中安装任何供应商(比如: telerik)的程序集。Telerik的东西被编译成两个程序集(telerik.web.design和telerik.web.ui)。只需将它们与应用程序一起部署即可。

其次,在您的每个.proj文件(如.csproj)中,将有一个指向Telerik.Web.UI文件的<reference include..>。这通常包含一个版本号。确保放在bin文件夹中的程序集与该版本匹配。

第三,确保您的所有项目都使用最新的程序集。还要确保它们从本地路径而不是GAC抓取程序集。(我真的真的不喜欢GAC。它在我参与的一些项目中引起了无数的问题)。我们通常有一个"Assemblies“文件夹,所有项目都使用该文件夹来进行外部程序集引用。

第四,每次加载网站项目时,visual studio都会自动搜索gac,如果在gac中找到了某些内容,则会重新确定程序集位置。我不记得它是否曾经在web应用程序项目中这样做过,但我已经很长时间没有遇到这个问题了。这可能会在部署过程中导致类似的问题。

第五,可以在web.config中重新绑定程序集的版本号。在runtime/assemblybinding部分中,您可以使用类似于以下内容的内容,将2008年部署的每个telerik程序集向前移动,并将其指向一个非常特定的版本:

代码语言:javascript
复制
  <dependentAssembly>
    <assemblyIdentity name="Telerik.Web.UI" publicKeyToken="121fae78165ba3d4" />
    <bindingRedirect oldVersion="2008.0.0.0-2020.0.0.0" newVersion="2010.02.0713.35" />
  </dependentAssembly>
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4187907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档