我刚刚将一个现有的项目复制到一台全新的机器上,开始对它进行开发,并且遇到了我引用的程序集之一的版本问题(发生了一个telerik DLL).
该项目最初引用了旧版本的程序集(我们称之为v1.0.0.0).我的新机器安装了最新版本的程序集,所以我想我已经更新了它(让我们调用新版本的v2.0.0.0).
现在问题是:如果我将旧的v1.0.0.0 dll复制到项目文件夹并将其添加为参考,则网站启动时没有问题.如果我删除该引用(并且还从我的系统中删除旧DLL)并添加新版本(v2.0.0.0),该页面将显示以下异常:
无法加载文件或程序集"XXXXXX,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 121fae78165ba3d4"或其中一个依赖项.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
显然,代码正在寻找过时的版本而无法找到它.但为什么?
我为该版本号编制了解决方案文件夹,但找不到一个引用.我仔细检查.csproj文件的文本,发现版本正确显示最新版本,HintPath正确显示新DLL的路径.此外,因为我没有在系统上安装旧的DLL,它不会出现在我的GAC中(尽管v2.0.0.0正如预期的那样).
然后,我启用了融合日志查看器,试图找出它为什么要查找旧版本,但没有运气:
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.
Run Code Online (Sandbox Code Playgroud)
所有这一切都说它是从寻找旧组件开始的.我试图在网上找到一个解决方案,并看到了类似的问题,但它似乎与我的问题完全相反.该提问者的程序是找到错误的DLL而不是引用的DLL.虽然我的问题是该程序神秘地寻找错误的DLL并且无法在bin文件夹和GAC中找到正确的DLL时找到它.
我为什么要寻找旧版本?我还能在哪里找到这个不好的参考?
Chr*_*way 144
我的猜测是你正在使用的另一个程序集引用了旧的dll.您是否熟悉正在使用的所有其他项目引用,并且其中任何一个都引用了Telerik dll吗?
你能在这个web.config文件中加入绑定重定向吗?
<dependentAssembly>
<assemblyIdentity name="Telerik" publicKeyToken="121fae78165ba3d4"/>
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
Not*_*tMe 24
我和Chris Conway在一起(赞成他).问题是你引用了项目中的一个telerik程序集,它引用了另一个不存在的程序集.
第一件事:我不会将任何供应商(即:telerik)程序集安装到GAC中.Telerik的东西无论如何都被编译成两个程序集(telerik.web.design和telerik.web.ui).只需部署应用程序.
其次,在每个.proj文件(如.csproj)中都会有一个<reference include..>
指向Telerik.Web.UI文件的文件.这通常包含版本号.确保放在bin文件夹中的程序集与该版本匹配.
第三,确保所有项目都使用最新的程序集.还要确保它们从本地路径而不是GAC抓取程序集.(我真的不喜欢GAC.它已经导致我一直在进行的一些项目的问题没有结束).我们通常有一个"Assemblies"文件夹,所有项目都用于外部程序集引用.
第四,visual studio会在每次加载网站项目时自动搜索您的gac,如果它在gac中找到某些内容,则会重新定位装配位置.我不记得它是否曾经为Web应用程序项目做过这样的事情,但是我很久没有遇到这个问题了.这可能会在部署期间导致类似问题.
第五,您可以在web.config中重新绑定程序集的版本号.在本runtime/assemblybinding
节中,您可以使用以下内容,将2008年部署的每个telerik程序集转发并指向一个非常特殊的版本:
<dependentAssembly>
<assemblyIdentity name="Telerik.Web.UI" publicKeyToken="121fae78165ba3d4" />
<bindingRedirect oldVersion="2008.0.0.0-2020.0.0.0" newVersion="2010.02.0713.35" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
Ray*_*ess 21
我尝试了大部分答案,但仍无法使其发挥作用.这对我有用:
右键单击引用 - > 属性 - > 将"特定版本"更改为false.
希望这可以帮助.
这并不是一个明确的答案,但我们遇到了这个问题,这是我们的情况以及解决方法:
开发1:
解决方案包含引用 NuGet 包的项目 A 和引用项目 A 的 MVC 项目。启用 NuGet 包还原,然后更新 NuGet 包。出现运行时错误,抱怨找不到 NuGet lib - 但错误是它正在寻找较旧的、未更新的版本。解决方案(这很荒谬):在调用项目 A 的 MVC 项目中的第一行代码上设置一个断点。使用 F11 进入。解决了——再也没有出现过问题。
开发2:
相同的解决方案和项目,但解决方案中的神奇设置断点和步骤不起作用。到处寻找版本重定向或对此 Nuget 包的其他错误引用,删除包并重新安装它,擦除 bin、obj、Asp.Net Temp,但没有解决问题。最后,更名为项目A,运行MVC项目——修复。将其重命名回原来的名称,它保持不变。
我没有任何解释为什么它会起作用,但它确实让我们摆脱了严重的困境。
归档时间: |
|
查看次数: |
181269 次 |
最近记录: |